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.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
@ -10,9 +12,9 @@ import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.*
import de.jrpie.android.launcher.databinding.SettingsActionsBinding
import de.jrpie.android.launcher.list.ListActivity
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 {
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(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
getPreferences(requireContext()).registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
binding = SettingsActionsBinding.inflate(inflater, container, false)
return binding.root
return binding!!.root
}
override fun onStart() {
super<Fragment>.onStart()
super<UIObject>.onStart()
}
override fun applyTheme() {
setButtonColor(binding.settingsActionsButtonViewApps, vibrantColor)
setButtonColor(binding.settingsActionsButtonInstallApps, vibrantColor)
setButtonColor(binding!!.settingsActionsButtonViewApps, vibrantColor)
setButtonColor(binding!!.settingsActionsButtonInstallApps, vibrantColor)
}
override fun setOnClicks() {
// App management buttons
binding.settingsActionsButtonViewApps.setOnClickListener{
binding!!.settingsActionsButtonViewApps.setOnClickListener{
val intent = Intent(this.context, ListActivity::class.java)
intent.putExtra("intention", ListActivity.ListActivityIntention.VIEW.toString())
intendedSettingsPause = true
startActivity(intent)
}
binding.settingsActionsButtonInstallApps.setOnClickListener{
binding!!.settingsActionsButtonInstallApps.setOnClickListener{
try {
val rateIntent = Intent(
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 {
private lateinit var binding: SettingsActionsRecyclerBinding
public var actionViewAdapter: ActionsRecyclerAdapter? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@ -41,7 +42,7 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject {
// set up the list / recycler
val actionViewManager = LinearLayoutManager(context)
val actionViewAdapter = ActionsRecyclerAdapter( requireActivity() )
actionViewAdapter = ActionsRecyclerAdapter( requireActivity() )
binding.settingsActionsRview.apply {
// improve performance (since content changes don't change the layout size)
@ -57,7 +58,7 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject {
class ActionsRecyclerAdapter(val activity: Activity):
RecyclerView.Adapter<ActionsRecyclerAdapter.ViewHolder>() {
private val gesturesList: List<Gesture>
private val gesturesList: ArrayList<Gesture>
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView),
View.OnClickListener {
@ -123,7 +124,18 @@ class ActionsRecyclerAdapter(val activity: Activity):
val edgeActions = getPreferences(activity).getBoolean(PREF_EDGE_ACTIONS_ENABLED, false)
gesturesList = Gesture.values().filter {
(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.settingsLauncherSwitchAutoKeyboard, PREF_SEARCH_AUTO_KEYBOARD, true) {}
bindSwitchToPref(binding.settingsLauncherSwitchEnableDouble, PREF_DOUBLE_ACTIONS_ENABLED, false) {
//intendedSettingsPause = true
// 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()
}
bindSwitchToPref(binding.settingsLauncherSwitchEnableDouble, PREF_DOUBLE_ACTIONS_ENABLED, false) {}
bindSwitchToPref(binding.settingsLauncherSwitchEnableEdge, PREF_EDGE_ACTIONS_ENABLED, false) {}
binding.settingsSeekbarSensitivity.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener {
@ -151,13 +143,13 @@ class SettingsFragmentLauncher : Fragment(), UIObject {
// Load values into the theme spinner
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 )
staticThemeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.settingsLauncherThemeSpinner.adapter = staticThemeAdapter
val themeInt = when (getSavedTheme(activity!!)) {
val themeInt = when (getSavedTheme(requireActivity())) {
"finn" -> 0
"dark" -> 1
else -> 0

View file

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