Settings: Migrate all preferences to navigation components

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-24 23:02:13 +05:30
parent a4df896704
commit 88d813756c
13 changed files with 156 additions and 149 deletions

View File

@@ -1,11 +1,23 @@
package com.aurora.store.view.ui.preferences package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R import com.aurora.store.R
class AdvancedPreference : PreferenceFragmentCompat() { class AdvancedPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_advanced, rootKey) setPreferencesFromResource(R.xml.preferences_advanced, rootKey)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.title_advanced)
setNavigationOnClickListener { findNavController().navigateUp() }
}
}
} }

View File

@@ -21,6 +21,8 @@ package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
@@ -36,6 +38,11 @@ class DownloadPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.pref_app_download)
setNavigationOnClickListener { findNavController().navigateUp() }
}
val downloadExternalPreference: SwitchPreferenceCompat? = val downloadExternalPreference: SwitchPreferenceCompat? =
findPreference(Preferences.PREFERENCE_DOWNLOAD_EXTERNAL) findPreference(Preferences.PREFERENCE_DOWNLOAD_EXTERNAL)

View File

@@ -20,11 +20,23 @@
package com.aurora.store.view.ui.preferences package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R import com.aurora.store.R
class FilterPreference : PreferenceFragmentCompat() { class FilterPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_filter, rootKey) setPreferencesFromResource(R.xml.preferences_filter, rootKey)
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.action_filter)
setNavigationOnClickListener { findNavController().navigateUp() }
}
}
} }

View File

