123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- * Nextcloud application
- *
- * @author Stefan Niedermann
- * Copyright (C) 2020 Stefan Niedermann <info@niedermann.it>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- package com.nextcloud.client.integrations.deck;
- import android.app.PendingIntent;
- import android.content.Context;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import com.nextcloud.client.account.User;
- import com.nextcloud.java.util.Optional;
- import com.owncloud.android.lib.resources.notifications.models.Notification;
- import androidx.annotation.NonNull;
- public class DeckApiImpl implements DeckApi {
- static final String APP_NAME = "deck";
- static final String[] DECK_APP_PACKAGES = new String[] {
- "it.niedermann.nextcloud.deck",
- "it.niedermann.nextcloud.deck.play",
- "it.niedermann.nextcloud.deck.dev"
- };
- static final String DECK_ACTIVITY_TO_START = "it.niedermann.nextcloud.deck.ui.PushNotificationActivity";
- private static final String EXTRA_ACCOUNT = "account";
- private static final String EXTRA_LINK = "link";
- private static final String EXTRA_OBJECT_ID = "objectId";
- private static final String EXTRA_SUBJECT = "subject";
- private static final String EXTRA_SUBJECT_RICH = "subjectRich";
- private static final String EXTRA_MESSAGE = "message";
- private static final String EXTRA_MESSAGE_RICH = "messageRich";
- private static final String EXTRA_USER = "user";
- private static final String EXTRA_NID = "nid";
- private final Context context;
- private final PackageManager packageManager;
- public DeckApiImpl(@NonNull Context context, @NonNull PackageManager packageManager) {
- this.context = context;
- this.packageManager = packageManager;
- }
- @NonNull
- @Override
- public Optional<PendingIntent> createForwardToDeckActionIntent(@NonNull Notification notification, @NonNull User user) {
- if (APP_NAME.equalsIgnoreCase(notification.app)) {
- final Intent intent = new Intent();
- for (String appPackage : DECK_APP_PACKAGES) {
- intent.setClassName(appPackage, DECK_ACTIVITY_TO_START);
- if (packageManager.resolveActivity(intent, 0) != null) {
- return Optional.of(createPendingIntent(intent, notification, user));
- }
- }
- }
- return Optional.empty();
- }
- private PendingIntent createPendingIntent(@NonNull Intent intent, @NonNull Notification notification, @NonNull User user) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return PendingIntent.getActivity(context, notification.getNotificationId(),
- putExtrasToIntent(intent, notification, user),
- PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
- }
- private Intent putExtrasToIntent(@NonNull Intent intent, @NonNull Notification notification, @NonNull User user) {
- return intent
- .putExtra(EXTRA_ACCOUNT, user.getAccountName())
- .putExtra(EXTRA_LINK, notification.getLink())
- .putExtra(EXTRA_OBJECT_ID, notification.getObjectId())
- .putExtra(EXTRA_SUBJECT, notification.getSubject())
- .putExtra(EXTRA_SUBJECT_RICH, notification.getSubjectRich())
- .putExtra(EXTRA_MESSAGE, notification.getMessage())
- .putExtra(EXTRA_MESSAGE_RICH, notification.getMessageRich())
- .putExtra(EXTRA_USER, notification.getUser())
- .putExtra(EXTRA_NID, notification.getNotificationId());
- }
- }
|