Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1e91989d authored by Danning Chen's avatar Danning Chen Committed by Android (Google) Code Review
Browse files

Merge "Listen to the notification channel creation/modification/deletion events"

parents 551186a3 44725cd2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -9256,7 +9256,7 @@ public class NotificationManagerService extends SystemService {
                }

                BackgroundThread.getHandler().post(() -> {
                    if (hasCompanionDevice(serviceInfo)) {
                    if (serviceInfo.isSystem || hasCompanionDevice(serviceInfo)) {
                        notifyNotificationChannelChanged(
                                serviceInfo, pkg, user, channel, modificationType);
                    }
@@ -9276,7 +9276,7 @@ public class NotificationManagerService extends SystemService {
                }

                BackgroundThread.getHandler().post(() -> {
                    if (hasCompanionDevice(serviceInfo)) {
                    if (serviceInfo.isSystem || hasCompanionDevice(serviceInfo)) {
                        notifyNotificationChannelGroupChanged(
                                serviceInfo, pkg, user, group, modificationType);
                    }
+10 −10
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ import java.util.Objects;
 */
public class ConversationInfo {

    private static final int FLAG_VIP = 1;
    private static final int FLAG_IMPORTANT = 1;

    private static final int FLAG_NOTIFICATION_SILENCED = 1 << 1;

@@ -50,7 +50,7 @@ public class ConversationInfo {
    private static final int FLAG_DEMOTED = 1 << 6;

    @IntDef(flag = true, prefix = {"FLAG_"}, value = {
            FLAG_VIP,
            FLAG_IMPORTANT,
            FLAG_NOTIFICATION_SILENCED,
            FLAG_BUBBLED,
            FLAG_PERSON_IMPORTANT,
@@ -129,9 +129,9 @@ public class ConversationInfo {
        return hasShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED);
    }

    /** Whether this conversation is marked as VIP by the user. */
    public boolean isVip() {
        return hasConversationFlags(FLAG_VIP);
    /** Whether this conversation is marked as important by the user. */
    public boolean isImportant() {
        return hasConversationFlags(FLAG_IMPORTANT);
    }

    /** Whether the notifications for this conversation should be silenced. */
@@ -208,8 +208,8 @@ public class ConversationInfo {
        sb.append("]");
        sb.append(", conversationFlags=0x").append(Integer.toHexString(mConversationFlags));
        sb.append(" [");
        if (isVip()) {
            sb.append("Vip");
        if (isImportant()) {
            sb.append("Imp");
        }
        if (isNotificationSilenced()) {
            sb.append("Sil");
@@ -221,7 +221,7 @@ public class ConversationInfo {
            sb.append("Dem");
        }
        if (isPersonImportant()) {
            sb.append("Imp");
            sb.append("PIm");
        }
        if (isPersonBot()) {
            sb.append("Bot");
@@ -318,8 +318,8 @@ public class ConversationInfo {
            return this;
        }

        Builder setVip(boolean value) {
            return setConversationFlag(FLAG_VIP, value);
        Builder setImportant(boolean value) {
            return setConversationFlag(FLAG_IMPORTANT, value);
        }

        Builder setNotificationSilenced(boolean value) {
+42 −2
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Person;
import android.app.prediction.AppTarget;
import android.app.prediction.AppTargetEvent;
@@ -157,8 +159,8 @@ public class DataManager {
        mNotificationListeners.put(userId, notificationListener);
        try {
            notificationListener.registerAsSystemService(mContext,
                    new ComponentName(PLATFORM_PACKAGE_NAME, getClass().getSimpleName()),
                    UserHandle.myUserId());
                    new ComponentName(PLATFORM_PACKAGE_NAME, getClass().getCanonicalName()),
                    userId);
        } catch (RemoteException e) {
            // Should never occur for local calls.
        }
@@ -571,6 +573,44 @@ public class DataManager {
            long currentTime = System.currentTimeMillis();
            eventHistory.addEvent(new Event(currentTime, Event.TYPE_NOTIFICATION_OPENED));
        }

        @Override
        public void onNotificationChannelModified(String pkg, UserHandle user,
                NotificationChannel channel, int modificationType) {
            PackageData packageData = getPackage(pkg, user.getIdentifier());
            String shortcutId = channel.getConversationId();
            if (packageData == null || shortcutId == null) {
                return;
            }
            ConversationStore conversationStore = packageData.getConversationStore();
            ConversationInfo conversationInfo = conversationStore.getConversation(shortcutId);
            if (conversationInfo == null) {
                return;
            }
            ConversationInfo.Builder builder = new ConversationInfo.Builder(conversationInfo);
            switch (modificationType) {
                case NOTIFICATION_CHANNEL_OR_GROUP_ADDED:
                case NOTIFICATION_CHANNEL_OR_GROUP_UPDATED:
                    builder.setNotificationChannelId(channel.getId());
                    builder.setImportant(channel.isImportantConversation());
                    builder.setDemoted(channel.isDemoted());
                    builder.setNotificationSilenced(
                            channel.getImportance() <= NotificationManager.IMPORTANCE_LOW);
                    builder.setBubbled(channel.canBubble());
                    break;
                case NOTIFICATION_CHANNEL_OR_GROUP_DELETED:
                    // If the notification channel is deleted, revert all the notification settings
                    // to the default value.
                    builder.setNotificationChannelId(null);
                    builder.setImportant(false);
                    builder.setDemoted(false);
                    builder.setNotificationSilenced(false);
                    builder.setBubbled(false);
                    break;
            }
            conversationStore.addOrUpdate(builder.build());
            // TODO: Cache the shortcut when a conversation's notification setting is changed.
        }
    }

    /**
+6 −6
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ public final class ConversationInfoTest {
                .setContactPhoneNumber(PHONE_NUMBER)
                .setNotificationChannelId(NOTIFICATION_CHANNEL_ID)
                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
                .setVip(true)
                .setImportant(true)
                .setNotificationSilenced(true)
                .setBubbled(true)
                .setDemoted(true)
@@ -62,7 +62,7 @@ public final class ConversationInfoTest {
        assertEquals(PHONE_NUMBER, conversationInfo.getContactPhoneNumber());
        assertEquals(NOTIFICATION_CHANNEL_ID, conversationInfo.getNotificationChannelId());
        assertTrue(conversationInfo.isShortcutLongLived());
        assertTrue(conversationInfo.isVip());
        assertTrue(conversationInfo.isImportant());
        assertTrue(conversationInfo.isNotificationSilenced());
        assertTrue(conversationInfo.isBubbled());
        assertTrue(conversationInfo.isDemoted());
@@ -83,7 +83,7 @@ public final class ConversationInfoTest {
        assertNull(conversationInfo.getContactPhoneNumber());
        assertNull(conversationInfo.getNotificationChannelId());
        assertFalse(conversationInfo.isShortcutLongLived());
        assertFalse(conversationInfo.isVip());
        assertFalse(conversationInfo.isImportant());
        assertFalse(conversationInfo.isNotificationSilenced());
        assertFalse(conversationInfo.isBubbled());
        assertFalse(conversationInfo.isDemoted());
@@ -101,7 +101,7 @@ public final class ConversationInfoTest {
                .setContactPhoneNumber(PHONE_NUMBER)
                .setNotificationChannelId(NOTIFICATION_CHANNEL_ID)
                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
                .setVip(true)
                .setImportant(true)
                .setNotificationSilenced(true)
                .setBubbled(true)
                .setPersonImportant(true)
@@ -110,7 +110,7 @@ public final class ConversationInfoTest {
                .build();

        ConversationInfo destination = new ConversationInfo.Builder(source)
                .setVip(false)
                .setImportant(false)
                .setContactStarred(false)
                .build();

@@ -120,7 +120,7 @@ public final class ConversationInfoTest {
        assertEquals(PHONE_NUMBER, destination.getContactPhoneNumber());
        assertEquals(NOTIFICATION_CHANNEL_ID, destination.getNotificationChannelId());
        assertTrue(destination.isShortcutLongLived());
        assertFalse(destination.isVip());
        assertFalse(destination.isImportant());
        assertTrue(destination.isNotificationSilenced());
        assertTrue(destination.isBubbled());
        assertTrue(destination.isPersonImportant());
+1 −1
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ public final class ConversationStoreTest {
                .setContactPhoneNumber(phoneNumber)
                .setNotificationChannelId(notificationChannelId)
                .setShortcutFlags(ShortcutInfo.FLAG_LONG_LIVED)
                .setVip(true)
                .setImportant(true)
                .setBubbled(true)
                .build();
    }
Loading