From eaece8e334b11ca43b3321cc64f9c105283303c1 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Thu, 15 May 2025 17:48:27 +0200 Subject: [PATCH] fix #168 --- .../de/jrpie/android/launcher/Application.kt | 8 -------- .../jrpie/android/launcher/ui/HomeActivity.kt | 18 ++++++++---------- .../launcher/ui/widgets/WidgetPanelActivity.kt | 12 ++++++++++++ .../manage/ManageWidgetPanelsActivity.kt | 1 + .../ui/widgets/manage/ManageWidgetsActivity.kt | 8 +++++++- .../ui/widgets/manage/WidgetManagerView.kt | 2 +- .../android/launcher/widgets/AppWidget.kt | 4 ++++ 7 files changed, 33 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Application.kt b/app/src/main/java/de/jrpie/android/launcher/Application.kt index cf9e697..e0d1d00 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Application.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Application.kt @@ -120,8 +120,6 @@ class Application : android.app.Application() { appWidgetHost = AppWidgetHost(this.applicationContext, APP_WIDGET_HOST_ID) appWidgetManager = AppWidgetManager.getInstance(this.applicationContext) - appWidgetHost.startListening() - val preferences = PreferenceManager.getDefaultSharedPreferences(this) LauncherPreferences.init(preferences, this.resources) @@ -178,10 +176,4 @@ class Application : android.app.Application() { apps.postValue(getApps(packageManager, applicationContext)) } } - - override fun onTerminate() { - appWidgetHost.stopListening() - super.onTerminate() - - } } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index f501107..03c55fc 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -93,15 +93,6 @@ class HomeActivity : UIObject, Activity() { LauncherPreferences.getSharedPreferences() .registerOnSharedPreferenceChangeListener(sharedPreferencesListener) - (application as Application).appWidgetHost.startListening() - - } - - - - override fun onStop() { - (application as Application).appWidgetHost.stopListening() - super.onStop() } override fun onWindowFocusChanged(hasFocus: Boolean) { @@ -112,7 +103,6 @@ class HomeActivity : UIObject, Activity() { } } - private fun updateSettingsFallbackButtonVisibility() { // If µLauncher settings can not be reached from any action bound to an enabled gesture, // show the fallback button. @@ -131,6 +121,11 @@ class HomeActivity : UIObject, Activity() { return modifyTheme(super.getTheme()) } + override fun onPause() { + (application as Application).appWidgetHost.stopListening() + super.onPause() + } + override fun onResume() { super.onResume() @@ -161,6 +156,9 @@ class HomeActivity : UIObject, Activity() { binding.homeWidgetContainer.updateWidgets(this@HomeActivity, LauncherPreferences.widgets().widgets() ) + + + (application as Application).appWidgetHost.startListening() } override fun onDestroy() { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt index 4392451..ef7bf25 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.res.Resources import android.os.Bundle import androidx.core.view.ViewCompat +import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.R import de.jrpie.android.launcher.databinding.ActivityWidgetPanelBinding import de.jrpie.android.launcher.preferences.LauncherPreferences @@ -57,6 +58,17 @@ class WidgetPanelActivity : Activity(), UIObject { override fun onStart() { super.onStart() super.onStart() + + } + + override fun onPause() { + (application as Application).appWidgetHost.stopListening() + super.onPause() + } + + override fun onResume() { + super.onResume() + (application as Application).appWidgetHost.startListening() } override fun isHomeScreen(): Boolean { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt index 163777f..89e1057 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt @@ -9,6 +9,7 @@ import android.widget.EditText import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager +import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.R import de.jrpie.android.launcher.databinding.ActivityManageWidgetPanelsBinding import de.jrpie.android.launcher.preferences.LauncherPreferences diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt index 4b5c0c2..58b47be 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt @@ -92,13 +92,19 @@ class ManageWidgetsActivity : UIObject, Activity() { } + override fun onPause() { + (application as Application).appWidgetHost.stopListening() + super.onPause() + } + override fun onResume() { super.onResume() + (application as Application).appWidgetHost.startListening() + binding.manageWidgetsContainer.updateWidgets( this, LauncherPreferences.widgets().widgets() ) - } override fun onWindowFocusChanged(hasFocus: Boolean) { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetManagerView.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetManagerView.kt index 76a2572..d1c84d0 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetManagerView.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetManagerView.kt @@ -113,7 +113,7 @@ class WidgetManagerView(widgetPanelId: Int, context: Context, attrs: AttributeSe height ) selectedWidgetOverlayView = view - selectedWidgetView = widgetViewById[view.widgetId] ?: return true + selectedWidgetView = widgetViewById[view.widgetId] startWidgetPosition = position val positionInView = start.minus(Point(position.left, position.top)) diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/AppWidget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/AppWidget.kt index 22a63eb..788f709 100644 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/AppWidget.kt +++ b/app/src/main/java/de/jrpie/android/launcher/widgets/AppWidget.kt @@ -78,6 +78,10 @@ class AppWidget( override fun createView(activity: Activity): AppWidgetHostView? { val providerInfo = activity.getAppWidgetManager().getAppWidgetInfo(id) ?: return null + /* TODO: if providerInfo is null, the corresponding app was probably uninstalled. + There does not seem to be a way to recover the widget when the app is installed again, + hence it should be deleted. */ + val view = activity.getAppWidgetHost() .createView(activity, this.id, providerInfo)