diff options
Diffstat (limited to 'src/com/android/launcher3/notification')
3 files changed, 75 insertions, 12 deletions
diff --git a/src/com/android/launcher3/notification/NotificationInfo.java b/src/com/android/launcher3/notification/NotificationInfo.java index ba7675c5d..f6779b331 100644 --- a/src/com/android/launcher3/notification/NotificationInfo.java +++ b/src/com/android/launcher3/notification/NotificationInfo.java @@ -38,7 +38,7 @@ import com.android.launcher3.util.PackageUserKey; * only be created when we need to show the notification contents on the UI; until then, a * {@link com.android.launcher3.badge.BadgeInfo} with only the notification key should * be passed around, and then this can be constructed using the StatusBarNotification from - * {@link NotificationListener#getNotificationsForKeys(String[])}. + * {@link NotificationListener#getNotificationsForKeys(java.util.List)}. */ public class NotificationInfo implements View.OnClickListener { diff --git a/src/com/android/launcher3/notification/NotificationKeyData.java b/src/com/android/launcher3/notification/NotificationKeyData.java new file mode 100644 index 000000000..b3ff8dadd --- /dev/null +++ b/src/com/android/launcher3/notification/NotificationKeyData.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher3.notification; + +import android.service.notification.StatusBarNotification; +import android.support.annotation.NonNull; + +import java.util.ArrayList; +import java.util.List; + +/** + * The key data associated with the notification, used to determine what to include + * in badges and dummy popup views before they are populated. + * + * @see NotificationInfo for the full data used when populating the dummy views. + */ +public class NotificationKeyData { + public final String notificationKey; + public final String shortcutId; + + private NotificationKeyData(String notificationKey, String shortcutId) { + this.notificationKey = notificationKey; + this.shortcutId = shortcutId; + } + + public static NotificationKeyData fromNotification(StatusBarNotification sbn) { + return new NotificationKeyData(sbn.getKey(), sbn.getNotification().getShortcutId()); + } + + public static List<String> extractKeysOnly(@NonNull List<NotificationKeyData> notificationKeys) { + List<String> keysOnly = new ArrayList<>(notificationKeys.size()); + for (NotificationKeyData notificationKeyData : notificationKeys) { + keysOnly.add(notificationKeyData.notificationKey); + } + return keysOnly; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof NotificationKeyData)) { + return false; + } + // Only compare the keys. + return ((NotificationKeyData) obj).notificationKey.equals(notificationKey); + } +} diff --git a/src/com/android/launcher3/notification/NotificationListener.java b/src/com/android/launcher3/notification/NotificationListener.java index 16cb5fbb0..75a1b8ab5 100644 --- a/src/com/android/launcher3/notification/NotificationListener.java +++ b/src/com/android/launcher3/notification/NotificationListener.java @@ -94,8 +94,8 @@ public class NotificationListener extends NotificationListenerService { break; case MSG_NOTIFICATION_REMOVED: if (sNotificationsChangedListener != null) { - Pair<PackageUserKey, String> pair - = (Pair<PackageUserKey, String>) message.obj; + Pair<PackageUserKey, NotificationKeyData> pair + = (Pair<PackageUserKey, NotificationKeyData>) message.obj; sNotificationsChangedListener.onNotificationRemoved(pair.first, pair.second); } break; @@ -165,12 +165,12 @@ public class NotificationListener extends NotificationListenerService { */ private class NotificationPostedMsg { PackageUserKey packageUserKey; - String notificationKey; + NotificationKeyData notificationKey; boolean shouldBeFilteredOut; NotificationPostedMsg(StatusBarNotification sbn) { packageUserKey = PackageUserKey.fromNotification(sbn); - notificationKey = sbn.getKey(); + notificationKey = NotificationKeyData.fromNotification(sbn); shouldBeFilteredOut = shouldBeFilteredOut(sbn); } } @@ -178,16 +178,18 @@ public class NotificationListener extends NotificationListenerService { @Override public void onNotificationRemoved(final StatusBarNotification sbn) { super.onNotificationRemoved(sbn); - Pair<PackageUserKey, String> packageUserKeyAndNotificationKey - = new Pair<>(PackageUserKey.fromNotification(sbn), sbn.getKey()); + Pair<PackageUserKey, NotificationKeyData> packageUserKeyAndNotificationKey + = new Pair<>(PackageUserKey.fromNotification(sbn), + NotificationKeyData.fromNotification(sbn)); mWorkerHandler.obtainMessage(MSG_NOTIFICATION_REMOVED, packageUserKeyAndNotificationKey) .sendToTarget(); } /** This makes a potentially expensive binder call and should be run on a background thread. */ - public List<StatusBarNotification> getNotificationsForKeys(String[] keys) { + public List<StatusBarNotification> getNotificationsForKeys(List<NotificationKeyData> keys) { StatusBarNotification[] notifications = NotificationListener.this - .getActiveNotifications(keys); + .getActiveNotifications(NotificationKeyData.extractKeysOnly(keys) + .toArray(new String[keys.size()])); return notifications == null ? Collections.EMPTY_LIST : Arrays.asList(notifications); } @@ -238,9 +240,10 @@ public class NotificationListener extends NotificationListenerService { } public interface NotificationsChangedListener { - void onNotificationPosted(PackageUserKey postedPackageUserKey, String notificationKey, - boolean shouldBeFilteredOut); - void onNotificationRemoved(PackageUserKey removedPackageUserKey, String notificationKey); + void onNotificationPosted(PackageUserKey postedPackageUserKey, + NotificationKeyData notificationKey, boolean shouldBeFilteredOut); + void onNotificationRemoved(PackageUserKey removedPackageUserKey, + NotificationKeyData notificationKey); void onNotificationFullRefresh(List<StatusBarNotification> activeNotifications); } } |