chore: moved sharedPreferencesListener into FragementActionsRecycler. Might fix #27

This commit is contained in:
Josia Pietsch 2024-09-06 14:46:36 +02:00
parent 25483f65ac
commit 5ab54ea1cb
Signed by: jrpie
GPG key ID: E70B571D66986A2D
3 changed files with 46 additions and 45 deletions

View file

@ -1,10 +1,8 @@
package de.jrpie.android.launcher.list.apps package de.jrpie.android.launcher.list.apps
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Rect import android.graphics.Rect
import android.net.Uri
import android.os.AsyncTask import android.os.AsyncTask
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -17,7 +15,6 @@ import androidx.recyclerview.widget.RecyclerView
import de.jrpie.android.launcher.PREF_SEARCH_AUTO_LAUNCH import de.jrpie.android.launcher.PREF_SEARCH_AUTO_LAUNCH
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.REQUEST_CHOOSE_APP import de.jrpie.android.launcher.REQUEST_CHOOSE_APP
import de.jrpie.android.launcher.REQUEST_UNINSTALL
import de.jrpie.android.launcher.appsList import de.jrpie.android.launcher.appsList
import de.jrpie.android.launcher.getPreferences import de.jrpie.android.launcher.getPreferences
import de.jrpie.android.launcher.getSavedTheme import de.jrpie.android.launcher.getSavedTheme

View file

@ -2,8 +2,6 @@ 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.OnSharedPreferenceChangeListener
import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -13,7 +11,6 @@ import androidx.fragment.app.Fragment
import de.jrpie.android.launcher.R import de.jrpie.android.launcher.R
import de.jrpie.android.launcher.UIObject import de.jrpie.android.launcher.UIObject
import de.jrpie.android.launcher.databinding.SettingsActionsBinding import de.jrpie.android.launcher.databinding.SettingsActionsBinding
import de.jrpie.android.launcher.getPreferences
import de.jrpie.android.launcher.list.ListActivity import de.jrpie.android.launcher.list.ListActivity
import de.jrpie.android.launcher.setButtonColor import de.jrpie.android.launcher.setButtonColor
import de.jrpie.android.launcher.vibrantColor import de.jrpie.android.launcher.vibrantColor
@ -32,15 +29,10 @@ SettingsFragmentActions : Fragment(), UIObject {
private var binding: SettingsActionsBinding? = null 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
} }
@ -77,6 +69,5 @@ SettingsFragmentActions : Fragment(), UIObject {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
getPreferences(requireContext()).unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener)
} }
} }

View file

@ -10,6 +10,8 @@ import de.jrpie.android.launcher.*
import de.jrpie.android.launcher.list.ListActivity import de.jrpie.android.launcher.list.ListActivity
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences
import android.util.Log
import android.widget.Button import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
@ -26,8 +28,13 @@ import java.lang.Exception
*/ */
class SettingsFragmentActionsRecycler : Fragment(), UIObject { class SettingsFragmentActionsRecycler : Fragment(), UIObject {
private var sharedPreferencesListener =
SharedPreferences.OnSharedPreferenceChangeListener { _, _ ->
actionViewAdapter?.updateActions()
}
private lateinit var binding: SettingsActionsRecyclerBinding private lateinit var binding: SettingsActionsRecyclerBinding
var actionViewAdapter: ActionsRecyclerAdapter? = null private var actionViewAdapter: ActionsRecyclerAdapter? = null
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@ -49,9 +56,16 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject {
layoutManager = actionViewManager layoutManager = actionViewManager
adapter = actionViewAdapter adapter = actionViewAdapter
} }
getPreferences(requireContext()).registerOnSharedPreferenceChangeListener(sharedPreferencesListener)
super<UIObject>.onStart() super<UIObject>.onStart()
} }
override fun onDestroy() {
getPreferences(requireContext()).unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener)
super.onDestroy()
}
} }
class ActionsRecyclerAdapter(val activity: Activity): class ActionsRecyclerAdapter(val activity: Activity):
@ -71,6 +85,35 @@ class ActionsRecyclerAdapter(val activity: Activity):
init { itemView.setOnClickListener(this) } init { itemView.setOnClickListener(this) }
} }
private fun updateViewHolder(gesture: Gesture, viewHolder: ViewHolder) {
val app = gesture.getApp(activity)
val content = app.first
viewHolder.img.visibility = View.VISIBLE
viewHolder.removeAction.visibility = View.VISIBLE
viewHolder.chooseButton.visibility = View.INVISIBLE
if (content.isEmpty()){
viewHolder.img.visibility = View.INVISIBLE
viewHolder.removeAction.visibility = View.GONE
viewHolder.chooseButton.visibility = View.VISIBLE
}
else if (LauncherAction.isOtherAction(content)) {
LauncherAction.byId(content)?.let {
viewHolder.img.setImageResource(it.icon)
}
} else {
// Set image icon (by packageName)
try {
viewHolder.img.setImageDrawable(getAppIcon(activity, content, app.second))
} catch (e : Exception) {
// Probably the app was uninstalled
// the button is shown, user asked to select an action
viewHolder.img.visibility = View.INVISIBLE
viewHolder.removeAction.visibility = View.GONE
viewHolder.chooseButton.visibility = View.VISIBLE
}
}
}
override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) {
val gesture = gesturesList[i] val gesture = gesturesList[i]
viewHolder.textView.text = gesture.getLabel(activity) viewHolder.textView.text = gesture.getLabel(activity)
@ -78,40 +121,10 @@ class ActionsRecyclerAdapter(val activity: Activity):
if (getSavedTheme(activity) == "dark") transformGrayscale( if (getSavedTheme(activity) == "dark") transformGrayscale(
viewHolder.img viewHolder.img
) )
fun updateViewHolder() { updateViewHolder(gesture, viewHolder)
val app = gesture.getApp(activity)
val content = app.first
viewHolder.img.visibility = View.VISIBLE
viewHolder.removeAction.visibility = View.VISIBLE
viewHolder.chooseButton.visibility = View.INVISIBLE
if (content.isEmpty()){
viewHolder.img.visibility = View.INVISIBLE
viewHolder.removeAction.visibility = View.GONE
viewHolder.chooseButton.visibility = View.VISIBLE
}
else if (LauncherAction.isOtherAction(content)) {
LauncherAction.byId(content)?.let {
viewHolder.img.setImageResource(it.icon)
}
} else {
// Set image icon (by packageName)
try {
viewHolder.img.setImageDrawable(getAppIcon(activity, content, app.second))
} catch (e : Exception) {
// the button is shown, user asked to select an action
viewHolder.img.visibility = View.INVISIBLE
viewHolder.removeAction.visibility = View.GONE
viewHolder.chooseButton.visibility = View.VISIBLE
}
}
}
updateViewHolder()
viewHolder.img.setOnClickListener{ chooseApp(gesture) } viewHolder.img.setOnClickListener{ chooseApp(gesture) }
viewHolder.chooseButton.setOnClickListener{ chooseApp(gesture) } viewHolder.chooseButton.setOnClickListener{ chooseApp(gesture) }
viewHolder.removeAction.setOnClickListener{ viewHolder.removeAction.setOnClickListener{ gesture.removeApp(activity) }
gesture.removeApp(activity)
updateViewHolder()
}
} }
override fun getItemCount(): Int { return gesturesList.size } override fun getItemCount(): Int { return gesturesList.size }