fix: update SettingsFragmentActions when preferences change

This commit is contained in:
Josia Pietsch 2024-08-02 01:52:52 +02:00
parent 178865c6cf
commit 977c4618ef
Signed by: jrpie
GPG key ID: E70B571D66986A2D
4 changed files with 41 additions and 23 deletions

View file

@ -2,6 +2,8 @@ package de.jrpie.android.launcher.settings.actions
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@ -10,9 +12,9 @@ import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.* import de.jrpie.android.launcher.*
import de.jrpie.android.launcher.databinding.SettingsActionsBinding
import de.jrpie.android.launcher.list.ListActivity import de.jrpie.android.launcher.list.ListActivity
import de.jrpie.android.launcher.settings.intendedSettingsPause import de.jrpie.android.launcher.settings.intendedSettingsPause
import de.jrpie.android.launcher.databinding.SettingsActionsBinding
/** /**
@ -25,35 +27,42 @@ import de.jrpie.android.launcher.databinding.SettingsActionsBinding
class SettingsFragmentActions : Fragment(), UIObject { class SettingsFragmentActions : Fragment(), UIObject {
private lateinit var binding: SettingsActionsBinding private var binding: SettingsActionsBinding? = null
private val sharedPreferencesListener =
OnSharedPreferenceChangeListener { _, _ ->
binding?.let { it.settingsActionsRviewFragment.getFragment<SettingsFragmentActionsRecycler>().actionViewAdapter?.updateActions() }
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View? {
getPreferences(requireContext()).registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
binding = SettingsActionsBinding.inflate(inflater, container, false) binding = SettingsActionsBinding.inflate(inflater, container, false)
return binding.root return binding!!.root
} }
override fun onStart() { override fun onStart() {
super<Fragment>.onStart() super<Fragment>.onStart()
super<UIObject>.onStart() super<UIObject>.onStart()
} }
override fun applyTheme() { override fun applyTheme() {
setButtonColor(binding.settingsActionsButtonViewApps, vibrantColor) setButtonColor(binding!!.settingsActionsButtonViewApps, vibrantColor)
setButtonColor(binding.settingsActionsButtonInstallApps, vibrantColor) setButtonColor(binding!!.settingsActionsButtonInstallApps, vibrantColor)
} }
override fun setOnClicks() { override fun setOnClicks() {
// App management buttons // App management buttons
binding.settingsActionsButtonViewApps.setOnClickListener{ binding!!.settingsActionsButtonViewApps.setOnClickListener{
val intent = Intent(this.context, ListActivity::class.java) val intent = Intent(this.context, ListActivity::class.java)
intent.putExtra("intention", ListActivity.ListActivityIntention.VIEW.toString()) intent.putExtra("intention", ListActivity.ListActivityIntention.VIEW.toString())
intendedSettingsPause = true intendedSettingsPause = true
startActivity(intent) startActivity(intent)
} }
binding.settingsActionsButtonInstallApps.setOnClickListener{ binding!!.settingsActionsButtonInstallApps.setOnClickListener{
try { try {
val rateIntent = Intent( val rateIntent = Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -67,4 +76,9 @@ class SettingsFragmentActions : Fragment(), UIObject {
} }
} }
} }
override fun onDestroy() {
super.onDestroy()
getPreferences(requireContext()).unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener)
}
} }

View file

@ -28,6 +28,7 @@ import java.lang.Exception
class SettingsFragmentActionsRecycler : Fragment(), UIObject { class SettingsFragmentActionsRecycler : Fragment(), UIObject {
private lateinit var binding: SettingsActionsRecyclerBinding private lateinit var binding: SettingsActionsRecyclerBinding
public var actionViewAdapter: ActionsRecyclerAdapter? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@ -41,7 +42,7 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject {
// set up the list / recycler // set up the list / recycler
val actionViewManager = LinearLayoutManager(context) val actionViewManager = LinearLayoutManager(context)
val actionViewAdapter = ActionsRecyclerAdapter( requireActivity() ) actionViewAdapter = ActionsRecyclerAdapter( requireActivity() )
binding.settingsActionsRview.apply { binding.settingsActionsRview.apply {
// improve performance (since content changes don't change the layout size) // improve performance (since content changes don't change the layout size)
@ -57,7 +58,7 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject {
class ActionsRecyclerAdapter(val activity: Activity): class ActionsRecyclerAdapter(val activity: Activity):
RecyclerView.Adapter<ActionsRecyclerAdapter.ViewHolder>() { RecyclerView.Adapter<ActionsRecyclerAdapter.ViewHolder>() {
private val gesturesList: List<Gesture> private val gesturesList: ArrayList<Gesture>
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
View.OnClickListener { View.OnClickListener {
@ -123,7 +124,18 @@ class ActionsRecyclerAdapter(val activity: Activity):
val edgeActions = getPreferences(activity).getBoolean(PREF_EDGE_ACTIONS_ENABLED, false) val edgeActions = getPreferences(activity).getBoolean(PREF_EDGE_ACTIONS_ENABLED, false)
gesturesList = Gesture.values().filter { gesturesList = Gesture.values().filter {
(doubleActions || !it.isDoubleVariant()) (doubleActions || !it.isDoubleVariant())
&& (edgeActions || !it.isEdgeVariant())} && (edgeActions || !it.isEdgeVariant())} as ArrayList<Gesture>
}
public fun updateActions() {
val doubleActions = getPreferences(activity).getBoolean(PREF_DOUBLE_ACTIONS_ENABLED, false)
val edgeActions = getPreferences(activity).getBoolean(PREF_EDGE_ACTIONS_ENABLED, false)
this.gesturesList.clear()
gesturesList.addAll(Gesture.values().filter {
(doubleActions || !it.isDoubleVariant())
&& (edgeActions || !it.isEdgeVariant())})
notifyDataSetChanged()
} }
/* */ /* */

