Skip to content

Commit bdd2912

Browse files
CodecMod: add tabs for encoders and decoders
1 parent 5575ed8 commit bdd2912

9 files changed

Lines changed: 95 additions & 40 deletions

File tree

‎CodecMod/build.gradle.kts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ android {
1313
}
1414
compileOptions {
1515
isCoreLibraryDesugaringEnabled = true
16+
viewBinding.isEnabled = true
1617
}
1718
}
1819

‎CodecMod/src/main/kotlin/com/programminghoch10/CodecMod/MediaCodecPreference.kt‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ class MediaCodecPreference(context: Context, codecStore: CodecStore, val mediaCo
1616
fun setFilterSpec(filterSpec: FilterSpec) {
1717
this.filterSpec = filterSpec
1818
isVisible = when {
19+
!filterSpec.showDecoders && !mediaCodecInfoWrapper.isEncoder -> false
20+
!filterSpec.showEncoders && mediaCodecInfoWrapper.isEncoder -> false
1921
!filterSpec.showAliases && mediaCodecInfoWrapper.isAlias -> false
2022
!filterSpec.showVideoCodecs && mediaCodecInfoWrapper.isVideoCodec -> false
2123
!filterSpec.showAudioCodecs && mediaCodecInfoWrapper.isAudioCodec -> false
@@ -64,6 +66,8 @@ class MediaCodecPreference(context: Context, codecStore: CodecStore, val mediaCo
6466
}
6567

6668
data class FilterSpec(
69+
val showEncoders: Boolean,
70+
val showDecoders: Boolean,
6771
val showAliases: Boolean,
6872
val showVideoCodecs: Boolean,
6973
val showAudioCodecs: Boolean,

‎CodecMod/src/main/kotlin/com/programminghoch10/CodecMod/SettingsActivity.kt‎

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,37 @@ import android.util.Log
77
import android.view.Menu
88
import android.view.MenuInflater
99
import android.view.MenuItem
10+
import android.view.View
11+
import androidx.core.view.isVisible
1012
import androidx.fragment.app.FragmentActivity
11-
import androidx.preference.Preference
12-
import androidx.preference.PreferenceCategory
1313
import androidx.preference.PreferenceFragmentCompat
1414
import androidx.preference.children
1515
import com.programminghoch10.CodecMod.CodecStore.Companion.DEFAULT_VALUE
16+
import com.programminghoch10.CodecMod.databinding.SettingsActivityBinding
1617

1718
class SettingsActivity : FragmentActivity() {
19+
private lateinit var binding: SettingsActivityBinding
20+
val allHiddenByFiltersView get() = binding.allHiddenByFilters
21+
val buttonCategoryDecoders get() = binding.buttonCategoryDecoders
22+
val buttonCategoryEncoders get() = binding.buttonCategoryEncoders
23+
1824
override fun onCreate(savedInstanceState: Bundle?) {
1925
super.onCreate(savedInstanceState)
20-
setContentView(R.layout.settings_activity)
26+
binding = SettingsActivityBinding.inflate(layoutInflater, null, false)
27+
setContentView(binding.root)
2128
if (savedInstanceState == null) {
2229
supportFragmentManager.beginTransaction().replace(R.id.settings, SettingsFragment()).commit()
2330
}
2431
actionBar?.setDisplayHomeAsUpEnabled(supportFragmentManager.backStackEntryCount > 0)
32+
buttonCategoryDecoders.isActivated = true
33+
buttonCategoryEncoders.isActivated = false
2534
}
2635

2736
class SettingsFragment : PreferenceFragmentCompat() {
2837
lateinit var menu: Menu
38+
val activity get() = requireActivity() as SettingsActivity
2939

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)
40+
val allMediaCodecPreferences get() = preferenceScreen.children.filterIsInstance(MediaCodecPreference::class.java)
3541

3642
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
3743
inflater.inflate(R.menu.settings_options, menu)
@@ -55,35 +61,45 @@ class SettingsActivity : FragmentActivity() {
5561
}
5662
if (item.itemId in listOf(R.id.enable_all_visible, R.id.disable_all_visible)) {
5763
val checked = item.itemId == R.id.enable_all_visible
58-
allPreferences.forEach { it.isChecked = checked }
64+
allMediaCodecPreferences.filter { it.isVisible }.forEach { it.isChecked = checked }
5965
return true
6066
}
6167
if (item.itemId == R.id.reset_configuration) {
62-
allPreferences.forEach { it.isChecked = DEFAULT_VALUE }
68+
allMediaCodecPreferences.forEach { it.isChecked = DEFAULT_VALUE }
6369
return true
6470
}
6571
return super.onOptionsItemSelected(item)
6672
}
6773

6874
fun reevaluateFilters() {
6975
val filterSpec = MediaCodecPreference.FilterSpec(
76+
activity.buttonCategoryEncoders.isActivated,
77+
activity.buttonCategoryDecoders.isActivated,
7078
menu.findItem(R.id.show_aliases).isChecked,
7179
menu.findItem(R.id.show_video_codecs).isChecked,
7280
menu.findItem(R.id.show_audio_codecs).isChecked,
7381
menu.findItem(R.id.show_hardware_codecs).isChecked,
7482
menu.findItem(R.id.show_software_codecs).isChecked,
7583
)
7684
Log.d(this::class.java.simpleName, "reevaluateFilters: $filterSpec")
77-
allPreferences.forEach { it.setFilterSpec(filterSpec) }
78-
allHiddenByFiltersPreference.isVisible = allPreferences.all { !it.isVisible }
85+
allMediaCodecPreferences.forEach { it.setFilterSpec(filterSpec) }
86+
activity.allHiddenByFiltersView.isVisible = allMediaCodecPreferences.all { !it.isVisible }
7987
}
8088

8189
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
82-
setPreferencesFromResource(R.xml.root_preferences, rootKey)
90+
preferenceScreen = preferenceManager.createPreferenceScreen(requireContext())
8391
setHasOptionsMenu(true)
84-
//getPreferenceManager().setSharedPreferencesName("codecs");
8592
val codecStore = CodecStore(requireContext())
8693

94+
val onCategoryChangeListener = View.OnClickListener {
95+
activity.buttonCategoryDecoders.isActivated = false
96+
activity.buttonCategoryEncoders.isActivated = false
97+
it.isActivated = true
98+
reevaluateFilters()
99+
}
100+
activity.buttonCategoryDecoders.setOnClickListener(onCategoryChangeListener)
101+
activity.buttonCategoryEncoders.setOnClickListener(onCategoryChangeListener)
102+
87103
var mediaCodecs: List<MediaCodecInfoWrapper>
88104
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
89105
val mediaCodecList = MediaCodecList(MediaCodecList.ALL_CODECS)
@@ -101,8 +117,7 @@ class SettingsActivity : FragmentActivity() {
101117
for (mediaCodecInfo in mediaCodecs) {
102118
val preference = MediaCodecPreference(requireContext(), codecStore, mediaCodecInfo)
103119
preference.isIconSpaceReserved = false
104-
val preferenceCategory = if (mediaCodecInfo.isEncoder) encodersPreferenceCategory else decodersPreferenceCategory
105-
preferenceCategory.addPreference(preference)
120+
preferenceScreen.addPreference(preference)
106121
}
107122
}
108123
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<selector xmlns:android="http://schemas.android.com/apk/res/android">
3+
<item android:color="?android:attr/colorControlActivated"
4+
android:state_activated="true" />
5+
<item android:color="?android:attr/colorControlNormal" />
6+
</selector>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<selector xmlns:android="http://schemas.android.com/apk/res/android">
3+
<item android:color="?android:attr/textColorHighlight"
4+
android:state_activated="true" />
5+
<item android:color="?android:attr/textColor" />
6+
</selector>

‎CodecMod/src/main/res/layout/settings_activity.xml‎

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,47 @@
44
style="@style/AppTheme.Edge2EdgeFix"
55
android:layout_width="match_parent"
66
android:layout_height="match_parent"
7+
android:animateLayoutChanges="true"
8+
android:orientation="vertical"
79
>
810

11+
<LinearLayout
12+
android:layout_width="match_parent"
13+
android:layout_height="wrap_content"
14+
>
15+
16+
<Button
17+
android:id="@+id/button_category_decoders"
18+
style="@style/AppTheme.ButtonBar"
19+
android:layout_width="0dp"
20+
android:layout_height="wrap_content"
21+
android:layout_weight="1"
22+
android:text="@string/category_decoders_title"
23+
/>
24+
25+
<Button
26+
android:id="@+id/button_category_encoders"
27+
style="@style/AppTheme.ButtonBar"
28+
android:layout_width="0dp"
29+
android:layout_height="wrap_content"
30+
android:layout_weight="1"
31+
android:text="@string/category_encoders_title"
32+
/>
33+
</LinearLayout>
34+
35+
<TextView
36+
android:id="@+id/allHiddenByFilters"
37+
android:layout_width="match_parent"
38+
android:layout_height="wrap_content"
39+
android:gravity="center_horizontal"
40+
android:text="@string/all_hidden_by_filters"
41+
android:visibility="gone"
42+
/>
43+
944
<FrameLayout
1045
android:id="@+id/settings"
1146
android:layout_width="match_parent"
12-
android:layout_height="match_parent"
47+
android:layout_height="0dp"
48+
android:layout_weight="1"
1349
/>
1450
</LinearLayout>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
33

4-
<style name="AppTheme" parent="@android:style/Theme.DeviceDefault.Settings" />
4+
<style name="AppTheme"
5+
parent="@android:style/Theme.DeviceDefault.Settings" />
56
</resources>
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
33

4-
<style name="AppTheme" parent="@android:style/Theme.DeviceDefault" />
4+
<style name="AppTheme"
5+
parent="@android:style/Theme.DeviceDefault" />
56

67
<style name="AppTheme.Edge2EdgeFix">
78
<item name="android:fitsSystemWindows">true</item>
89
</style>
10+
11+
<style name="AppTheme.ButtonBar"
12+
parent="@android:style/Widget.DeviceDefault.Button.Borderless">
13+
<item name="android:textColor">@color/tab_text_color</item>
14+
</style>
15+
916
</resources>

‎CodecMod/src/main/res/xml/root_preferences.xml‎

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)