Merge pull request #3969 from nextcloud/receivePushDelete

Handle silent delete/delete-all push notifications
This commit is contained in:
Andy Scherzinger 2019-05-23 14:37:33 +02:00 committed by GitHub
commit 3b31841848
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 24 additions and 15 deletions

View file

@ -1 +1 @@
434
424

View file

@ -1,27 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
<Match>
<Class name="~.*\.Manifest\$.*"/>
<Class name="~.*\.Manifest\$.*" />
</Match>
<Match>
<Class name="~.*\.R\$.*"/>
<Class name="~.*\.R\$.*" />
</Match>
<Match>
<Class name="~.*\.R\$.*"/>
<Class name="~.*\.R\$.*" />
</Match>
<Match>
<Class name="~.*\$\$Parcelable.*" />
</Match>
<!-- Dagger code is autogenerated. Exclude it from Check. -->
<Match>
<Or>
<Class name="~.*\.Dagger.*"/>
<Class name="~com.nextcloud.client.di\..*_.*"/>
<Class name="~.*\.Dagger.*" />
<Class name="~com.nextcloud.client.di\..*_.*" />
</Or>
</Match>
<!-- Dagger generated code uses internal APIs -->
<Match>
<Class name="~.*\..*.*Factory"/>
<Class name="~.*\..*.*Factory" />
<Bug pattern="IICU_INCORRECT_INTERNAL_CLASS_USE" />
</Match>
@ -30,5 +31,5 @@
<Bug pattern="BAS_BLOATED_ASSIGNMENT_SCOPE" />
<!-- This is unmanageable for now due to large amount of interconnected static state -->
<Bug pattern="FCCD_FIND_CLASS_CIRCULAR_DEPENDENCY"/>
<Bug pattern="FCCD_FIND_CLASS_CIRCULAR_DEPENDENCY" />
</FindBugsFilter>

View file

@ -20,6 +20,8 @@
package com.owncloud.android.datamodel;
import com.google.gson.annotations.SerializedName;
import org.parceler.Parcel;
import lombok.AllArgsConstructor;
@ -41,4 +43,7 @@ public class DecryptedPushMessage {
public String subject;
public String id;
public int nid;
public boolean delete;
@SerializedName("delete-all")
public boolean deleteAll;
}

View file

@ -95,9 +95,7 @@ public class NotificationJob extends Job {
private static final String KEY_NOTIFICATION_ACTION_TYPE = "KEY_NOTIFICATION_ACTION_TYPE";
private static final String PUSH_NOTIFICATION_ID = "PUSH_NOTIFICATION_ID";
private static final String NUMERIC_NOTIFICATION_ID = "NUMERIC_NOTIFICATION_ID";
private static final String APP_SPREED = "spreed";
private SecureRandom randomId = new SecureRandom();
private Context context;
private UserAccountManager accountManager;
@ -110,6 +108,7 @@ public class NotificationJob extends Job {
@Override
protected Result onRunJob(@NonNull Params params) {
context = getContext();
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
PersistableBundleCompat persistableBundleCompat = getParams().getExtras();
String subject = persistableBundleCompat.getString(KEY_NOTIFICATION_SUBJECT, "");
String signature = persistableBundleCompat.getString(KEY_NOTIFICATION_SIGNATURE, "");
@ -135,8 +134,11 @@ public class NotificationJob extends Job {
DecryptedPushMessage decryptedPushMessage = gson.fromJson(new String(decryptedSubject),
DecryptedPushMessage.class);
// We ignore Spreed messages for now
if (!APP_SPREED.equals(decryptedPushMessage.getApp())) {
if (decryptedPushMessage.delete) {
notificationManager.cancel(decryptedPushMessage.nid);
} else if (decryptedPushMessage.deleteAll) {
notificationManager.cancelAll();
} else {
fetchCompleteNotification(signatureVerification.getAccount(), decryptedPushMessage);
}
}
@ -152,6 +154,7 @@ public class NotificationJob extends Job {
}
private void sendNotification(Notification notification, Account account) {
SecureRandom randomId = new SecureRandom();
RichObject file = notification.subjectRichParameters.get("file");
Intent intent;
@ -234,7 +237,7 @@ public class NotificationJob extends Job {
.setContentIntent(pendingIntent).build());
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
notificationManager.notify(pushNotificationId, notificationBuilder.build());
notificationManager.notify(notification.getNotificationId(), notificationBuilder.build());
}
private void fetchCompleteNotification(Account account, DecryptedPushMessage decryptedPushMessage) {