mirror of
https://github.com/Michatec/Radio.git
synced 2026-03-31 23:46:28 +02:00
feat(ui): add TV-specific preference layouts for focus visibility
This commit is contained in:
@@ -46,6 +46,11 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
(activity as AppCompatActivity).supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
(activity as AppCompatActivity).supportActionBar?.title = getString(R.string.fragment_settings_title)
|
(activity as AppCompatActivity).supportActionBar?.title = getString(R.string.fragment_settings_title)
|
||||||
requireActivity().window.navigationBarColor = getColor(requireContext(), android.R.attr.colorBackground)
|
requireActivity().window.navigationBarColor = getColor(requireContext(), android.R.attr.colorBackground)
|
||||||
|
|
||||||
|
// Set TV-specific layout for preferences to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
listView.setBackgroundResource(R.drawable.selector_preference_focus)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Overrides onCreatePreferences from PreferenceFragmentCompat */
|
/* Overrides onCreatePreferences from PreferenceFragmentCompat */
|
||||||
@@ -85,6 +90,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
return@setOnPreferenceChangeListener false
|
return@setOnPreferenceChangeListener false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceThemeSelection.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
// set up "Update Station Images" preference
|
// set up "Update Station Images" preference
|
||||||
val preferenceUpdateStationImages = Preference(activity as Context)
|
val preferenceUpdateStationImages = Preference(activity as Context)
|
||||||
@@ -101,6 +110,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
)
|
)
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceUpdateStationImages.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Update Stations" preference
|
// set up "Update Stations" preference
|
||||||
@@ -118,6 +131,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
)
|
)
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceUpdateCollection.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "M3U Export" preference
|
// set up "M3U Export" preference
|
||||||
@@ -129,6 +146,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
openSaveM3uDialog()
|
openSaveM3uDialog()
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceM3uExport.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "PLS Export" preference
|
// set up "PLS Export" preference
|
||||||
@@ -140,6 +161,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
openSavePlsDialog()
|
openSavePlsDialog()
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferencePlsExport.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Backup Stations" preference
|
// set up "Backup Stations" preference
|
||||||
@@ -151,6 +176,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
openBackupCollectionDialog()
|
openBackupCollectionDialog()
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceBackupCollection.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Restore Stations" preference
|
// set up "Restore Stations" preference
|
||||||
@@ -162,6 +191,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
openRestoreCollectionDialog()
|
openRestoreCollectionDialog()
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceRestoreCollection.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Buffer Size" preference
|
// set up "Buffer Size" preference
|
||||||
@@ -172,6 +205,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
preferenceBufferSize.summaryOn = getString(R.string.pref_buffer_size_summary_enabled)
|
preferenceBufferSize.summaryOn = getString(R.string.pref_buffer_size_summary_enabled)
|
||||||
preferenceBufferSize.summaryOff = getString(R.string.pref_buffer_size_summary_disabled)
|
preferenceBufferSize.summaryOff = getString(R.string.pref_buffer_size_summary_disabled)
|
||||||
preferenceBufferSize.setDefaultValue(PreferencesHelper.loadLargeBufferSize())
|
preferenceBufferSize.setDefaultValue(PreferencesHelper.loadLargeBufferSize())
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceBufferSize.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Edit Stream Address" preference
|
// set up "Edit Stream Address" preference
|
||||||
@@ -183,6 +220,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
preferenceEnableEditingStreamUri.summaryOff = getString(R.string.pref_edit_station_stream_summary_disabled)
|
preferenceEnableEditingStreamUri.summaryOff = getString(R.string.pref_edit_station_stream_summary_disabled)
|
||||||
preferenceEnableEditingStreamUri.setDefaultValue(PreferencesHelper.loadEditStreamUrisEnabled(context))
|
preferenceEnableEditingStreamUri.setDefaultValue(PreferencesHelper.loadEditStreamUrisEnabled(context))
|
||||||
preferenceEnableEditingStreamUri.isEnabled = PreferencesHelper.loadEditStreamUrisEnabled(context)
|
preferenceEnableEditingStreamUri.isEnabled = PreferencesHelper.loadEditStreamUrisEnabled(context)
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceEnableEditingStreamUri.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "Edit Stations" preference
|
// set up "Edit Stations" preference
|
||||||
@@ -205,6 +246,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
}
|
}
|
||||||
return@setOnPreferenceChangeListener true
|
return@setOnPreferenceChangeListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceEnableEditingGeneral.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "App Version" preference
|
// set up "App Version" preference
|
||||||
@@ -223,6 +268,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
}
|
}
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceAppVersion.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set up "GitHub" preference
|
// set up "GitHub" preference
|
||||||
@@ -239,6 +288,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceGitHub.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
// set up "License" preference
|
// set up "License" preference
|
||||||
val preferenceLicense = Preference(context)
|
val preferenceLicense = Preference(context)
|
||||||
@@ -254,6 +307,10 @@ class SettingsFragment : PreferenceFragmentCompat(), YesNoDialog.YesNoDialogList
|
|||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
// Set TV layout for preference to ensure focus is visible
|
||||||
|
if (resources.configuration.uiMode and android.content.res.Configuration.UI_MODE_TYPE_MASK == android.content.res.Configuration.UI_MODE_TYPE_TELEVISION) {
|
||||||
|
preferenceLicense.layoutResource = R.layout.preference_tv
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// set preference categories
|
// set preference categories
|
||||||
|
|||||||
20
app/src/main/res/drawable/selector_preference_focus.xml
Normal file
20
app/src/main/res/drawable/selector_preference_focus.xml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item android:state_focused="true">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/list_card_stroke_focused" />
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item android:state_pressed="true">
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/list_card_stroke_focused" />
|
||||||
|
<corners android:radius="8dp" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@android:color/transparent" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
</selector>
|
||||||
14
app/src/main/res/layout-television/preference_tv.xml
Normal file
14
app/src/main/res/layout-television/preference_tv.xml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/selector_preference_focus"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="8dp">
|
||||||
|
|
||||||
|
<androidx.preference.PreferenceViewHolder
|
||||||
|
android:id="@android:id/widget_frame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
Reference in New Issue
Block a user