From 5ab54ea1cb474754fc9e56e6641a7071ef5a95ef Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Fri, 6 Sep 2024 14:46:36 +0200 Subject: [PATCH] chore: moved sharedPreferencesListener into FragementActionsRecycler. Might fix #27 --- .../launcher/list/apps/AppsRecyclerAdapter.kt | 3 - .../actions/SettingsFragmentActions.kt | 9 --- .../SettingsFragmentActionsRecycler.kt | 79 +++++++++++-------- 3 files changed, 46 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt index 69c2092..6273782 100644 --- a/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/list/apps/AppsRecyclerAdapter.kt @@ -1,10 +1,8 @@ package de.jrpie.android.launcher.list.apps import android.app.Activity -import android.content.Context import android.content.Intent import android.graphics.Rect -import android.net.Uri import android.os.AsyncTask import android.view.LayoutInflater 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.R 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.getPreferences import de.jrpie.android.launcher.getSavedTheme diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt index 21bb948..b7e2d24 100644 --- a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActions.kt @@ -2,8 +2,6 @@ package de.jrpie.android.launcher.settings.actions import android.content.ActivityNotFoundException import android.content.Intent -import android.content.SharedPreferences.OnSharedPreferenceChangeListener -import android.net.Uri import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -13,7 +11,6 @@ import androidx.fragment.app.Fragment import de.jrpie.android.launcher.R import de.jrpie.android.launcher.UIObject 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.setButtonColor import de.jrpie.android.launcher.vibrantColor @@ -32,15 +29,10 @@ SettingsFragmentActions : Fragment(), UIObject { private var binding: SettingsActionsBinding? = null - private val sharedPreferencesListener = - OnSharedPreferenceChangeListener { _, _ -> - binding?.let { it.settingsActionsRviewFragment.getFragment().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 } @@ -77,6 +69,5 @@ SettingsFragmentActions : Fragment(), UIObject { override fun onDestroy() { super.onDestroy() - getPreferences(requireContext()).unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener) } } diff --git a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt index 6bd5297..9f6c216 100644 --- a/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt +++ b/app/src/main/java/de/jrpie/android/launcher/settings/actions/SettingsFragmentActionsRecycler.kt @@ -10,6 +10,8 @@ import de.jrpie.android.launcher.* import de.jrpie.android.launcher.list.ListActivity import android.app.Activity import android.content.Intent +import android.content.SharedPreferences +import android.util.Log import android.widget.Button import android.widget.ImageView import android.widget.TextView @@ -26,8 +28,13 @@ import java.lang.Exception */ class SettingsFragmentActionsRecycler : Fragment(), UIObject { + + private var sharedPreferencesListener = + SharedPreferences.OnSharedPreferenceChangeListener { _, _ -> + actionViewAdapter?.updateActions() + } private lateinit var binding: SettingsActionsRecyclerBinding - var actionViewAdapter: ActionsRecyclerAdapter? = null + private var actionViewAdapter: ActionsRecyclerAdapter? = null override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -49,9 +56,16 @@ class SettingsFragmentActionsRecycler : Fragment(), UIObject { layoutManager = actionViewManager adapter = actionViewAdapter } + getPreferences(requireContext()).registerOnSharedPreferenceChangeListener(sharedPreferencesListener) super.onStart() } + + override fun onDestroy() { + getPreferences(requireContext()).unregisterOnSharedPreferenceChangeListener(sharedPreferencesListener) + + super.onDestroy() + } } class ActionsRecyclerAdapter(val activity: Activity): @@ -71,6 +85,35 @@ class ActionsRecyclerAdapter(val activity: Activity): 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) { val gesture = gesturesList[i] viewHolder.textView.text = gesture.getLabel(activity) @@ -78,40 +121,10 @@ class ActionsRecyclerAdapter(val activity: Activity): if (getSavedTheme(activity) == "dark") transformGrayscale( viewHolder.img ) - fun updateViewHolder() { - 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() + updateViewHolder(gesture, viewHolder) viewHolder.img.setOnClickListener{ chooseApp(gesture) } viewHolder.chooseButton.setOnClickListener{ chooseApp(gesture) } - viewHolder.removeAction.setOnClickListener{ - gesture.removeApp(activity) - updateViewHolder() - } + viewHolder.removeAction.setOnClickListener{ gesture.removeApp(activity) } } override fun getItemCount(): Int { return gesturesList.size }