@@ -3,9 +3,16 @@ package com.programminghoch10.CodecMod
33import android.media.MediaCodecList
44import android.os.Build
55import android.os.Bundle
6+ import android.util.Log
7+ import android.view.Menu
8+ import android.view.MenuInflater
9+ import android.view.MenuItem
610import androidx.fragment.app.FragmentActivity
11+ import androidx.preference.Preference
712import androidx.preference.PreferenceCategory
813import androidx.preference.PreferenceFragmentCompat
14+ import androidx.preference.children
15+ import com.programminghoch10.CodecMod.CodecStore.Companion.DEFAULT_VALUE
916
1017class SettingsActivity : FragmentActivity () {
1118 override fun onCreate (savedInstanceState : Bundle ? ) {
@@ -18,12 +25,64 @@ class SettingsActivity : FragmentActivity() {
1825 }
1926
2027 class SettingsFragment : PreferenceFragmentCompat () {
28+ lateinit var menu: Menu
29+
30+ val decodersPreferenceCategory get() = findPreference<PreferenceCategory >(" category_decoders" )!!
31+ val encodersPreferenceCategory get() = findPreference<PreferenceCategory >(" category_encoders" )!!
32+ val allHiddenByFiltersPreference get() = findPreference<Preference >(" allHiddenByFilters" )!!
33+
34+ val allPreferences get() = (encodersPreferenceCategory.children + decodersPreferenceCategory.children).filterIsInstance(MediaCodecPreference ::class .java)
35+
36+ override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
37+ inflater.inflate(R .menu.settings_options, menu)
38+ this .menu = menu
39+ reevaluateFilters()
40+ super .onCreateOptionsMenu(menu, inflater)
41+ }
42+
43+ override fun onOptionsItemSelected (item : MenuItem ): Boolean {
44+ if (item.itemId in listOf (
45+ R .id.show_aliases,
46+ R .id.show_video_codecs,
47+ R .id.show_audio_codecs,
48+ R .id.show_hardware_codecs,
49+ R .id.show_software_codecs,
50+ )
51+ ) {
52+ item.isChecked = ! item.isChecked
53+ reevaluateFilters()
54+ return true
55+ }
56+ if (item.itemId in listOf (R .id.enable_all_visible, R .id.disable_all_visible)) {
57+ val checked = item.itemId == R .id.enable_all_visible
58+ allPreferences.forEach { it.isChecked = checked }
59+ return true
60+ }
61+ if (item.itemId == R .id.reset_configuration) {
62+ allPreferences.forEach { it.isChecked = DEFAULT_VALUE }
63+ return true
64+ }
65+ return super .onOptionsItemSelected(item)
66+ }
67+
68+ fun reevaluateFilters () {
69+ val filterSpec = MediaCodecPreference .FilterSpec (
70+ menu.findItem(R .id.show_aliases).isChecked,
71+ menu.findItem(R .id.show_video_codecs).isChecked,
72+ menu.findItem(R .id.show_audio_codecs).isChecked,
73+ menu.findItem(R .id.show_hardware_codecs).isChecked,
74+ menu.findItem(R .id.show_software_codecs).isChecked,
75+ )
76+ Log .d(this ::class .java.simpleName, " reevaluateFilters: $filterSpec " )
77+ allPreferences.forEach { it.setFilterSpec(filterSpec) }
78+ allHiddenByFiltersPreference.isVisible = allPreferences.all { ! it.isVisible }
79+ }
80+
2181 override fun onCreatePreferences (savedInstanceState : Bundle ? , rootKey : String? ) {
2282 setPreferencesFromResource(R .xml.root_preferences, rootKey)
83+ setHasOptionsMenu(true )
2384 // getPreferenceManager().setSharedPreferencesName("codecs");
2485 val codecStore = CodecStore (requireContext())
25- val decodersPreferenceCategory = findPreference<PreferenceCategory >(" category_decoders" )!!
26- val encodersPreferenceCategory = findPreference<PreferenceCategory >(" category_encoders" )!!
2786
2887 var mediaCodecs: List <MediaCodecInfoWrapper >
2988 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP ) {
@@ -40,15 +99,11 @@ class SettingsActivity : FragmentActivity() {
4099 )
41100 }
42101 for (mediaCodecInfo in mediaCodecs) {
43- if (mediaCodecInfo.isAlias && ! SHOW_ALIASES ) continue
44102 val preference = MediaCodecPreference (requireContext(), codecStore, mediaCodecInfo)
103+ preference.isIconSpaceReserved = false
45104 val preferenceCategory = if (mediaCodecInfo.isEncoder) encodersPreferenceCategory else decodersPreferenceCategory
46105 preferenceCategory.addPreference(preference)
47106 }
48107 }
49-
50- companion object {
51- const val SHOW_ALIASES = true
52- }
53108 }
54109}
0 commit comments