diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidget.kt b/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidget.kt index 3c7c87e19..38a92d555 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidget.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidget.kt @@ -12,6 +12,7 @@ import android.appwidget.AppWidgetProvider import android.content.ComponentName import android.content.Context import android.content.Intent +import android.view.View import android.widget.RemoteViews import androidx.core.net.toUri import it.niedermann.owncloud.notes.R @@ -35,10 +36,16 @@ class SingleNoteWidget : AppWidgetProvider() { override fun onReceive(context: Context, intent: Intent?) { super.onReceive(context, intent) val awm = AppWidgetManager.getInstance(context) - val provider = ComponentName(context, SingleNoteWidget::class.java) val appWidgetIds = awm.getAppWidgetIds(provider) - updateAppWidget(context, awm, appWidgetIds) + + if (intent?.action == ACTION_DATA_CHANGED) { + appWidgetIds.forEach { appWidgetId -> + awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv) + } + } else { + updateAppWidget(context, awm, appWidgetIds) + } } override fun onDeleted(context: Context, appWidgetIds: IntArray) { @@ -104,19 +111,19 @@ class SingleNoteWidget : AppWidgetProvider() { R.layout.widget_single_note ).apply { setPendingIntentTemplate(R.id.single_note_widget_lv, pendingIntent) - setEmptyView( - R.id.single_note_widget_lv, - R.id.widget_single_note_placeholder_tv - ) setRemoteAdapter(R.id.single_note_widget_lv, serviceIntent) + setViewVisibility(R.id.widget_single_note_placeholder_tv, View.VISIBLE) + setTextViewText(R.id.widget_single_note_placeholder_tv, context.getString(R.string.widget_single_note_loading)) } } companion object { + private const val ACTION_DATA_CHANGED = "it.niedermann.owncloud.notes.ACTION_WIDGET_DATA_CHANGED" + @JvmStatic fun updateSingleNoteWidgets(context: Context) { val intent = Intent(context, SingleNoteWidget::class.java).apply { - setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE) + action = ACTION_DATA_CHANGED } context.sendBroadcast(intent) } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidgetFactory.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidgetFactory.java index d588d121d..44c0ae4d2 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidgetFactory.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/singlenote/SingleNoteWidgetFactory.java @@ -10,6 +10,7 @@ import android.content.Context; import android.content.Intent; import android.util.Log; +import android.view.View; import android.widget.RemoteViews; import android.widget.RemoteViewsService; @@ -53,9 +54,16 @@ public void onDataSetChanged() { Log.v(TAG, "Fetch note with id " + noteId); note = repo.getNoteById(noteId); + final var views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note); if (note == null) { Log.e(TAG, "Error: note not found"); + views.setViewVisibility(R.id.widget_single_note_placeholder_tv, View.VISIBLE); + views.setTextViewText(R.id.widget_single_note_placeholder_tv, + context.getString(R.string.widget_single_note_note_not_found)); + } else { + views.setViewVisibility(R.id.widget_single_note_placeholder_tv, View.GONE); } + AppWidgetManager.getInstance(context).partiallyUpdateAppWidget(appWidgetId, views); } else { Log.w(TAG, "Widget with ID " + appWidgetId + " seems to be not configured yet."); } @@ -110,7 +118,6 @@ public RemoteViews getViewAt(int position) { } - // TODO Set loading view @Override public RemoteViews getLoadingView() { return null; diff --git a/app/src/main/res/layout/widget_single_note.xml b/app/src/main/res/layout/widget_single_note.xml index 582f37042..0e185bee7 100644 --- a/app/src/main/res/layout/widget_single_note.xml +++ b/app/src/main/res/layout/widget_single_note.xml @@ -25,8 +25,9 @@ android:layout_height="match_parent" android:gravity="center" android:padding="@dimen/spacer_1x" - android:text="@string/widget_single_note_placeholder_tv" + android:text="@string/widget_single_note_note_not_found" android:textAlignment="center" - android:textColor="@color/widget_foreground" /> + android:textColor="@color/widget_foreground" + android:visibility="gone" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1d0c39640..af545a805 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -241,7 +241,8 @@ Note list No notes Single note - Note not found + Loading note… + Note not found Please login to Notes before using this widget Star icon is used to denote an item as a favorite