From a01a69ad996c523810fb4f32946afb02a1b0c033 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Sat, 30 Aug 2025 11:11:37 +0200 Subject: [PATCH] Fixed widgets customization (#201) --- CHANGELOG.md | 3 ++ .../notes/activities/SettingsActivity.kt | 26 ++----------- .../activities/WidgetConfigureActivity.kt | 37 ++++++++++++------- .../org/fossify/notes/helpers/Constants.kt | 1 + .../fossify/notes/interfaces/WidgetsDao.kt | 3 ++ 5 files changed, 34 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c906190bd..5784b4b99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- Fixed widgets customization ([#201]) ## [1.4.0] - 2025-07-15 ### Added @@ -73,6 +75,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#157]: https://github.com/FossifyOrg/Notes/issues/157 [#164]: https://github.com/FossifyOrg/Notes/issues/164 [#178]: https://github.com/FossifyOrg/Notes/issues/178 +[#201]: https://github.com/FossifyOrg/Notes/issues/201 [Unreleased]: https://github.com/FossifyOrg/Notes/compare/1.4.0...HEAD [1.4.0]: https://github.com/FossifyOrg/Notes/compare/1.3.1...1.4.0 diff --git a/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt index 6645a853a..9679cc96d 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt @@ -9,7 +9,6 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.text.TextUtilsCompat import androidx.core.view.ViewCompat import kotlinx.serialization.SerializationException -import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json import org.fossify.commons.dialogs.ConfirmationDialog import org.fossify.commons.dialogs.PermissionRequiredDialog @@ -45,12 +44,7 @@ import org.fossify.notes.extensions.requestUnlockNotes import org.fossify.notes.extensions.scheduleNextAutomaticBackup import org.fossify.notes.extensions.updateWidgets import org.fossify.notes.extensions.widgetsDB -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_BG_COLOR -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_ID -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_KEY_ID -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_NOTE_ID -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_SHOW_TITLE -import org.fossify.notes.helpers.CUSTOMIZED_WIDGET_TEXT_COLOR +import org.fossify.notes.helpers.ALL_WIDGET_IDS import org.fossify.notes.helpers.FONT_SIZE_100_PERCENT import org.fossify.notes.helpers.FONT_SIZE_125_PERCENT import org.fossify.notes.helpers.FONT_SIZE_150_PERCENT @@ -67,7 +61,6 @@ import org.fossify.notes.helpers.GRAVITY_END import org.fossify.notes.helpers.GRAVITY_START import org.fossify.notes.helpers.NotesHelper import org.fossify.notes.models.Note -import org.fossify.notes.models.Widget import java.util.Locale import kotlin.system.exitProcess @@ -343,30 +336,19 @@ class SettingsActivity : SimpleActivity() { } private fun setupCustomizeWidgetColors() { - var widgetToCustomize: Widget? = null + var allWidgetIds = intArrayOf() binding.settingsWidgetColorCustomizationHolder.setOnClickListener { Intent(this, WidgetConfigureActivity::class.java).apply { putExtra(IS_CUSTOMIZING_COLORS, true) - - widgetToCustomize?.apply { - putExtra(CUSTOMIZED_WIDGET_ID, widgetId) - putExtra(CUSTOMIZED_WIDGET_KEY_ID, id) - putExtra(CUSTOMIZED_WIDGET_NOTE_ID, noteId) - putExtra(CUSTOMIZED_WIDGET_BG_COLOR, widgetBgColor) - putExtra(CUSTOMIZED_WIDGET_TEXT_COLOR, widgetTextColor) - putExtra(CUSTOMIZED_WIDGET_SHOW_TITLE, widgetShowTitle) - } - + putExtra(ALL_WIDGET_IDS, allWidgetIds) startActivity(this) } } ensureBackgroundThread { val widgets = widgetsDB.getWidgets().filter { it.widgetId != 0 } - if (widgets.size == 1) { - widgetToCustomize = widgets.first() - } + allWidgetIds = widgets.map { it.widgetId }.toIntArray() } } diff --git a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt index 1b6202f9b..2efee53bd 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt @@ -41,6 +41,7 @@ class WidgetConfigureActivity : SimpleActivity() { private var mIsCustomizingColors = false private var mShowTitle = false private var mNotes = listOf() + private var mAllWidgetIds = intArrayOf() private val binding by viewBinding(WidgetConfigBinding::inflate) public override fun onCreate(savedInstanceState: Bundle?) { @@ -107,6 +108,7 @@ class WidgetConfigureActivity : SimpleActivity() { updateTextColor() mIsCustomizingColors = extras?.getBoolean(IS_CUSTOMIZING_COLORS) ?: false + mAllWidgetIds = extras?.getIntArray(ALL_WIDGET_IDS) ?: intArrayOf() binding.notesPickerHolder.beVisibleIf(!mIsCustomizingColors) binding.textNoteViewTitle.beGoneIf(!mShowTitle) @@ -189,23 +191,29 @@ class WidgetConfigureActivity : SimpleActivity() { } private fun saveConfig() { - if (mCurrentNoteId == 0L) { + if (!mIsCustomizingColors && mCurrentNoteId == 0L) { finish() return } - val views = RemoteViews(packageName, R.layout.activity_main) - views.setBackgroundColor(R.id.text_note_view, mBgColor) - views.setBackgroundColor(R.id.checklist_note_view, mBgColor) - AppWidgetManager.getInstance(this)?.updateAppWidget(mWidgetId, views) ?: return - - val extras = intent.extras - val id = if (extras?.containsKey(CUSTOMIZED_WIDGET_KEY_ID) == true) extras.getLong(CUSTOMIZED_WIDGET_KEY_ID) else null - mWidgetId = extras?.getInt(CUSTOMIZED_WIDGET_ID, mWidgetId) ?: mWidgetId - mCurrentNoteId = extras?.getLong(CUSTOMIZED_WIDGET_NOTE_ID, mCurrentNoteId) ?: mCurrentNoteId - val widget = Widget(id, mWidgetId, mCurrentNoteId, mBgColor, mTextColor, mShowTitle) - ensureBackgroundThread { - widgetsDB.insertOrUpdate(widget) + if (!mIsCustomizingColors) { + val views = RemoteViews(packageName, R.layout.activity_main) + views.setBackgroundColor(R.id.text_note_view, mBgColor) + views.setBackgroundColor(R.id.checklist_note_view, mBgColor) + AppWidgetManager.getInstance(this)?.updateAppWidget(mWidgetId, views) ?: return + + val extras = intent.extras + val id = if (extras?.containsKey(CUSTOMIZED_WIDGET_KEY_ID) == true) extras.getLong(CUSTOMIZED_WIDGET_KEY_ID) else null + mWidgetId = extras?.getInt(CUSTOMIZED_WIDGET_ID, mWidgetId) ?: mWidgetId + mCurrentNoteId = extras?.getLong(CUSTOMIZED_WIDGET_NOTE_ID, mCurrentNoteId) ?: mCurrentNoteId + val widget = Widget(id, mWidgetId, mCurrentNoteId, mBgColor, mTextColor, mShowTitle) + ensureBackgroundThread { + widgetsDB.insertOrUpdate(widget) + } + } else { + ensureBackgroundThread { + widgetsDB.updateWidgetColors(mBgColor, mTextColor) + } } storeWidgetBackground() @@ -226,8 +234,9 @@ class WidgetConfigureActivity : SimpleActivity() { } private fun requestWidgetUpdate() { + val widgetIds = if (mAllWidgetIds.isNotEmpty()) mAllWidgetIds else intArrayOf(mWidgetId) Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidgetProvider::class.java).apply { - putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId)) + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds) sendBroadcast(this) } } diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt index ba9e2e9b9..dedcdcb81 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt @@ -12,6 +12,7 @@ const val CUSTOMIZED_WIDGET_NOTE_ID = "customized_widget_note_id" const val CUSTOMIZED_WIDGET_BG_COLOR = "customized_widget_bg_color" const val CUSTOMIZED_WIDGET_TEXT_COLOR = "customized_widget_text_color" const val CUSTOMIZED_WIDGET_SHOW_TITLE = "customized_widget_show_title" +const val ALL_WIDGET_IDS = "all_widget_ids" const val SHORTCUT_NEW_TEXT_NOTE = "shortcut_new_text_note" const val SHORTCUT_NEW_CHECKLIST = "shortcut_new_checklist" const val NEW_TEXT_NOTE = "new_text_note" diff --git a/app/src/main/kotlin/org/fossify/notes/interfaces/WidgetsDao.kt b/app/src/main/kotlin/org/fossify/notes/interfaces/WidgetsDao.kt index 8bc73179f..e4d22ee48 100644 --- a/app/src/main/kotlin/org/fossify/notes/interfaces/WidgetsDao.kt +++ b/app/src/main/kotlin/org/fossify/notes/interfaces/WidgetsDao.kt @@ -22,4 +22,7 @@ interface WidgetsDao { @Query("DELETE FROM widgets WHERE widget_id = :widgetId") fun deleteWidgetId(widgetId: Int) + + @Query("UPDATE widgets SET widget_bg_color = :bgColor, widget_text_color = :textColor") + fun updateWidgetColors(bgColor: Int, textColor: Int) }