DO NOT MERGE: Migrate SettingsActivity to fragment

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-06-22 20:14:10 +05:30
parent aa0e396891
commit 9d0d819ac2
8 changed files with 52 additions and 66 deletions

View File

@@ -155,7 +155,6 @@
<activity android:name=".view.ui.account.GoogleActivity" /> <activity android:name=".view.ui.account.GoogleActivity" />
<activity android:name=".view.ui.details.DetailsExodusActivity" /> <activity android:name=".view.ui.details.DetailsExodusActivity" />
<activity android:name=".view.ui.details.DevAppsActivity" /> <activity android:name=".view.ui.details.DevAppsActivity" />
<activity android:name=".view.ui.preferences.SettingsActivity" />
<activity android:name=".view.ui.commons.ExpandedStreamBrowseActivity" /> <activity android:name=".view.ui.commons.ExpandedStreamBrowseActivity" />
<activity android:name=".view.ui.commons.EditorStreamBrowseActivity" /> <activity android:name=".view.ui.commons.EditorStreamBrowseActivity" />

View File

@@ -53,10 +53,8 @@ import com.aurora.store.databinding.ActivityMainBinding
import com.aurora.store.util.CertUtil.isFDroidApp import com.aurora.store.util.CertUtil.isFDroidApp
import com.aurora.store.util.Log import com.aurora.store.util.Log
import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.account.AccountFragment
import com.aurora.store.view.ui.commons.BaseActivity import com.aurora.store.view.ui.commons.BaseActivity
import com.aurora.store.view.ui.downloads.DownloadActivity import com.aurora.store.view.ui.downloads.DownloadActivity
import com.aurora.store.view.ui.preferences.SettingsActivity
import com.aurora.store.view.ui.search.SearchSuggestionActivity import com.aurora.store.view.ui.search.SearchSuggestionActivity
import com.aurora.store.view.ui.sheets.SelfUpdateSheet import com.aurora.store.view.ui.sheets.SelfUpdateSheet
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
@@ -263,7 +261,8 @@ class MainActivity : BaseActivity() {
B.drawerLayout.close() B.drawerLayout.close()
} }
R.id.menu_settings -> { R.id.menu_settings -> {
open(SettingsActivity::class.java) navController.navigate(R.id.settingsFragment)
B.drawerLayout.close()
} }
R.id.menu_about -> { R.id.menu_about -> {
navController.navigate(R.id.aboutFragment) navController.navigate(R.id.aboutFragment)

View File

@@ -19,103 +19,81 @@
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.MenuItem import android.view.View
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
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.extensions.restartApp
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.databinding.ActivitySettingBinding import com.aurora.store.databinding.FragmentSettingBinding
import com.aurora.store.view.ui.commons.BaseActivity
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
class SettingsActivity : BaseActivity(), class SettingsFragment : Fragment(R.layout.fragment_setting),
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private lateinit var B: ActivitySettingBinding private var _binding: FragmentSettingBinding? = null
private val binding: FragmentSettingBinding
get() = _binding!!
companion object { companion object {
var shouldRestart = false var shouldRestart = false
const val titleTag = "titleTag" const val titleTag = "titleTag"
} }
override fun onConnected() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
} super.onViewCreated(view, savedInstanceState)
override fun onDisconnected() { _binding = FragmentSettingBinding.bind(view)
}
override fun onReconnected() {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivitySettingBinding.inflate(layoutInflater)
setContentView(B.root)
if (savedInstanceState == null) { if (savedInstanceState == null) {
supportFragmentManager childFragmentManager
.beginTransaction() .beginTransaction()
.replace(R.id.settings, MainPreference()) .replace(R.id.settings, MainPreference())
.commit() .commit()
} else { } else {
title = savedInstanceState.getCharSequence(titleTag) binding.layoutToolbarAction.toolbar.title = savedInstanceState.getCharSequence(titleTag)
} }
supportFragmentManager.addOnBackStackChangedListener { childFragmentManager.addOnBackStackChangedListener {
if (supportFragmentManager.backStackEntryCount == 0) { if (childFragmentManager.backStackEntryCount == 0) {
B.layoutToolbarAction.toolbar.setTitle(R.string.title_settings) binding.layoutToolbarAction.toolbar.title = getString(R.string.title_settings)
if (shouldRestart) if (shouldRestart) askRestart()
askRestart()
} }
} }
attachToolbar() // Toolbar
binding.layoutToolbarAction.toolbar.apply {
elevation = 0f
title = getString(R.string.title_settings)
navigationIcon = ContextCompat.getDrawable(view.context, R.drawable.ic_arrow_back)
setNavigationOnClickListener { findNavController().navigateUp() }
}
} }
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onDestroyView() {
when (item.itemId) { super.onDestroyView()
android.R.id.home -> { _binding = null
onBackPressedDispatcher.onBackPressed()
return true
}
}
return super.onOptionsItemSelected(item)
}
private fun attachToolbar() {
setSupportActionBar(B.layoutToolbarAction.toolbar)
val actionBar = supportActionBar
if (actionBar != null) {
actionBar.setDisplayShowCustomEnabled(true)
actionBar.setDisplayHomeAsUpEnabled(true)
actionBar.elevation = 0f
actionBar.setTitle(R.string.title_settings)
}
} }
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
outState.putCharSequence(titleTag, title) outState.putCharSequence(titleTag, binding.layoutToolbarAction.toolbar.title)
}
override fun onSupportNavigateUp(): Boolean {
if (supportFragmentManager.popBackStackImmediate()) {
return true
}
return super.onSupportNavigateUp()
} }
override fun onPreferenceStartFragment( override fun onPreferenceStartFragment(
caller: PreferenceFragmentCompat, caller: PreferenceFragmentCompat,
preference: Preference preference: Preference
): Boolean { ): Boolean {
with(supportFragmentManager) { with(childFragmentManager) {
val args = preference.extras val args = preference.extras
val fragment = fragmentFactory.instantiate( val fragment = fragmentFactory.instantiate(
classLoader, this@SettingsFragment.javaClass.classLoader!!,
preference.fragment.toString() preference.fragment.toString()
).apply { ).apply {
arguments = args arguments = args
@@ -124,24 +102,27 @@ class SettingsActivity : BaseActivity(),
beginTransaction() beginTransaction()
.replace(R.id.settings, fragment) .replace(R.id.settings, fragment)
.addToBackStack(null) .addToBackStack(preference.key)
.commit() .commit()
B.layoutToolbarAction.toolbar.title = preference.title binding.layoutToolbarAction.toolbar.title = preference.title
} }
return true return true
} }
private fun askRestart() { private fun askRestart() {
val builder = MaterialAlertDialogBuilder(this) val builder = MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.action_restart)) .setTitle(getString(R.string.action_restart))
.setMessage(getString(R.string.pref_dialog_to_apply_restart)) .setMessage(getString(R.string.pref_dialog_to_apply_restart))
.setPositiveButton(getString(R.string.action_restart)) { _, _ -> .setPositiveButton(getString(R.string.action_restart)) { _, _ ->
shouldRestart = false shouldRestart = false
restartApp() requireContext().restartApp()
} }
.setNegativeButton(getString(R.string.action_later)) { dialog, _ -> dialog.dismiss() } .setNegativeButton(getString(R.string.action_later)) { dialog, _ -> dialog.dismiss() }
val backGroundColor =
requireContext().getStyledAttributeColor(android.R.attr.colorBackground)
builder.background = ColorDrawable(backGroundColor)
builder.create() builder.create()
builder.show() builder.show()
} }

