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

View File

@@ -20,11 +20,23 @@
package com.aurora.store.view.ui.preferences
import android.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R
class FilterPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
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.os.Bundle
import android.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.isOAndAbove
@@ -75,6 +77,11 @@ class InstallationPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
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()) {
Shizuku.addBinderReceivedListenerSticky(shizukuAliveListener)
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
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.PreferenceFragmentCompat
import com.aurora.extensions.runOnUiThread
@@ -29,6 +32,7 @@ import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Preferences
class NetworkPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
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
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.View
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.aurora.extensions.getStyledAttributeColor
import com.aurora.extensions.restartApp
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),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
class SettingsFragment : PreferenceFragmentCompat() {
private var _binding: FragmentSettingBinding? = null
private val binding: FragmentSettingBinding
get() = _binding!!
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_settings, rootKey)
companion object {
var shouldRestart = false
const val titleTag = "titleTag"
findPreference<Preference>("pref_filter")?.setOnPreferenceClickListener {
findNavController().navigate(R.id.filterPreference)
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?) {
super.onViewCreated(view, savedInstanceState)
_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
view.findViewById<Toolbar>(R.id.toolbar)?.apply {
title = getString(R.string.title_settings)
navigationIcon = ContextCompat.getDrawable(view.context, R.drawable.ic_arrow_back)
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.view.View
import androidx.appcompat.widget.Toolbar
import androidx.navigation.fragment.findNavController
import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat
import com.aurora.store.R
@@ -30,6 +32,7 @@ import com.aurora.store.util.save
class UIPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_ui, rootKey)
}
@@ -37,20 +40,18 @@ class UIPreference : PreferenceFragmentCompat() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
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)
themePreference?.let {
it.setOnPreferenceChangeListener { _, newValue ->
val themeId = Integer.parseInt(newValue.toString())
val accentId = Preferences.getInteger(
requireContext(),
Preferences.PREFERENCE_THEME_ACCENT
)
save(Preferences.PREFERENCE_THEME_TYPE, themeId)
applyTheme(themeId, shouldApplyTransition = false)
SettingsFragment.shouldRestart = true
true
}
}
@@ -65,10 +66,7 @@ class UIPreference : PreferenceFragmentCompat() {
val accentId = Integer.parseInt(newValue.toString())
save(Preferences.PREFERENCE_THEME_ACCENT, accentId)
applyTheme(themeId, shouldApplyTransition = false)
SettingsFragment.shouldRestart = true
true
}
}

View File

@@ -20,6 +20,9 @@
package com.aurora.store.view.ui.preferences
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.SwitchPreferenceCompat
import com.aurora.store.R
@@ -28,6 +31,7 @@ import com.aurora.store.util.Log
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK
class UpdatesPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences_updates, rootKey)
@@ -41,4 +45,12 @@ class UpdatesPreference : PreferenceFragmentCompat() {
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"?>
<!--
~ Aurora Store
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
@@ -20,18 +19,26 @@
-->
<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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".view.ui.preferences.SettingsFragment">
<include
android:id="@+id/layout_toolbar_action"
layout="@layout/view_toolbar_native" />
<FrameLayout
android:id="@+id/settings"
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
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>

View File

@@ -77,6 +77,41 @@
android:name="com.aurora.store.view.ui.preferences.SettingsFragment"
android:label="@string/title_settings"
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
android:id="@+id/searchSuggestionFragment"
android:name="com.aurora.store.view.ui.search.SearchSuggestionFragment"

View File

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

View File

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