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

Commit 86d8fc9c authored by Nate Myren's avatar Nate Myren
Browse files

Replace getCreationTime clock with elapsedRealtime

It is only used by PreperationCoordinator, with an expected time
difference of under 500ms, so the difference should have no effect
there. It allows us to use the creation Time when determining how old an
OTP notification actually is, and compare that with the wall clock
getWhen. Other uses only rely on uptimeMillis increasing monotonically,
which elapsedRealtime does as well.

Bug: 401173968
Test: atest DeviceProvisionedCoordinatorTest NotificationEntryTest
VisualStabilityCoordinatorTest
Flag: android.app.notif_entry_creation_time_use_elapsed_realtime

Change-Id: Id351090b0b4d6538da1dd8de305d43f8db7374ba
parent da458dd4
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -273,6 +273,15 @@ flag {
    purpose: PURPOSE_BUGFIX
  }
 }
flag {
  name: "notif_entry_creation_time_use_elapsed_realtime"
  namespace: "systemui"
  description: "makes the notification entry expect its creation time to be elapsedRealtime, not uptimeMillis"
  bug: "343631648"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

flag {
  name: "api_rich_ongoing"
+9 −4
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.systemui.res.R;
import com.android.systemui.statusbar.RankingBuilder;
import com.android.systemui.statusbar.SbnBuilder;
import com.android.systemui.statusbar.chips.notification.shared.StatusBarNotifChips;
import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime;
import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUi;
import com.android.systemui.util.time.FakeSystemClock;

@@ -151,7 +152,8 @@ public class NotificationEntryTest extends SysuiTestCase {
                .build();

        NotificationEntry entry =
                new NotificationEntry(sbn, ranking, mClock.uptimeMillis());
                new NotificationEntry(sbn, ranking,
                        UseElapsedRealtimeForCreationTime.getCurrentTime(mClock));

        assertFalse(entry.isBlockable());
    }
@@ -251,7 +253,8 @@ public class NotificationEntryTest extends SysuiTestCase {
                .build();

        NotificationEntry entry =
                new NotificationEntry(sbn, ranking, mClock.uptimeMillis());
                new NotificationEntry(sbn, ranking,
                        UseElapsedRealtimeForCreationTime.getCurrentTime(mClock));

        assertEquals(systemGeneratedSmartActions, entry.getSmartActions());
        assertEquals(NOTIFICATION_CHANNEL, entry.getChannel());
@@ -365,7 +368,8 @@ public class NotificationEntryTest extends SysuiTestCase {
                .setKey(sbn.getKey())
                .build();
        NotificationEntry entry =
                new NotificationEntry(sbn, ranking, mClock.uptimeMillis());
                new NotificationEntry(sbn, ranking,
                        UseElapsedRealtimeForCreationTime.getCurrentTime(mClock));

        assertFalse(entry.isChannelVisibilityPrivate());
    }
@@ -378,7 +382,8 @@ public class NotificationEntryTest extends SysuiTestCase {
                .setKey(sbn.getKey())
                .build();
        NotificationEntry entry =
                new NotificationEntry(sbn, ranking, mClock.uptimeMillis());
                new NotificationEntry(sbn, ranking,
                        UseElapsedRealtimeForCreationTime.getCurrentTime(mClock));

        assertFalse(entry.isChannelVisibilityPrivate());
    }
+21 −5
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import com.android.systemui.statusbar.notification.collection.GroupEntry
import com.android.systemui.statusbar.notification.collection.GroupEntryBuilder
import com.android.systemui.statusbar.notification.collection.NotificationEntry
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder
import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifStabilityManager
import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.Pluggable.PluggableListener
import com.android.systemui.statusbar.notification.collection.notifPipeline
@@ -323,7 +324,10 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
            setPulsing(true)

            // WHEN we temporarily allow section changes for this notification entry
            underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
            underTest.temporarilyAllowSectionChanges(
                entry,
                UseElapsedRealtimeForCreationTime.getCurrentTime(fakeSystemClock),
            )

            // THEN group changes aren't allowed
            assertThat(notifStabilityManager.isGroupChangeAllowed(entry)).isFalse()
@@ -349,7 +353,10 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
            setPulsing(false)

            // WHEN we temporarily allow section changes for this notification entry
            underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.uptimeMillis())
            underTest.temporarilyAllowSectionChanges(
                entry,
                UseElapsedRealtimeForCreationTime.getCurrentTime(fakeSystemClock),
            )

            // THEN the notification list is invalidated
            verifyStabilityManagerWasInvalidated(times(1))
@@ -365,7 +372,10 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
            setPulsing(false)

            // WHEN we temporarily allow section changes for this notification entry
            underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
            underTest.temporarilyAllowSectionChanges(
                entry,
                UseElapsedRealtimeForCreationTime.getCurrentTime(fakeSystemClock),
            )

            // THEN invalidate is not called because this entry was never suppressed from reordering
            verifyStabilityManagerWasInvalidated(never())
@@ -382,7 +392,10 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
            assertThat(notifStabilityManager.isSectionChangeAllowed(entry)).isTrue()

            // WHEN we temporarily allow section changes for this notification entry
            underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
            underTest.temporarilyAllowSectionChanges(
                entry,
                UseElapsedRealtimeForCreationTime.getCurrentTime(fakeSystemClock),
            )

            // THEN invalidate is not called because this entry was never suppressed from
            // reordering;
@@ -415,7 +428,10 @@ class VisualStabilityCoordinatorTest(flags: FlagsParameterization) : SysuiTestCa
            setPulsing(true)

            // WHEN we temporarily allow section changes for this notification entry
            underTest.temporarilyAllowSectionChanges(entry, fakeSystemClock.currentTimeMillis())
            underTest.temporarilyAllowSectionChanges(
                entry,
                UseElapsedRealtimeForCreationTime.getCurrentTime(fakeSystemClock),
            )
            // can now reorder, so invalidates
            verifyStabilityManagerWasInvalidated(times(1))

+4 −2
Original line number Diff line number Diff line
@@ -47,7 +47,6 @@ import android.database.ExecutorContentObserver;
import android.net.Uri;
import android.os.Looper;
import android.os.Process;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -78,6 +77,7 @@ import com.android.systemui.scene.shared.flag.SceneContainerFlag;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime;
import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
import com.android.systemui.statusbar.notification.row.shared.LockscreenOtpRedaction;
@@ -920,7 +920,9 @@ public class NotificationLockscreenUserManagerImpl implements
    // notification's "when" time, or the notification entry creation time
    private long getEarliestNotificationTime(NotificationEntry notif) {
        long notifWhenWallClock = notif.getSbn().getNotification().getWhen();
        long creationTimeDelta = SystemClock.uptimeMillis() - notif.getCreationTime();
        long creationTimeDelta = UseElapsedRealtimeForCreationTime.getCurrentTime()
                - notif.getCreationTime();

        long creationTimeWallClock = System.currentTimeMillis() - creationTimeDelta;
        return Math.min(notifWhenWallClock, creationTimeWallClock);
    }
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ public abstract class ListEntry extends PipelineEntry {
    }

    /**
     * The SystemClock.uptimeMillis() when this object was created. In general, this means the
     * The SystemClock.elapsedRealtime() when this object was created. In general, this means the
     * moment when NotificationManager notifies our listener about the existence of this entry.
     *
     * This value will not change if the notification is updated, although it will change if the
Loading