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

Commit 5a0af5bf authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "[People Service] Remove conversations without corresponding...

Merge "Merge "[People Service] Remove conversations without corresponding shortcuts in ShortcutManager" into tm-qpr-dev am: 95f66759 am: d7e99d09"
parents fe745397 e5eb82ee
Loading
Loading
Loading
Loading
+30 −25
Original line number Original line Diff line number Diff line
@@ -271,22 +271,22 @@ public class DataManager {
    private ConversationChannel getConversationChannel(String packageName, int userId,
    private ConversationChannel getConversationChannel(String packageName, int userId,
            String shortcutId, ConversationInfo conversationInfo) {
            String shortcutId, ConversationInfo conversationInfo) {
        ShortcutInfo shortcutInfo = getShortcut(packageName, userId, shortcutId);
        ShortcutInfo shortcutInfo = getShortcut(packageName, userId, shortcutId);
        return getConversationChannel(shortcutInfo, conversationInfo);
        return getConversationChannel(
                shortcutInfo, conversationInfo, packageName, userId, shortcutId);
    }
    }


    @Nullable
    @Nullable
    private ConversationChannel getConversationChannel(ShortcutInfo shortcutInfo,
    private ConversationChannel getConversationChannel(ShortcutInfo shortcutInfo,
            ConversationInfo conversationInfo) {
            ConversationInfo conversationInfo, String packageName, int userId, String shortcutId) {
        if (conversationInfo == null || conversationInfo.isDemoted()) {
        if (conversationInfo == null || conversationInfo.isDemoted()) {
            return null;
            return null;
        }
        }
        if (shortcutInfo == null) {
        if (shortcutInfo == null) {
            Slog.e(TAG, "Shortcut no longer found");
            Slog.e(TAG, "Shortcut no longer found");
            mInjector.getBackgroundExecutor().execute(
                    () -> removeConversations(packageName, userId, Set.of(shortcutId)));
            return null;
            return null;
        }
        }
        String packageName = shortcutInfo.getPackage();
        String shortcutId = shortcutInfo.getId();
        int userId = shortcutInfo.getUserId();
        int uid = mPackageManagerInternal.getPackageUid(packageName, 0, userId);
        int uid = mPackageManagerInternal.getPackageUid(packageName, 0, userId);
        NotificationChannel parentChannel =
        NotificationChannel parentChannel =
                mNotificationManagerInternal.getNotificationChannel(packageName, uid,
                mNotificationManagerInternal.getNotificationChannel(packageName, uid,
@@ -1130,30 +1130,33 @@ public class DataManager {
        public void onShortcutsRemoved(@NonNull String packageName,
        public void onShortcutsRemoved(@NonNull String packageName,
                @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) {
                @NonNull List<ShortcutInfo> shortcuts, @NonNull UserHandle user) {
            mInjector.getBackgroundExecutor().execute(() -> {
            mInjector.getBackgroundExecutor().execute(() -> {
                int uid = Process.INVALID_UID;
                HashSet<String> shortcutIds = new HashSet<>();
                try {
                    uid = mContext.getPackageManager().getPackageUidAsUser(
                            packageName, user.getIdentifier());
                } catch (PackageManager.NameNotFoundException e) {
                    Slog.e(TAG, "Package not found: " + packageName, e);
                }
                PackageData packageData = getPackage(packageName, user.getIdentifier());
                Set<String> shortcutIds = new HashSet<>();
                for (ShortcutInfo shortcutInfo : shortcuts) {
                for (ShortcutInfo shortcutInfo : shortcuts) {
                    if (packageData != null) {
                        if (DEBUG) Log.d(TAG, "Deleting shortcut: " + shortcutInfo.getId());
                        packageData.deleteDataForConversation(shortcutInfo.getId());
                    }
                    shortcutIds.add(shortcutInfo.getId());
                    shortcutIds.add(shortcutInfo.getId());
                }
                }
                if (uid != Process.INVALID_UID) {
                removeConversations(packageName, user.getIdentifier(), shortcutIds);
                    mNotificationManagerInternal.onConversationRemoved(
                            packageName, uid, shortcutIds);
                }
            });
            });
        }
        }
    }
    }


    private void removeConversations(
            @NonNull String packageName, @NonNull int userId, @NonNull Set<String> shortcutIds) {
        PackageData packageData = getPackage(packageName, userId);
        if (packageData != null) {
            for (String shortcutId : shortcutIds) {
                if (DEBUG) Log.d(TAG, "Deleting shortcut: " + shortcutId);
                packageData.deleteDataForConversation(shortcutId);
            }
        }
        try {
            int uid = mContext.getPackageManager().getPackageUidAsUser(
                    packageName, userId);
            mNotificationManagerInternal.onConversationRemoved(packageName, uid, shortcutIds);
        } catch (PackageManager.NameNotFoundException e) {
            Slog.e(TAG, "Package not found when removing conversation: " + packageName, e);
        }
    }

    /** Listener for the notifications and their settings changes. */
    /** Listener for the notifications and their settings changes. */
    private class NotificationListener extends NotificationListenerService {
    private class NotificationListener extends NotificationListenerService {


@@ -1349,9 +1352,11 @@ public class DataManager {
    }
    }


    private void updateConversationStoreThenNotifyListeners(ConversationStore cs,
    private void updateConversationStoreThenNotifyListeners(ConversationStore cs,
            ConversationInfo modifiedConv, ShortcutInfo shortcutInfo) {
            ConversationInfo modifiedConv, @NonNull ShortcutInfo shortcutInfo) {
        cs.addOrUpdate(modifiedConv);
        cs.addOrUpdate(modifiedConv);
        ConversationChannel channel = getConversationChannel(shortcutInfo, modifiedConv);
        ConversationChannel channel = getConversationChannel(
                shortcutInfo, modifiedConv, shortcutInfo.getPackage(), shortcutInfo.getUserId(),
                shortcutInfo.getId());
        if (channel != null) {
        if (channel != null) {
            notifyConversationsListeners(Arrays.asList(channel));
            notifyConversationsListeners(Arrays.asList(channel));
        }
        }
+28 −0
Original line number Original line Diff line number Diff line
@@ -686,6 +686,34 @@ public final class DataManagerTest {
        assertThat(result.getStatuses()).containsExactly(cs);
        assertThat(result.getStatuses()).containsExactly(cs);
    }
    }


    @Test
    public void testGetConversation_unsyncedShortcut() {
        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
                buildPerson());
        shortcut.setCached(ShortcutInfo.FLAG_PINNED);
        mDataManager.addOrUpdateConversationInfo(shortcut);
        assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
                TEST_SHORTCUT_ID)).isNotNull();
        assertThat(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
                .getConversationStore()
                .getConversation(TEST_SHORTCUT_ID)).isNotNull();

        when(mShortcutServiceInternal.getShortcuts(
                anyInt(), anyString(), anyLong(), anyString(), anyList(), any(), any(),
                anyInt(), anyInt(), anyInt(), anyInt()))
                .thenReturn(Collections.emptyList());
        assertThat(mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
                TEST_SHORTCUT_ID)).isNull();

        // Conversation is removed from store as there is no matching shortcut in ShortcutManager
        assertThat(mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
                .getConversationStore()
                .getConversation(TEST_SHORTCUT_ID)).isNull();
        verify(mNotificationManagerInternal)
                .onConversationRemoved(TEST_PKG_NAME, TEST_PKG_UID, Set.of(TEST_SHORTCUT_ID));
    }

    @Test
    @Test
    public void testOnNotificationChannelModified() {
    public void testOnNotificationChannelModified() {
        mDataManager.onUserUnlocked(USER_ID_PRIMARY);
        mDataManager.onUserUnlocked(USER_ID_PRIMARY);