diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-04-18 18:41:48 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-04-18 18:41:48 +0300 |
commit | c184f4f326c754a6edd086cf4c21b645ec3bcc24 (patch) | |
tree | e863678a3d147e1de48858b3a72087a4fc84b14b | |
parent | e66947dbb081e3f83df89b2eb8096b2e9ceed8ac (diff) |
Fix #932 Link to Board-view from Widget
Signed-off-by: Stefan Niedermann <info@niedermann.it>
3 files changed, 32 insertions, 11 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java index bedf5253f..1ec5bddcb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidget.java @@ -14,6 +14,7 @@ import androidx.annotation.NonNull; import java.util.List; import java.util.stream.Collectors; +import it.niedermann.nextcloud.deck.BuildConfig; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.api.ResponseCallback; @@ -30,8 +31,10 @@ import it.niedermann.nextcloud.deck.ui.card.EditActivity; import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE; public class UpcomingWidget extends AppWidgetProvider { - private static final int PENDING_INTENT_OPEN_APP_RQ = 0; - private static final int PENDING_INTENT_EDIT_CARD_RQ = 1; + private static final String PENDING_INTENT_ACTION_EDIT = "edit"; + private static final String PENDING_INTENT_ACTION_OPEN = "open"; + private static final String PENDING_INTENT_PARAM_LOCAL_CARD_ID = "localCardId"; + private static final String PENDING_INTENT_PARAM_ACCOUNT_ID = "accountId"; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { @@ -86,6 +89,17 @@ public class UpcomingWidget extends AppWidgetProvider { DeckLog.verbose(ACTION_APPWIDGET_UPDATE, "→ Triggering update for all widgets of type", UpcomingWidget.class.getSimpleName()); updateAppWidget(context, awm, awm.getAppWidgetIds(new ComponentName(context, UpcomingWidget.class))); } + } else if (PENDING_INTENT_ACTION_EDIT.equals(intent.getAction())) { + if (intent.hasExtra(PENDING_INTENT_PARAM_ACCOUNT_ID) && intent.hasExtra(PENDING_INTENT_PARAM_LOCAL_CARD_ID)) { + new Thread(() -> { + final SyncManager syncManager = new SyncManager(context); + context.startActivity(EditActivity.createEditCardIntent(context, syncManager.readAccountDirectly(intent.getLongExtra(PENDING_INTENT_PARAM_ACCOUNT_ID, -1)), syncManager.getBoardLocalIdByLocalCardIdDirectly(intent.getLongExtra(PENDING_INTENT_PARAM_LOCAL_CARD_ID, -1)), intent.getLongExtra(PENDING_INTENT_PARAM_LOCAL_CARD_ID, -1))); + }).start(); + } else { + DeckLog.error(PENDING_INTENT_PARAM_ACCOUNT_ID, "and", PENDING_INTENT_PARAM_LOCAL_CARD_ID, "must be provided for action", PENDING_INTENT_ACTION_EDIT); + } + } else if (PENDING_INTENT_ACTION_OPEN.equals(intent.getAction())) { + context.startActivity(context.getPackageManager().getLaunchIntentForPackage(BuildConfig.APPLICATION_ID)); } } @@ -109,8 +123,7 @@ public class UpcomingWidget extends AppWidgetProvider { serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); - final PendingIntent templatePI = PendingIntent.getActivity(context, PENDING_INTENT_EDIT_CARD_RQ, - new Intent(context, EditActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); + final PendingIntent templatePI = PendingIntent.getBroadcast(context, appWidgetId, new Intent(context, UpcomingWidget.class), PendingIntent.FLAG_UPDATE_CURRENT); views.setPendingIntentTemplate(R.id.upcoming_widget_lv, templatePI); views.setRemoteAdapter(R.id.upcoming_widget_lv, serviceIntent); @@ -121,4 +134,16 @@ public class UpcomingWidget extends AppWidgetProvider { }).start(); } } + + static Intent fillEditPendingIntent(long accountId, long localCardId) { + return new Intent() + .setAction(PENDING_INTENT_ACTION_EDIT) + .putExtra(PENDING_INTENT_PARAM_ACCOUNT_ID, accountId) + .putExtra(PENDING_INTENT_PARAM_LOCAL_CARD_ID, localCardId); + } + + static Intent fillOpenPendingIntent() { + return new Intent() + .setAction(PENDING_INTENT_ACTION_OPEN); + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java index 7da242179..c23e4ca3d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/widget/upcoming/UpcomingWidgetFactory.java @@ -3,7 +3,6 @@ package it.niedermann.nextcloud.deck.ui.widget.upcoming; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; -import android.net.Uri; import android.widget.RemoteViews; import android.widget.RemoteViewsService; @@ -18,7 +17,6 @@ import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; -import it.niedermann.nextcloud.deck.ui.card.EditActivity; import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterItem; import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsAdapterSectionItem; import it.niedermann.nextcloud.deck.ui.upcomingcards.UpcomingCardsUtil; @@ -85,15 +83,12 @@ public class UpcomingWidgetFactory implements RemoteViewsService.RemoteViewsFact } else { widget_entry.setViewPadding(R.id.widget_entry_content_tv, headerHorizontalPadding, headerVerticalPaddingNth, headerHorizontalPadding, 0); } + widget_entry.setOnClickFillInIntent(R.id.widget_stack_entry, UpcomingWidget.fillOpenPendingIntent()); } else if (data.get(i).getClass() == UpcomingCardsAdapterItem.class || data.get(i) instanceof UpcomingCardsAdapterItem) { final FullCard card = ((UpcomingCardsAdapterItem) data.get(i)).getFullCard(); widget_entry = new RemoteViews(context.getPackageName(), R.layout.widget_stack_entry); widget_entry.setTextViewText(R.id.widget_entry_content_tv, card.getCard().getTitle()); - - final Long localCardId = card.getCard().getLocalId(); - final Intent intent = EditActivity.createEditCardIntent(context, syncManager.readAccountDirectly(card.getAccountId()), syncManager.getBoardLocalIdByLocalCardIdDirectly(localCardId), localCardId); - intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); - widget_entry.setOnClickFillInIntent(R.id.widget_stack_entry, intent); + widget_entry.setOnClickFillInIntent(R.id.widget_stack_entry, UpcomingWidget.fillEditPendingIntent(card.getAccountId(), card.getLocalId())); } else { DeckLog.logError(new IllegalStateException("Expected items to be instance of " + UpcomingCardsAdapterSectionItem.class.getSimpleName() + " or " + UpcomingCardsAdapterItem.class.getSimpleName())); return null; diff --git a/fastlane/metadata/android/en-US/changelogs/1018000.txt b/fastlane/metadata/android/en-US/changelogs/1018000.txt index f8f0a7c5a..f6436acde 100644 --- a/fastlane/metadata/android/en-US/changelogs/1018000.txt +++ b/fastlane/metadata/android/en-US/changelogs/1018000.txt @@ -1,2 +1,3 @@ - 🖼 Cover images for cards (optional) +- 🆕 Upcoming widget: clicking on a time separator now opens last board (#932) - 👤 Show display name instead of user id in account switcher (#864)
\ No newline at end of file |