diff options
| author | 2025-03-11 23:35:46 -0700 | |
|---|---|---|
| committer | 2025-03-11 23:35:46 -0700 | |
| commit | af3cc597c5b146cb719639e6a94e0e8888ea2f84 (patch) | |
| tree | 77317ca813236ca7626d7316cce759c8ce820b35 | |
| parent | 5f8775bbe5c16363f1298ea1ca10056faf28f709 (diff) | |
| parent | 86d8fc9cf6b61c1d7f2c1add372de09d9e853a11 (diff) | |
Merge "Replace getCreationTime clock with elapsedRealtime" into main
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; |