summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2025-03-11 23:35:46 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2025-03-11 23:35:46 -0700
commitaf3cc597c5b146cb719639e6a94e0e8888ea2f84 (patch)
tree77317ca813236ca7626d7316cce759c8ce820b35
parent5f8775bbe5c16363f1298ea1ca10056faf28f709 (diff)
parent86d8fc9cf6b61c1d7f2c1add372de09d9e853a11 (diff)
Merge "Replace getCreationTime clock with elapsedRealtime" into main
-rw-r--r--core/java/android/app/notification.aconfig13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java13
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollectionCache.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/UseElapsedRealtimeForCreationTime.kt40
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/EventBatch.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifFilter.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java4
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java2
17 files changed, 113 insertions, 35 deletions
diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig
index 5891bddfbbe6..6f0eafe487af 100644
--- a/core/java/android/app/notification.aconfig
+++ b/core/java/android/app/notification.aconfig
@@ -269,7 +269,7 @@ flag {
namespace: "systemui"
description: "enables metrics when redacting notifications on the lockscreen"
bug: "343631648"
- metadata {
+ metadata {
purpose: PURPOSE_BUGFIX
}
}
@@ -279,7 +279,16 @@ flag {
namespace: "systemui"
description: "enables user expanding the public view of a notification"
bug: "398853084"
- metadata {
+ metadata {
+ 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
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
index 790b2c343a11..bfd700dcc302 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryTest.java
@@ -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());
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt
index ef0a4169d98e..d532010f4c55 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinatorTest.kt
@@ -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))
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
index 339f898be251..9bf3d5dfe4cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManagerImpl.java
@@ -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);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
index caa7abb1aa7a..6b6ac69733cc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListEntry.java
@@ -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
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
index 9795edf3313c..b7fe39e9c757 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java
@@ -522,7 +522,7 @@ public class NotifCollection implements Dumpable, PipelineDumpable {
}
private void onNotificationsInitialized() {
- mInitializedTimestamp = mClock.uptimeMillis();
+ mInitializedTimestamp = UseElapsedRealtimeForCreationTime.getCurrentTime(mClock);
}
private void postNotification(
@@ -532,7 +532,8 @@ public class NotifCollection implements Dumpable, PipelineDumpable {
if (entry == null) {
// A new notification!
- entry = new NotificationEntry(sbn, ranking, mClock.uptimeMillis());
+ entry = new NotificationEntry(sbn, ranking,
+ UseElapsedRealtimeForCreationTime.getCurrentTime(mClock));
mEventQueue.add(new InitEntryEvent(entry));
mEventQueue.add(new BindEntryEvent(entry, sbn));
mNotificationSet.put(sbn.getKey(), entry);
@@ -861,7 +862,7 @@ public class NotifCollection implements Dumpable, PipelineDumpable {
// messages from system server.
private void crashIfNotInitializing(RuntimeException exception) {
final boolean isRecentlyInitialized = mInitializedTimestamp == 0
- || mClock.uptimeMillis() - mInitializedTimestamp
+ || UseElapsedRealtimeForCreationTime.getCurrentTime(mClock) - mInitializedTimestamp
< INITIALIZATION_FORGIVENESS_WINDOW;
if (isRecentlyInitialized) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollectionCache.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollectionCache.kt
index 1f8d365cfdad..698fed33a408 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollectionCache.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollectionCache.kt
@@ -89,9 +89,9 @@ class NotifCollectionCache<V>(
return true
}
- // Using uptimeMillis since it's guaranteed to be monotonic, as we don't want a
+ // Using elapsedRealtime since it's guaranteed to be monotonic, as we don't want a
// timezone/clock change to break us
- val now = systemClock.uptimeMillis()
+ val now = UseElapsedRealtimeForCreationTime.getCurrentTime(systemClock)
// Cannot purge the same entry from two threads simultaneously
synchronized(key) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index d031d831bf5a..765d444a5c95 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -251,7 +251,7 @@ public final class NotificationEntry extends ListEntry {
/**
* @param sbn the StatusBarNotification from system server
* @param ranking also from system server
- * @param creationTime SystemClock.uptimeMillis of when we were created
+ * @param creationTime SystemClock.elapsedRealtime of when we were created
*/
public NotificationEntry(
@NonNull StatusBarNotification sbn,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
index 780e8f47a7fe..3110db65ca3e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java
@@ -573,7 +573,7 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
List<PipelineEntry> out,
List<NotifFilter> filters) {
Trace.beginSection("ShadeListBuilder.filterNotifs");
- final long now = mSystemClock.uptimeMillis();
+ final long now = UseElapsedRealtimeForCreationTime.getCurrentTime(mSystemClock);
for (PipelineEntry entry : entries) {
if (entry instanceof GroupEntry) {
final GroupEntry groupEntry = (GroupEntry) entry;
@@ -617,7 +617,8 @@ public class ShadeListBuilder implements Dumpable, PipelineDumpable {
GroupEntry group = mGroups.get(topLevelKey);
if (group == null) {
- group = new GroupEntry(topLevelKey, mSystemClock.uptimeMillis());
+ group = new GroupEntry(topLevelKey,
+ UseElapsedRealtimeForCreationTime.getCurrentTime(mSystemClock));
mGroups.put(topLevelKey, group);
}
if (group.getParent() == null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/UseElapsedRealtimeForCreationTime.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/UseElapsedRealtimeForCreationTime.kt
new file mode 100644
index 000000000000..23f90f3694a8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/UseElapsedRealtimeForCreationTime.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2025 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.systemui.statusbar.notification.collection
+
+import android.app.Flags
+import com.android.systemui.util.time.SystemClock
+
+/** A helper class for replacing uptimeMillis with elapsedRealtime for entry creation times */
+public object UseElapsedRealtimeForCreationTime {
+ @JvmStatic
+ fun getCurrentTime(clock: SystemClock): Long {
+ if (Flags.notifEntryCreationTimeUseElapsedRealtime()) {
+ return clock.elapsedRealtime()
+ }
+ return clock.uptimeMillis()
+ }
+
+ @JvmStatic
+ fun getCurrentTime(): Long {
+ if (Flags.notifEntryCreationTimeUseElapsedRealtime()) {
+ return android.os.SystemClock.elapsedRealtime()
+ }
+ return android.os.SystemClock.uptimeMillis()
+
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/EventBatch.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/EventBatch.java
index 2eec68b26347..fb7772e26240 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/EventBatch.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/EventBatch.java
@@ -25,7 +25,7 @@ import java.util.List;
* Represents a set of notification post events for a particular notification group.
*/
public class EventBatch {
- /** SystemClock.uptimeMillis() */
+ /** SystemClock.elapsedRealtime() */
final long mCreatedTimestamp;
/** SBN.getGroupKey -- same for all members */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
index 96b35428b3ce..944e313d795a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coalescer/GroupCoalescer.java
@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.NotificationListener;
import com.android.systemui.statusbar.NotificationListener.NotificationHandler;
import com.android.systemui.statusbar.notification.collection.PipelineDumpable;
import com.android.systemui.statusbar.notification.collection.PipelineDumper;
+import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.time.SystemClock;
@@ -182,11 +183,12 @@ public class GroupCoalescer implements Dumpable, PipelineDumpable {
private void maybeEmitBatch(StatusBarNotification sbn) {
final CoalescedEvent event = mCoalescedEvents.get(sbn.getKey());
final EventBatch batch = mBatches.get(sbn.getGroupKey());
+ long now = UseElapsedRealtimeForCreationTime.getCurrentTime(mClock);
if (event != null) {
mLogger.logEarlyEmit(sbn.getKey(), requireNonNull(event.getBatch()).mGroupKey);
emitBatch(requireNonNull(event.getBatch()));
} else if (batch != null
- && mClock.uptimeMillis() - batch.mCreatedTimestamp >= mMaxGroupLingerDuration) {
+ && now - batch.mCreatedTimestamp >= mMaxGroupLingerDuration) {
mLogger.logMaxBatchTimeout(sbn.getKey(), batch.mGroupKey);
emitBatch(batch);
}
@@ -228,7 +230,8 @@ public class GroupCoalescer implements Dumpable, PipelineDumpable {
private EventBatch getOrBuildBatch(final String groupKey) {
EventBatch batch = mBatches.get(groupKey);
if (batch == null) {
- batch = new EventBatch(mClock.uptimeMillis(), groupKey);
+ batch = new EventBatch(UseElapsedRealtimeForCreationTime.getCurrentTime(mClock),
+ groupKey);
mBatches.put(groupKey, batch);
}
return batch;
@@ -268,7 +271,8 @@ public class GroupCoalescer implements Dumpable, PipelineDumpable {
}
events.sort(mEventComparator);
- long batchAge = mClock.uptimeMillis() - batch.mCreatedTimestamp;
+ long batchAge = UseElapsedRealtimeForCreationTime.getCurrentTime(mClock)
+ - batch.mCreatedTimestamp;
mLogger.logEmitBatch(batch.mGroupKey, batch.mMembers.size(), batchAge);
mHandler.onNotificationBatchPosted(events);
@@ -298,7 +302,7 @@ public class GroupCoalescer implements Dumpable, PipelineDumpable {
@Override
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
- long now = mClock.uptimeMillis();
+ long now = UseElapsedRealtimeForCreationTime.getCurrentTime(mClock);
int eventCount = 0;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
index 27765635edcb..0466c0359710 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/VisualStabilityCoordinator.java
@@ -501,7 +501,7 @@ public class VisualStabilityCoordinator implements Coordinator, Dumpable {
* notification and we are reordering based on the user's change.
*
* @param entry notification entry that can change sections even if isReorderingAllowed is false
- * @param now current time SystemClock.uptimeMillis
+ * @param now current time SystemClock.elapsedRealtime
*/
public void temporarilyAllowSectionChanges(@NonNull NotificationEntry entry, long now) {
final String entryKey = entry.getKey();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
index 07fa6aeb7900..03b4076ba6fb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/inflation/OnUserInteractionCallbackImpl.java
@@ -20,7 +20,6 @@ import static android.service.notification.NotificationStats.DISMISS_SENTIMENT_N
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
-import android.os.SystemClock;
import android.service.notification.NotificationStats;
import androidx.annotation.NonNull;
@@ -30,6 +29,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.notification.collection.NotifCollection;
import com.android.systemui.statusbar.notification.collection.NotifCollection.CancellationReason;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime;
import com.android.systemui.statusbar.notification.collection.coordinator.VisualStabilityCoordinator;
import com.android.systemui.statusbar.notification.collection.notifcollection.DismissedByUserStats;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
@@ -85,7 +85,7 @@ public class OnUserInteractionCallbackImpl implements OnUserInteractionCallback
public void onImportanceChanged(NotificationEntry entry) {
mVisualStabilityCoordinator.temporarilyAllowSectionChanges(
entry,
- SystemClock.uptimeMillis());
+ UseElapsedRealtimeForCreationTime.getCurrentTime());
}
@NonNull
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifFilter.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifFilter.java
index 776c7d5eb7f6..389bb3129c8d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifFilter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/NotifFilter.java
@@ -41,8 +41,8 @@ public abstract class NotifFilter extends Pluggable<NotifFilter> {
* this entry will not have any grouping nor sorting information.
* If this filter is registered via {@link NotifPipeline#addFinalizeFilter},
* this entry will have grouping and sorting information.
- * @param now A timestamp in SystemClock.uptimeMillis that represents "now" for the purposes of
- * pipeline execution. This value will be the same for all pluggable calls made
+ * @param now A timestamp in SystemClock.elapsedRealtime that represents "now" for the purposes
+ * of pipeline execution. This value will be the same for all pluggable calls made
* during this pipeline run, giving pluggables a stable concept of "now" to compare
* various entries against.
* @return True if the notif should be removed from the list
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
index ec8fbc08de7a..5bdd769dfa03 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/logging/NotificationLogger.java
@@ -19,7 +19,6 @@ import android.content.Context;
import android.os.Handler;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemClock;
import android.service.notification.NotificationListenerService;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -44,6 +43,7 @@ import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.notification.collection.NotifLiveDataStore;
import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
+import com.android.systemui.statusbar.notification.collection.UseElapsedRealtimeForCreationTime;
import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener;
import com.android.systemui.statusbar.notification.collection.notifcollection.UpdateSource;
import com.android.systemui.statusbar.notification.collection.render.NotificationVisibilityProvider;
@@ -112,7 +112,7 @@ public class NotificationLogger implements StateListener, CoreStartable,
@Override
public void run() {
- mLastVisibilityReportUptimeMs = SystemClock.uptimeMillis();
+ mLastVisibilityReportUptimeMs = UseElapsedRealtimeForCreationTime.getCurrentTime();
// 1. Loop over active entries:
// A. Keep list of visible notifications.
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java
index 4efcada96a14..215df9d59ec9 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/collection/GroupEntryBuilder.java
@@ -58,7 +58,7 @@ public class GroupEntryBuilder {
return this;
}
- /** Sets the creation time. */
+ /** Sets the creation time. Should be SystemClock.elapsedRealtime */
public GroupEntryBuilder setCreationTime(long creationTime) {
mCreationTime = creationTime;
return this;