From e17bed03c917dd2f9b862e9c5b59b6ec82334cce Mon Sep 17 00:00:00 2001 From: Toni500git Date: Sat, 8 Feb 2025 23:22:12 +0100 Subject: [PATCH] android widget: fix widget update at boot + dont run updateWidget() when configuring the widget (finally) --- android/app/src/main/AndroidManifest.xml | 4 ++-- .../widget/{customfetch.kt => Customfetch.kt} | 11 +++++---- ...ity.kt => CustomfetchConfigureActivity.kt} | 23 ++++++++++++++----- .../app/src/main/res/xml/customfetch_info.xml | 2 +- 4 files changed, 27 insertions(+), 13 deletions(-) rename android/app/src/main/java/org/toni/customfetch_android/widget/{customfetch.kt => Customfetch.kt} (95%) rename android/app/src/main/java/org/toni/customfetch_android/widget/{customfetchConfigureActivity.kt => CustomfetchConfigureActivity.kt} (95%) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 16ea7d9..31fbd2e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -16,7 +16,7 @@ android:theme="@style/Theme.MainActivity" tools:targetApi="31"> @@ -28,7 +28,7 @@ diff --git a/android/app/src/main/java/org/toni/customfetch_android/widget/customfetch.kt b/android/app/src/main/java/org/toni/customfetch_android/widget/Customfetch.kt similarity index 95% rename from android/app/src/main/java/org/toni/customfetch_android/widget/customfetch.kt rename to android/app/src/main/java/org/toni/customfetch_android/widget/Customfetch.kt index d88716d..c2b137b 100644 --- a/android/app/src/main/java/org/toni/customfetch_android/widget/customfetch.kt +++ b/android/app/src/main/java/org/toni/customfetch_android/widget/Customfetch.kt @@ -36,15 +36,14 @@ import android.text.TextPaint import android.util.Log import android.widget.RemoteViews import org.toni.customfetch_android.R -import org.toni.customfetch_android.getAppSettingsPrefInt const val WIDGET_CLICK_ACTION = "org.toni.customfetch_android.WIDGET_CLICK" /** * Implementation of App Widget functionality. - * App Widget Configuration implemented in [customfetchConfigureActivity] + * App Widget Configuration implemented in [CustomfetchConfigureActivity] */ -class customfetch : AppWidgetProvider() { +class Customfetch : AppWidgetProvider() { override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, @@ -131,6 +130,10 @@ internal fun updateAppWidget( appWidgetManager: AppWidgetManager, appWidgetId: Int ) { + // if we are configuring the widget, then don't update the non existent widget + if (!isWidgetConfigured(context, appWidgetId)) + return + val truncateText = getTruncateText(context, appWidgetId) val bgColor = getBgColor(context, appWidgetId) val widgetTextColor = getWidgetTextColor(context, appWidgetId) @@ -159,7 +162,7 @@ internal fun updateAppWidget( ) // both needed for when touching the widget - val intent = Intent(context, customfetch::class.java).apply { + val intent = Intent(context, Customfetch::class.java).apply { action = WIDGET_CLICK_ACTION putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) } diff --git a/android/app/src/main/java/org/toni/customfetch_android/widget/customfetchConfigureActivity.kt b/android/app/src/main/java/org/toni/customfetch_android/widget/CustomfetchConfigureActivity.kt similarity index 95% rename from android/app/src/main/java/org/toni/customfetch_android/widget/customfetchConfigureActivity.kt rename to android/app/src/main/java/org/toni/customfetch_android/widget/CustomfetchConfigureActivity.kt index fb06bbe..20803da 100644 --- a/android/app/src/main/java/org/toni/customfetch_android/widget/customfetchConfigureActivity.kt +++ b/android/app/src/main/java/org/toni/customfetch_android/widget/CustomfetchConfigureActivity.kt @@ -48,8 +48,8 @@ import androidx.core.graphics.toColorInt import androidx.core.text.HtmlCompat import com.skydoves.colorpickerview.listeners.ColorEnvelopeListener import org.toni.customfetch_android.R -import org.toni.customfetch_android.databinding.CustomfetchConfigureBinding import org.toni.customfetch_android.databinding.ColorpickerviewLayoutBinding +import org.toni.customfetch_android.databinding.CustomfetchConfigureBinding import org.toni.customfetch_android.getAppSettingsPrefBool import org.toni.customfetch_android.getAppSettingsPrefInt import org.toni.customfetch_android.getAppSettingsPrefString @@ -57,15 +57,14 @@ import java.io.File import java.nio.file.Files import kotlin.io.path.Path - /** - * The configuration screen for the [customfetch] AppWidget. + * The configuration screen for the [Customfetch] AppWidget. */ -class customfetchConfigureActivity : Activity() { +class CustomfetchConfigureActivity : Activity() { private var appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID private lateinit var binding: CustomfetchConfigureBinding private var onAddWidget = View.OnClickListener { - val context = this@customfetchConfigureActivity + val context = this@CustomfetchConfigureActivity // When the button is clicked, store the string locally saveConfigPrefs( @@ -118,7 +117,7 @@ class customfetchConfigureActivity : Activity() { return } - binding.argumentsConfigure.setText(getArgsPref(this@customfetchConfigureActivity, appWidgetId)) + binding.argumentsConfigure.setText(getArgsPref(this@CustomfetchConfigureActivity, appWidgetId)) binding.additionalTruncateWidth.setText(getAppSettingsPrefString(this, "additional_truncate")) binding.truncateText.isChecked = getAppSettingsPrefBool(this, "always_truncate") binding.argsHelp.text = customfetchRender.mainAndroid("customfetch --help", true) @@ -173,6 +172,8 @@ class customfetchConfigureActivity : Activity() { } } } + + markWidgetConfigured(this, appWidgetId) } private fun setSystemBgColor() { @@ -354,5 +355,15 @@ internal fun deleteConfigPrefs(context: Context, appWidgetId: Int) { prefs.apply() } +fun markWidgetConfigured(context: Context, appWidgetId: Int) { + val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + prefs.edit().putBoolean(PREF_PREFIX_KEY + appWidgetId + "_configuring", true).apply() +} + +fun isWidgetConfigured(context: Context, appWidgetId: Int): Boolean { + val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE) + return prefs.getBoolean(PREF_PREFIX_KEY + appWidgetId + "_configuring", false) +} + internal fun isValidHex(color: String): Boolean = color.matches("^#[0-9A-Fa-f]{8}$".toRegex()) \ No newline at end of file diff --git a/android/app/src/main/res/xml/customfetch_info.xml b/android/app/src/main/res/xml/customfetch_info.xml index 4b5894a..ef0022c 100644 --- a/android/app/src/main/res/xml/customfetch_info.xml +++ b/android/app/src/main/res/xml/customfetch_info.xml @@ -1,6 +1,6 @@