From 4a6269dfe9f7c99870a30c03c7d5255b4a80530b Mon Sep 17 00:00:00 2001 From: Fabian Date: Mon, 13 Jul 2026 14:00:07 +0100 Subject: [PATCH 1/5] PendingIntent flags conflict FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE works, but the combination can cause the intent to become stale if the app is updated or restarted --- app_src/android/src/CarouselWidgetProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_src/android/src/CarouselWidgetProvider.java b/app_src/android/src/CarouselWidgetProvider.java index 8006923..42704cd 100644 --- a/app_src/android/src/CarouselWidgetProvider.java +++ b/app_src/android/src/CarouselWidgetProvider.java @@ -72,7 +72,7 @@ public void onUpdate( context, appWidgetId, intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE + PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE ); Log.d(TAG, "PendingIntent created"); From 72ddddac87cf613bf62bbf04d09385806de5bdc4 Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 16 Jul 2026 10:46:05 +0100 Subject: [PATCH 2/5] testing with immutability --- app_src/android/src/CarouselWidgetProvider.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app_src/android/src/CarouselWidgetProvider.java b/app_src/android/src/CarouselWidgetProvider.java index 42704cd..70eebde 100644 --- a/app_src/android/src/CarouselWidgetProvider.java +++ b/app_src/android/src/CarouselWidgetProvider.java @@ -68,12 +68,11 @@ public void onUpdate( intent.putExtra("from_widget", true); Log.d(TAG, "Extra 'from_widget' added"); - PendingIntent pendingIntent = PendingIntent.getActivity( - context, - appWidgetId, - intent, - PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE - ); + int flags = PendingIntent.FLAG_UPDATE_CURRENT; +if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + flags |= PendingIntent.FLAG_IMMUTABLE; +} +PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, flags); Log.d(TAG, "PendingIntent created"); From fe7552667d2b83bd3f9dae14f0b11243f89bc375 Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 16 Jul 2026 11:28:44 +0100 Subject: [PATCH 3/5] reduce widget update period to 1 hour --- app_src/android/res/xml/carousel_widget_info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app_src/android/res/xml/carousel_widget_info.xml b/app_src/android/res/xml/carousel_widget_info.xml index 243593c..7b2d650 100644 --- a/app_src/android/res/xml/carousel_widget_info.xml +++ b/app_src/android/res/xml/carousel_widget_info.xml @@ -14,5 +14,5 @@ android:resizeMode="horizontal|vertical" android:targetCellWidth="2" android:targetCellHeight="2" - android:updatePeriodMillis="86400000" + android:updatePeriodMillis="3600000" android:widgetCategory="home_screen" /> From 0821b9d0f966a2387ae12ec414c064dd752e62b9 Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 16 Jul 2026 11:29:47 +0100 Subject: [PATCH 4/5] update widget click intent to launch PythonActivity directly --- .../android/src/CarouselWidgetProvider.java | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/app_src/android/src/CarouselWidgetProvider.java b/app_src/android/src/CarouselWidgetProvider.java index 70eebde..dc6dc81 100644 --- a/app_src/android/src/CarouselWidgetProvider.java +++ b/app_src/android/src/CarouselWidgetProvider.java @@ -20,6 +20,8 @@ import android.util.TypedValue; import android.graphics.Color; +import android.content.ComponentName; + import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -50,36 +52,33 @@ public void onUpdate( R.layout.carousel_widget ); - // WIDGET CLICK → APP LAUNCH - Log.d(TAG, "Resolving launch intent"); - - Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); - - if (intent == null) { - Log.e(TAG, "Launch intent is NULL – app has no LAUNCHER activity"); - } else { - Log.d(TAG, "Launch intent resolved: " + intent.getComponent()); - - intent.setFlags( - Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_CLEAR_TOP - ); - - intent.putExtra("from_widget", true); - Log.d(TAG, "Extra 'from_widget' added"); - - int flags = PendingIntent.FLAG_UPDATE_CURRENT; -if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { - flags |= PendingIntent.FLAG_IMMUTABLE; -} -PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, flags); - - Log.d(TAG, "PendingIntent created"); + // WIDGET CLICK → APP LAUNCH (explicit intent works even when app is force-stopped) + // Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); + + // if (intent == null) { + // Log.e(TAG, "Launch intent is NULL – app has no LAUNCHER activity"); + // } else { + // Log.d(TAG, "Launch intent resolved: " + intent.getComponent()); + // } + + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setComponent(new ComponentName(context, "org.kivy.android.PythonActivity")); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + intent.setFlags( + Intent.FLAG_ACTIVITY_NEW_TASK | + Intent.FLAG_ACTIVITY_CLEAR_TOP + ); + intent.putExtra("from_widget", true); - views.setOnClickPendingIntent(R.id.widget_root, pendingIntent); - views.setOnClickPendingIntent(R.id.test_image, pendingIntent); - Log.d(TAG, "PendingIntent attached to R.id.test_image and widget"); + int flags = PendingIntent.FLAG_UPDATE_CURRENT; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) { + flags |= PendingIntent.FLAG_IMMUTABLE; } + PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, flags); + + views.setOnClickPendingIntent(R.id.widget_root, pendingIntent); + views.setOnClickPendingIntent(R.id.test_image, pendingIntent); + Log.d(TAG, "PendingIntent set for widgetId=" + appWidgetId); File txtFile = new File( context.getFilesDir().getAbsolutePath() + "/wallpaper.txt" From e5b032cc5ddfba4325bbd86a90f0158477b14bc3 Mon Sep 17 00:00:00 2001 From: Fabian Date: Thu, 16 Jul 2026 11:30:12 +0100 Subject: [PATCH 5/5] unneeded folders --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3e71218..e8fca74 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ ui_port.txt .buildozer *.apk test.* -test1.* \ No newline at end of file +test1.* +.* \ No newline at end of file