View file

@ -102,16 +102,8 @@ class SettingsFragmentLauncher : Fragment(), UIObject {
} }
bindSwitchToPref(binding.settingsLauncherSwitchAutoLaunch, PREF_SEARCH_AUTO_LAUNCH, false) {} bindSwitchToPref(binding.settingsLauncherSwitchAutoLaunch, PREF_SEARCH_AUTO_LAUNCH, false) {}
bindSwitchToPref(binding.settingsLauncherSwitchAutoKeyboard, PREF_SEARCH_AUTO_KEYBOARD, true) {} bindSwitchToPref(binding.settingsLauncherSwitchAutoKeyboard, PREF_SEARCH_AUTO_KEYBOARD, true) {}
bindSwitchToPref(binding.settingsLauncherSwitchEnableDouble, PREF_DOUBLE_ACTIONS_ENABLED, false) { bindSwitchToPref(binding.settingsLauncherSwitchEnableDouble, PREF_DOUBLE_ACTIONS_ENABLED, false) {}
//intendedSettingsPause = true bindSwitchToPref(binding.settingsLauncherSwitchEnableEdge, PREF_EDGE_ACTIONS_ENABLED, false) {}
// TODO fixme: This causes the app to crash on some devices.
//activity?.recreate()
}
bindSwitchToPref(binding.settingsLauncherSwitchEnableEdge, PREF_EDGE_ACTIONS_ENABLED, false) {
//intendedSettingsPause = true
// TODO fixme
//activity?.recreate()
}
binding.settingsSeekbarSensitivity.setOnSeekBarChangeListener( binding.settingsSeekbarSensitivity.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener { object : SeekBar.OnSeekBarChangeListener {
@ -151,13 +143,13 @@ class SettingsFragmentLauncher : Fragment(), UIObject {
// Load values into the theme spinner // Load values into the theme spinner
val staticThemeAdapter = ArrayAdapter.createFromResource( val staticThemeAdapter = ArrayAdapter.createFromResource(
activity!!, R.array.settings_launcher_theme_spinner_items, requireActivity(), R.array.settings_launcher_theme_spinner_items,
android.R.layout.simple_spinner_item ) android.R.layout.simple_spinner_item )
staticThemeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) staticThemeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.settingsLauncherThemeSpinner.adapter = staticThemeAdapter binding.settingsLauncherThemeSpinner.adapter = staticThemeAdapter
val themeInt = when (getSavedTheme(activity!!)) { val themeInt = when (getSavedTheme(requireActivity())) {
"finn" -> 0 "finn" -> 0
"dark" -> 1 "dark" -> 1
else -> 0 else -> 0

View file

@ -8,7 +8,7 @@
android:paddingTop="16sp" android:paddingTop="16sp"
android:paddingRight="32sp"> android:paddingRight="32sp">
<fragment <androidx.fragment.app.FragmentContainerView
android:id="@+id/settings_actions_rview_fragment" android:id="@+id/settings_actions_rview_fragment"
android:name="de.jrpie.android.launcher.settings.actions.SettingsFragmentActionsRecycler" android:name="de.jrpie.android.launcher.settings.actions.SettingsFragmentActionsRecycler"
android:layout_width="match_parent" android:layout_width="match_parent"