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

Commit 5bed8adb authored by Anna Zappone's avatar Anna Zappone
Browse files

Update last interaction storage notification clear

Add debug logging as well, and mimic the same logic in
PeopleSpaceWidgetManager to avoid the extra Binder call

Bug: 182195735
Test: DataManagerTest
Change-Id: I4d042e26d00f421a24203cc659fb3a376f9df033
parent 19943bde
Loading
Loading
Loading
Loading
+16 −8
Original line number Original line Diff line number Diff line
@@ -203,7 +203,7 @@ public class PeopleSpaceUtils {
        if (DEBUG) {
        if (DEBUG) {
            Log.i(TAG, "Removing any notification stored for tile Id: " + tile.getId());
            Log.i(TAG, "Removing any notification stored for tile Id: " + tile.getId());
        }
        }
        return tile
        PeopleSpaceTile.Builder updatedTile = tile
                .toBuilder()
                .toBuilder()
                // Reset notification content.
                // Reset notification content.
                .setNotificationKey(null)
                .setNotificationKey(null)
@@ -212,8 +212,15 @@ public class PeopleSpaceUtils {
                .setNotificationDataUri(null)
                .setNotificationDataUri(null)
                .setMessagesCount(0)
                .setMessagesCount(0)
                // Reset missed calls category.
                // Reset missed calls category.
                .setNotificationCategory(null)
                .setNotificationCategory(null);
                .build();

        // Only set last interaction to now if we are clearing a notification.
        if (!TextUtils.isEmpty(tile.getNotificationKey())) {
            long currentTimeMillis = System.currentTimeMillis();
            if (DEBUG) Log.d(TAG, "Set last interaction on clear: " + currentTimeMillis);
            updatedTile.setLastInteractionTimestamp(currentTimeMillis);
        }
        return updatedTile.build();
    }
    }


    /**
    /**
@@ -227,10 +234,11 @@ public class PeopleSpaceUtils {
            if (DEBUG) Log.d(TAG, "Tile key: " + key.toString() + ". Notification is null");
            if (DEBUG) Log.d(TAG, "Tile key: " + key.toString() + ". Notification is null");
            return removeNotificationFields(tile);
            return removeNotificationFields(tile);
        }
        }
        Notification notification = notificationEntry.getSbn().getNotification();
        StatusBarNotification sbn = notificationEntry.getSbn();
        Notification notification = sbn.getNotification();


        PeopleSpaceTile.Builder updatedTile = tile.toBuilder();
        PeopleSpaceTile.Builder updatedTile = tile.toBuilder();
        String uriFromNotification = getContactUri(notificationEntry.getSbn());
        String uriFromNotification = getContactUri(sbn);
        if (appWidgetId.isPresent() && tile.getContactUri() == null && !TextUtils.isEmpty(
        if (appWidgetId.isPresent() && tile.getContactUri() == null && !TextUtils.isEmpty(
                uriFromNotification)) {
                uriFromNotification)) {
            if (DEBUG) Log.d(TAG, "Add uri from notification to tile: " + uriFromNotification);
            if (DEBUG) Log.d(TAG, "Add uri from notification to tile: " + uriFromNotification);
@@ -241,7 +249,6 @@ public class PeopleSpaceUtils {
            // Update cached tile in-memory.
            // Update cached tile in-memory.
            updatedTile.setContactUri(contactUri);
            updatedTile.setContactUri(contactUri);
        }
        }

        boolean isMissedCall = isMissedCall(notification);
        boolean isMissedCall = isMissedCall(notification);
        List<Notification.MessagingStyle.Message> messages =
        List<Notification.MessagingStyle.Message> messages =
                getMessagingStyleMessages(notification);
                getMessagingStyleMessages(notification);
@@ -261,12 +268,13 @@ public class PeopleSpaceUtils {
        Uri dataUri = message != null ? message.getDataUri() : null;
        Uri dataUri = message != null ? message.getDataUri() : null;
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "Tile key: " + key.toString() + ". Notification message has text: "
            Log.d(TAG, "Tile key: " + key.toString() + ". Notification message has text: "
                    + hasMessageText);
                    + hasMessageText + " Has last interaction: " + sbn.getPostTime());
        }
        }
        CharSequence sender = getSenderIfGroupConversation(notification, message);
        CharSequence sender = getSenderIfGroupConversation(notification, message);


        return updatedTile
        return updatedTile
                .setNotificationKey(notificationEntry.getSbn().getKey())
                .setLastInteractionTimestamp(sbn.getPostTime())
                .setNotificationKey(sbn.getKey())
                .setNotificationCategory(notification.category)
                .setNotificationCategory(notification.category)
                .setNotificationContent(content)
                .setNotificationContent(content)
                .setNotificationSender(sender)
                .setNotificationSender(sender)
+1 −1
Original line number Original line Diff line number Diff line
@@ -835,7 +835,7 @@ public class PeopleTileViewHelper {
            return null;
            return null;
        } else if (durationSinceLastInteraction.toDays() < DAYS_IN_A_WEEK) {
        } else if (durationSinceLastInteraction.toDays() < DAYS_IN_A_WEEK) {
            return context.getString(R.string.timestamp, formatter.formatMeasures(
            return context.getString(R.string.timestamp, formatter.formatMeasures(
                    new Measure(durationSinceLastInteraction.toHours(),
                    new Measure(durationSinceLastInteraction.toDays(),
                            MeasureUnit.DAY)));
                            MeasureUnit.DAY)));
        } else if (durationSinceLastInteraction.toDays() <= DAYS_IN_A_WEEK * 2) {
        } else if (durationSinceLastInteraction.toDays() <= DAYS_IN_A_WEEK * 2) {
            return context.getString(durationSinceLastInteraction.toDays() == DAYS_IN_A_WEEK
            return context.getString(durationSinceLastInteraction.toDays() == DAYS_IN_A_WEEK
+6 −1
Original line number Original line Diff line number Diff line
@@ -192,6 +192,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
            | SUPPRESSED_EFFECT_LIGHTS
            | SUPPRESSED_EFFECT_LIGHTS
            | SUPPRESSED_EFFECT_PEEK
            | SUPPRESSED_EFFECT_PEEK
            | SUPPRESSED_EFFECT_NOTIFICATION_LIST;
            | SUPPRESSED_EFFECT_NOTIFICATION_LIST;
    private static final long SBN_POST_TIME = 567L;


    private ShortcutInfo mShortcutInfo;
    private ShortcutInfo mShortcutInfo;
    private NotificationEntry mNotificationEntry;
    private NotificationEntry mNotificationEntry;
@@ -632,6 +633,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
        Bundle bundle = mBundleArgumentCaptor.getValue();
        Bundle bundle = mBundleArgumentCaptor.getValue();
        PeopleSpaceTile tile = bundle.getParcelable(OPTIONS_PEOPLE_TILE);
        PeopleSpaceTile tile = bundle.getParcelable(OPTIONS_PEOPLE_TILE);
        assertThat(tile.getNotificationKey()).isEqualTo(NOTIFICATION_KEY);
        assertThat(tile.getNotificationKey()).isEqualTo(NOTIFICATION_KEY);
        assertThat(tile.getLastInteractionTimestamp()).isEqualTo(SBN_POST_TIME);
        assertThat(tile.getNotificationContent()).isEqualTo(NOTIFICATION_CONTENT_1);
        assertThat(tile.getNotificationContent()).isEqualTo(NOTIFICATION_CONTENT_1);
        verify(mAppWidgetManager, times(1)).updateAppWidget(eq(WIDGET_ID_WITH_SHORTCUT),
        verify(mAppWidgetManager, times(1)).updateAppWidget(eq(WIDGET_ID_WITH_SHORTCUT),
                any());
                any());
@@ -1010,6 +1012,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
                .setSbn(sbn)
                .setSbn(sbn)
                .setId(1));
                .setId(1));
        mClock.advanceTime(MIN_LINGER_DURATION);
        mClock.advanceTime(MIN_LINGER_DURATION);
        long timestampBeforeNotificationClear = System.currentTimeMillis();
        NotifEvent notif1b = mNoMan.retractNotif(notif1.sbn, 0);
        NotifEvent notif1b = mNoMan.retractNotif(notif1.sbn, 0);
        mClock.advanceTime(MIN_LINGER_DURATION);
        mClock.advanceTime(MIN_LINGER_DURATION);


@@ -1018,13 +1021,14 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
        Bundle bundle = mBundleArgumentCaptor.getValue();
        Bundle bundle = mBundleArgumentCaptor.getValue();
        PeopleSpaceTile tile = bundle.getParcelable(OPTIONS_PEOPLE_TILE);
        PeopleSpaceTile tile = bundle.getParcelable(OPTIONS_PEOPLE_TILE);
        assertThat(tile.getNotificationKey()).isEqualTo(null);
        assertThat(tile.getNotificationKey()).isEqualTo(null);
        assertThat(tile.getLastInteractionTimestamp()).isLessThan(
                timestampBeforeNotificationClear);
        assertThat(tile.getNotificationContent()).isEqualTo(null);
        assertThat(tile.getNotificationContent()).isEqualTo(null);
        assertThat(tile.getNotificationDataUri()).isEqualTo(null);
        assertThat(tile.getNotificationDataUri()).isEqualTo(null);
        verify(mAppWidgetManager, times(2)).updateAppWidget(eq(WIDGET_ID_WITH_SHORTCUT),
        verify(mAppWidgetManager, times(2)).updateAppWidget(eq(WIDGET_ID_WITH_SHORTCUT),
                any());
                any());
    }
    }



    @Test
    @Test
    public void testAddThenReconfigureWidgetsUpdatesStorageCacheAndListeners()
    public void testAddThenReconfigureWidgetsUpdatesStorageCacheAndListeners()
            throws Exception {
            throws Exception {
@@ -1596,6 +1600,7 @@ public class PeopleSpaceWidgetManagerTest extends SysuiTestCase {
                .setNotification(notification)
                .setNotification(notification)
                .setPkg(TEST_PACKAGE_A)
                .setPkg(TEST_PACKAGE_A)
                .setUid(0)
                .setUid(0)
                .setPostTime(SBN_POST_TIME)
                .setUser(new UserHandle(0))
                .setUser(new UserHandle(0))
                .build();
                .build();
    }
    }
+13 −2
Original line number Original line Diff line number Diff line
@@ -1149,11 +1149,11 @@ public class DataManager {
                if (conversationInfo == null) {
                if (conversationInfo == null) {
                    return;
                    return;
                }
                }
                if (DEBUG) Log.d(TAG, "Last event from notification: " + sbn.getPostTime());
                ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
                ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
                        .setLastEventTimestamp(sbn.getPostTime())
                        .setLastEventTimestamp(sbn.getPostTime())
                        .setParentNotificationChannelId(sbn.getNotification().getChannelId())
                        .setParentNotificationChannelId(sbn.getNotification().getChannelId())
                        .build();
                        .build();
                // Don't update listeners on notifications posted.
                packageData.getConversationStore().addOrUpdate(updated);
                packageData.getConversationStore().addOrUpdate(updated);


                EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
                EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
@@ -1186,9 +1186,19 @@ public class DataManager {
            if (reason != REASON_CLICK || packageData == null) {
            if (reason != REASON_CLICK || packageData == null) {
                return;
                return;
            }
            }
            long currentTime = System.currentTimeMillis();
            ConversationInfo conversationInfo = packageData.getConversationInfo(shortcutId);
            if (conversationInfo == null) {
                return;
            }
            if (DEBUG) Log.d(TAG, "Last event from notification removed: " + currentTime);
            ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
                    .setLastEventTimestamp(currentTime)
                    .build();
            packageData.getConversationStore().addOrUpdate(updated);

            EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
            EventHistoryImpl eventHistory = packageData.getEventStore().getOrCreateEventHistory(
                    EventStore.CATEGORY_SHORTCUT_BASED, shortcutId);
                    EventStore.CATEGORY_SHORTCUT_BASED, shortcutId);
            long currentTime = System.currentTimeMillis();
            eventHistory.addEvent(new Event(currentTime, Event.TYPE_NOTIFICATION_OPENED));
            eventHistory.addEvent(new Event(currentTime, Event.TYPE_NOTIFICATION_OPENED));
        }
        }


@@ -1265,6 +1275,7 @@ public class DataManager {
        public void onEvent(PackageData packageData, ConversationInfo conversationInfo,
        public void onEvent(PackageData packageData, ConversationInfo conversationInfo,
                Event event) {
                Event event) {
            if (event.getType() == Event.TYPE_IN_APP_CONVERSATION) {
            if (event.getType() == Event.TYPE_IN_APP_CONVERSATION) {
                if (DEBUG) Log.d(TAG, "Last event from in-app: " + event.getTimestamp());
                ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
                ConversationInfo updated = new ConversationInfo.Builder(conversationInfo)
                        .setLastEventTimestamp(event.getTimestamp())
                        .setLastEventTimestamp(event.getTimestamp())
                        .build();
                        .build();
+21 −1
Original line number Original line Diff line number Diff line
@@ -693,7 +693,6 @@ public final class DataManagerTest {
        NotificationListenerService listenerService =
        NotificationListenerService listenerService =
                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
        listenerService.onNotificationPosted(mStatusBarNotification);
        listenerService.onNotificationPosted(mStatusBarNotification);

        ConversationChannel result = mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
        ConversationChannel result = mDataManager.getConversation(TEST_PKG_NAME, USER_ID_PRIMARY,
                TEST_SHORTCUT_ID);
                TEST_SHORTCUT_ID);


@@ -1360,6 +1359,27 @@ public final class DataManagerTest {
        assertTrue(result.isEmpty());
        assertTrue(result.isEmpty());
    }
    }


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

        ShortcutInfo shortcut = buildShortcutInfo(TEST_PKG_NAME, USER_ID_PRIMARY, TEST_SHORTCUT_ID,
                buildPerson());
        shortcut.setCached(ShortcutInfo.FLAG_CACHED_NOTIFICATIONS);
        mDataManager.addOrUpdateConversationInfo(shortcut);

        NotificationListenerService listenerService =
                mDataManager.getNotificationListenerServiceForTesting(USER_ID_PRIMARY);
        listenerService.onNotificationPosted(mStatusBarNotification);
        listenerService.onNotificationRemoved(mStatusBarNotification, null,
                NotificationListenerService.REASON_CANCEL);

        ConversationInfo conversationInfo = mDataManager.getPackage(TEST_PKG_NAME, USER_ID_PRIMARY)
                .getConversationStore()
                .getConversation(TEST_SHORTCUT_ID);
        assertEquals(conversationInfo.getLastEventTimestamp(), System.currentTimeMillis());
    }

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