Skip to content

Commit

Permalink
Merge pull request #12110 from nextcloud/refactor/convert-DeckApiImpl…
Browse files Browse the repository at this point in the history
…-to-kt

Convert Deck Api to Kotlin
  • Loading branch information
AndyScherzinger authored Oct 30, 2023
2 parents bc20a4c + c57a5e0 commit 2b42e7d
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,29 @@
* 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

package com.nextcloud.client.integrations.deck;

import android.app.PendingIntent;

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;
import android.app.PendingIntent
import com.nextcloud.client.account.User
import com.nextcloud.java.util.Optional
import com.owncloud.android.lib.resources.notifications.models.Notification

/**
* This API is for an integration with the <a href="https://github.com/stefan-niedermann/nextcloud-deck">Nextcloud
* Deck</a> app for android.
* This API is for an integration with the [Nextcloud
* Deck](https://github.com/stefan-niedermann/nextcloud-deck) app for android.
*/
public interface DeckApi {

interface DeckApi {
/**
* Creates a PendingIntent that can be used in a NotificationBuilder to open the notification link in Deck app
*
* @param notification Notification Notification that could be forwarded to Deck
* @param user The user that is affected by the notification
* @return If notification can be consumed by Deck, a PendingIntent opening notification link in Deck app; empty
* value otherwise
* @see <a href="https://apps.nextcloud.com/apps/deck">Deck Server App</a>
* @see [Deck Server App](https://apps.nextcloud.com/apps/deck)
*/
@NonNull
Optional<PendingIntent> createForwardToDeckActionIntent(@NonNull final Notification notification,
@NonNull final User user);
fun createForwardToDeckActionIntent(
notification: Notification,
user: User
): Optional<PendingIntent?>
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*
* Nextcloud application
*
* @author Stefan Niedermann
* Copyright (C) 2020 Stefan Niedermann <[email protected]>
*
* 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

class DeckApiImpl(private val context: Context, private val packageManager: PackageManager) : DeckApi {
override fun createForwardToDeckActionIntent(notification: Notification, user: User): Optional<PendingIntent?> {
if (APP_NAME.equals(notification.app, ignoreCase = true)) {
val intent = Intent()
for (appPackage in 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 fun createPendingIntent(intent: Intent, notification: Notification, user: User): PendingIntent {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
return PendingIntent.getActivity(
context,
notification.getNotificationId(),
putExtrasToIntent(intent, notification, user),
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
)
}

private fun putExtrasToIntent(intent: Intent, notification: Notification, user: User): Intent {
return intent
.putExtra(EXTRA_ACCOUNT, user.accountName)
.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())
}

companion object {
const val APP_NAME = "deck"
val DECK_APP_PACKAGES = arrayOf(
"it.niedermann.nextcloud.deck",
"it.niedermann.nextcloud.deck.play",
"it.niedermann.nextcloud.deck.dev"
)
const val DECK_ACTIVITY_TO_START = "it.niedermann.nextcloud.deck.ui.PushNotificationActivity"
private const val EXTRA_ACCOUNT = "account"
private const val EXTRA_LINK = "link"
private const val EXTRA_OBJECT_ID = "objectId"
private const val EXTRA_SUBJECT = "subject"
private const val EXTRA_SUBJECT_RICH = "subjectRich"
private const val EXTRA_MESSAGE = "message"
private const val EXTRA_MESSAGE_RICH = "messageRich"
private const val EXTRA_USER = "user"
private const val EXTRA_NID = "nid"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ class NotificationWork constructor(

val deckActionOverrideIntent = deckApi.createForwardToDeckActionIntent(notification, user)

val pendingIntent: PendingIntent
val pendingIntent: PendingIntent?
if (deckActionOverrideIntent.isPresent) {
pendingIntent = deckActionOverrideIntent.get()
} else {
Expand Down

0 comments on commit 2b42e7d

Please sign in to comment.