@@ -22,6 +22,8 @@ package com.aurora.store.view.ui.preferences
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.isOAndAbove import com.aurora.extensions.isOAndAbove
@@ -75,6 +77,11 @@ class InstallationPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.title_installation)
setNavigationOnClickListener { findNavController().navigateUp() }
}
if (AppInstaller.hasShizuku(requireContext()) && isOAndAbove()) { if (AppInstaller.hasShizuku(requireContext()) && isOAndAbove()) {
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener) Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
Shizuku.addBinderDeadListener(shizukuDeadListener) Shizuku.addBinderDeadListener(shizukuDeadListener)

View File

@@ -1,31 +0,0 @@
/*
* Aurora Store
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
*
* Aurora Store is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* Aurora Store is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.aurora.store.view.ui.preferences
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R
class MainPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_main, rootKey)
}
}

View File

@@ -20,6 +20,9 @@
package com.aurora.store.view.ui.preferences package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.runOnUiThread import com.aurora.extensions.runOnUiThread
@@ -29,6 +32,7 @@ import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
class NetworkPreference : PreferenceFragmentCompat() { class NetworkPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_network, rootKey) setPreferencesFromResource(R.xml.preferences_network, rootKey)
@@ -45,4 +49,12 @@ class NetworkPreference : PreferenceFragmentCompat() {
} }
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.pref_network_title)
setNavigationOnClickListener { findNavController().navigateUp() }
}
}
} }

View File

@@ -19,111 +19,54 @@
package com.aurora.store.view.ui.preferences package com.aurora.store.view.ui.preferences
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.getStyledAttributeColor
import com.aurora.extensions.restartApp
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.databinding.FragmentSettingBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder
class SettingsFragment : Fragment(R.layout.fragment_setting), class SettingsFragment : PreferenceFragmentCompat() {
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private var _binding: FragmentSettingBinding? = null override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
private val binding: FragmentSettingBinding setPreferencesFromResource(R.xml.preferences_settings, rootKey)
get() = _binding!!
companion object { findPreference<Preference>("pref_filter")?.setOnPreferenceClickListener {
var shouldRestart = false findNavController().navigate(R.id.filterPreference)
const val titleTag = "titleTag" true
}
findPreference<Preference>("pref_install")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.installationPreference)
true
}
findPreference<Preference>("pref_ui")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.UIPreference)
true
}
findPreference<Preference>("pref_download")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.downloadPreference)
true
}
findPreference<Preference>("pref_network")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.networkPreference)
true
}
findPreference<Preference>("pref_updates")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.updatesPreference)
true
}
findPreference<Preference>("pref_advanced")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.advancedPreference)
true
}
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
_binding = FragmentSettingBinding.bind(view)
if (savedInstanceState == null) {
childFragmentManager
.beginTransaction()
.replace(R.id.settings, MainPreference())
.commit()
} else {
binding.layoutToolbarAction.toolbar.title = savedInstanceState.getCharSequence(titleTag)
}
childFragmentManager.addOnBackStackChangedListener {
if (childFragmentManager.backStackEntryCount == 0) {
binding.layoutToolbarAction.toolbar.title = getString(R.string.title_settings)
if (shouldRestart) askRestart()
}
}
// Toolbar
binding.layoutToolbarAction.toolbar.apply {
elevation = 0f
title = getString(R.string.title_settings) title = getString(R.string.title_settings)
navigationIcon = ContextCompat.getDrawable(view.context, R.drawable.ic_arrow_back)
setNavigationOnClickListener { findNavController().navigateUp() } setNavigationOnClickListener { findNavController().navigateUp() }
} }
} }
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putCharSequence(titleTag, binding.layoutToolbarAction.toolbar.title)
}
override fun onPreferenceStartFragment(
caller: PreferenceFragmentCompat,
preference: Preference
): Boolean {
with(childFragmentManager) {
val args = preference.extras
val fragment = fragmentFactory.instantiate(
this@SettingsFragment.javaClass.classLoader!!,
preference.fragment.toString()
).apply {
arguments = args
setTargetFragment(caller, 0)
}
beginTransaction()
.replace(R.id.settings, fragment)
.addToBackStack(preference.key)
.commit()
binding.layoutToolbarAction.toolbar.title = preference.title
}
return true
}
private fun askRestart() {
val builder = MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.action_restart))
.setMessage(getString(R.string.pref_dialog_to_apply_restart))
.setPositiveButton(getString(R.string.action_restart)) { _, _ ->
shouldRestart = false
requireContext().restartApp()
}
.setNegativeButton(getString(R.string.action_later)) { dialog, _ -> dialog.dismiss() }
val backGroundColor =
requireContext().getStyledAttributeColor(android.R.attr.colorBackground)
builder.background = ColorDrawable(backGroundColor)
builder.create()
builder.show()
}
} }

View File

@@ -21,6 +21,8 @@ package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R import com.aurora.store.R
@@ -30,6 +32,7 @@ import com.aurora.store.util.save
class UIPreference : PreferenceFragmentCompat() { class UIPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_ui, rootKey) setPreferencesFromResource(R.xml.preferences_ui, rootKey)
} }
@@ -37,20 +40,18 @@ class UIPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.pref_ui_title)
setNavigationOnClickListener { findNavController().navigateUp() }
}
val themePreference: ListPreference? = findPreference(Preferences.PREFERENCE_THEME_TYPE) val themePreference: ListPreference? = findPreference(Preferences.PREFERENCE_THEME_TYPE)
themePreference?.let { themePreference?.let {
it.setOnPreferenceChangeListener { _, newValue -> it.setOnPreferenceChangeListener { _, newValue ->
val themeId = Integer.parseInt(newValue.toString()) val themeId = Integer.parseInt(newValue.toString())
val accentId = Preferences.getInteger(
requireContext(),
Preferences.PREFERENCE_THEME_ACCENT
)
save(Preferences.PREFERENCE_THEME_TYPE, themeId) save(Preferences.PREFERENCE_THEME_TYPE, themeId)
applyTheme(themeId, shouldApplyTransition = false) applyTheme(themeId, shouldApplyTransition = false)
SettingsFragment.shouldRestart = true
true true
} }
} }
@@ -65,10 +66,7 @@ class UIPreference : PreferenceFragmentCompat() {
val accentId = Integer.parseInt(newValue.toString()) val accentId = Integer.parseInt(newValue.toString())
save(Preferences.PREFERENCE_THEME_ACCENT, accentId) save(Preferences.PREFERENCE_THEME_ACCENT, accentId)
applyTheme(themeId, shouldApplyTransition = false) applyTheme(themeId, shouldApplyTransition = false)
SettingsFragment.shouldRestart = true
true true
} }
} }

View File

@@ -20,6 +20,9 @@
package com.aurora.store.view.ui.preferences package com.aurora.store.view.ui.preferences
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.SwitchPreferenceCompat import androidx.preference.SwitchPreferenceCompat
import com.aurora.store.R import com.aurora.store.R
@@ -28,6 +31,7 @@ import com.aurora.store.util.Log
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK
class UpdatesPreference : PreferenceFragmentCompat() { class UpdatesPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_updates, rootKey) setPreferencesFromResource(R.xml.preferences_updates, rootKey)
@@ -41,4 +45,12 @@ class UpdatesPreference : PreferenceFragmentCompat() {
true true
} }
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.title_updates)
setNavigationOnClickListener { findNavController().navigateUp() }
}
}
} }

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Aurora Store ~ Aurora Store
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com> ~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
@@ -20,18 +19,26 @@
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
tools:context=".view.ui.preferences.SettingsFragment"> tools:context=".view.ui.preferences.SettingsFragment">
<include <androidx.appcompat.widget.Toolbar
android:id="@+id/layout_toolbar_action" android:id="@+id/toolbar"
layout="@layout/view_toolbar_native" />
<FrameLayout
android:id="@+id/settings"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="wrap_content"
app:navigationIcon="@drawable/ic_arrow_back" />
<!--
Required ViewGroup for PreferenceFragmentCompat
False positive for id not in API < 24
-->
<FrameLayout
android:id="@android:id/list_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:targetApi="n" />
</LinearLayout> </LinearLayout>

View File

@@ -77,6 +77,41 @@
android:name="com.aurora.store.view.ui.preferences.SettingsFragment" android:name="com.aurora.store.view.ui.preferences.SettingsFragment"
android:label="@string/title_settings" android:label="@string/title_settings"
tools:layout="@layout/fragment_setting" /> tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/advancedPreference"
android:name="com.aurora.store.view.ui.preferences.AdvancedPreference"
android:label="AdvancedPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/downloadPreference"
android:name="com.aurora.store.view.ui.preferences.DownloadPreference"
android:label="DownloadPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/filterPreference"
android:name="com.aurora.store.view.ui.preferences.FilterPreference"
android:label="FilterPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/installationPreference"
android:name="com.aurora.store.view.ui.preferences.InstallationPreference"
android:label="InstallationPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/networkPreference"
android:name="com.aurora.store.view.ui.preferences.NetworkPreference"
android:label="NetworkPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/UIPreference"
android:name="com.aurora.store.view.ui.preferences.UIPreference"
android:label="UIPreference"
tools:layout="@layout/fragment_setting" />
<fragment
android:id="@+id/updatesPreference"
android:name="com.aurora.store.view.ui.preferences.UpdatesPreference"
android:label="UpdatesPreference"
tools:layout="@layout/fragment_setting" />
<fragment <fragment
android:id="@+id/searchSuggestionFragment" android:id="@+id/searchSuggestionFragment"
android:name="com.aurora.store.view.ui.search.SearchSuggestionFragment" android:name="com.aurora.store.view.ui.search.SearchSuggestionFragment"

View File

@@ -104,6 +104,7 @@
</style> </style>
<style name="AppTheme.PreferenceThemeOverlay" parent="@style/PreferenceThemeOverlay"> <style name="AppTheme.PreferenceThemeOverlay" parent="@style/PreferenceThemeOverlay">
<item name="android:layout">@layout/fragment_setting</item>
<item name="switchPreferenceCompatStyle">@style/AppTheme.SwitchPreference</item> <item name="switchPreferenceCompatStyle">@style/AppTheme.SwitchPreference</item>
</style> </style>

View File

@@ -17,17 +17,14 @@
~ ~
--> -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" <PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto">
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.FilterPreference"
app:icon="@drawable/ic_filter" app:icon="@drawable/ic_filter"
app:key="pref_filter" app:key="pref_filter"
app:layout="@layout/item_preference" app:layout="@layout/item_preference"
app:title="@string/action_filter" /> app:title="@string/action_filter" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.InstallationPreference"
app:icon="@drawable/ic_installation" app:icon="@drawable/ic_installation"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_install" app:key="pref_install"
@@ -35,7 +32,6 @@
app:title="@string/title_installation" /> app:title="@string/title_installation" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.UIPreference"
app:icon="@drawable/ic_ui" app:icon="@drawable/ic_ui"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_ui" app:key="pref_ui"
@@ -43,7 +39,6 @@
app:title="@string/pref_ui_title" /> app:title="@string/pref_ui_title" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.DownloadPreference"
app:icon="@drawable/ic_download_manager" app:icon="@drawable/ic_download_manager"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_download" app:key="pref_download"
@@ -51,7 +46,6 @@
app:title="@string/pref_app_download" /> app:title="@string/pref_app_download" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.NetworkPreference"
app:icon="@drawable/ic_network" app:icon="@drawable/ic_network"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_network" app:key="pref_network"
@@ -59,15 +53,13 @@
app:title="@string/pref_network_title" /> app:title="@string/pref_network_title" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.UpdatesPreference"
app:icon="@drawable/ic_updates" app:icon="@drawable/ic_updates"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_network" app:key="pref_updates"
app:layout="@layout/item_preference" app:layout="@layout/item_preference"
app:title="@string/title_updates" /> app:title="@string/title_updates" />
<Preference <Preference
android:fragment="com.aurora.store.view.ui.preferences.AdvancedPreference"
app:icon="@drawable/ic_tune" app:icon="@drawable/ic_tune"
app:iconSpaceReserved="false" app:iconSpaceReserved="false"
app:key="pref_advanced" app:key="pref_advanced"