View File

@@ -50,7 +50,7 @@ class UIPreference : PreferenceFragmentCompat() {
applyTheme(themeId, shouldApplyTransition = false) applyTheme(themeId, shouldApplyTransition = false)
SettingsActivity.shouldRestart = true SettingsFragment.shouldRestart = true
true true
} }
} }
@@ -68,7 +68,7 @@ class UIPreference : PreferenceFragmentCompat() {
applyTheme(themeId, shouldApplyTransition = false) applyTheme(themeId, shouldApplyTransition = false)
SettingsActivity.shouldRestart = true SettingsFragment.shouldRestart = true
true true
} }
} }

View File

@@ -20,9 +20,11 @@
--> -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
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">
<include <include
android:id="@+id/layout_toolbar_action" android:id="@+id/layout_toolbar_action"

View File

@@ -70,4 +70,9 @@
android:name="com.aurora.store.view.ui.account.AccountFragment" android:name="com.aurora.store.view.ui.account.AccountFragment"
android:label="@string/title_account_manager" android:label="@string/title_account_manager"
tools:layout="@layout/fragment_account" /> tools:layout="@layout/fragment_account" />
<fragment
android:id="@+id/settingsFragment"
android:name="com.aurora.store.view.ui.preferences.SettingsFragment"
android:label="@string/title_settings"
tools:layout="@layout/fragment_setting" />
</navigation> </navigation>