Inject SystemClock into HeadsUpManager et al
Bug: 315192399
Test: atest AlertingNotificationManagerTest
Test: atest BaseHeadsUpManagerTest
Test: atest HeadsUpManagerPhoneTest
Flag: NA
Change-Id: I268a07106213e85b85ddd0fcf16dcf7613cd2529
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
index dddc895..d23c85a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AlertingNotificationManager.java
@@ -19,7 +19,6 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.os.Handler;
-import android.os.SystemClock;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.view.accessibility.AccessibilityEvent;
@@ -29,6 +28,7 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
import com.android.systemui.statusbar.policy.HeadsUpManagerLogger;
+import com.android.systemui.util.time.SystemClock;
import java.util.stream.Stream;
@@ -39,7 +39,7 @@
*/
public abstract class AlertingNotificationManager {
private static final String TAG = "AlertNotifManager";
- protected final Clock mClock = new Clock();
+ protected final SystemClock mSystemClock;
protected final ArrayMap<String, AlertEntry> mAlertEntries = new ArrayMap<>();
protected final HeadsUpManagerLogger mLogger;
@@ -49,9 +49,11 @@
@VisibleForTesting
public Handler mHandler;
- public AlertingNotificationManager(HeadsUpManagerLogger logger, @Main Handler handler) {
+ public AlertingNotificationManager(HeadsUpManagerLogger logger, @Main Handler handler,
+ SystemClock systemClock) {
mLogger = logger;
mHandler = handler;
+ mSystemClock = systemClock;
}
/**
@@ -251,7 +253,7 @@
public long getEarliestRemovalTime(String key) {
AlertEntry alerting = mAlertEntries.get(key);
if (alerting != null) {
- return Math.max(0, alerting.mEarliestRemovalTime - mClock.currentTimeMillis());
+ return Math.max(0, alerting.mEarliestRemovalTime - mSystemClock.elapsedRealtime());
}
return 0;
}
@@ -283,7 +285,7 @@
public void updateEntry(boolean updatePostTime, @Nullable String reason) {
mLogger.logUpdateEntry(mEntry, updatePostTime, reason);
- final long now = mClock.currentTimeMillis();
+ final long now = mSystemClock.elapsedRealtime();
mEarliestRemovalTime = now + mMinimumDisplayTime;
if (updatePostTime) {
@@ -318,7 +320,7 @@
* @return true if the notification has been on screen long enough
*/
public boolean wasShownLongEnough() {
- return mEarliestRemovalTime < mClock.currentTimeMillis();
+ return mEarliestRemovalTime < mSystemClock.elapsedRealtime();
}
@Override
@@ -351,7 +353,7 @@
if (mRemoveAlertRunnable != null) {
removeAutoRemovalCallbacks("removeAsSoonAsPossible (will be rescheduled)");
- final long timeLeft = mEarliestRemovalTime - mClock.currentTimeMillis();
+ final long timeLeft = mEarliestRemovalTime - mSystemClock.elapsedRealtime();
mHandler.postDelayed(mRemoveAlertRunnable, timeLeft);
}
}
@@ -361,7 +363,7 @@
* @return the post time
*/
protected long calculatePostTime() {
- return mClock.currentTimeMillis();
+ return mSystemClock.elapsedRealtime();
}
/**
@@ -373,10 +375,4 @@
return 0;
}
}
-
- protected final static class Clock {
- public long currentTimeMillis() {
- return SystemClock.elapsedRealtime();
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
index 2ecb510..644c896 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhone.java
@@ -50,6 +50,7 @@
import com.android.systemui.statusbar.policy.OnHeadsUpPhoneListenerChange;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.time.SystemClock;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -117,11 +118,13 @@
ConfigurationController configurationController,
@Main Handler handler,
GlobalSettings globalSettings,
+ SystemClock systemClock,
AccessibilityManagerWrapper accessibilityManagerWrapper,
UiEventLogger uiEventLogger,
JavaAdapter javaAdapter,
ShadeInteractor shadeInteractor) {
- super(context, logger, handler, globalSettings, accessibilityManagerWrapper, uiEventLogger);
+ super(context, logger, handler, globalSettings, systemClock, accessibilityManagerWrapper,
+ uiEventLogger);
Resources resources = mContext.getResources();
mExtensionTime = resources.getInteger(R.integer.ambient_notification_extension_time);
statusBarStateController.addCallback(mStatusBarStateListener);
@@ -208,7 +211,7 @@
@Override
public boolean shouldSwallowClick(@NonNull String key) {
BaseHeadsUpManager.HeadsUpEntry entry = getHeadsUpEntry(key);
- return entry != null && mClock.currentTimeMillis() < entry.mPostTime;
+ return entry != null && mSystemClock.elapsedRealtime() < entry.mPostTime;
}
public void onExpandingFinished() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
index ebfa2ae..8054b04 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BaseHeadsUpManager.java
@@ -25,7 +25,6 @@
import android.content.res.Resources;
import android.database.ContentObserver;
import android.os.Handler;
-import android.os.SystemClock;
import android.util.ArrayMap;
import android.view.accessibility.AccessibilityManager;
@@ -40,6 +39,7 @@
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag;
import com.android.systemui.util.ListenerSet;
import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.time.SystemClock;
import java.io.PrintWriter;
@@ -86,9 +86,10 @@
HeadsUpManagerLogger logger,
@Main Handler handler,
GlobalSettings globalSettings,
+ SystemClock systemClock,
AccessibilityManagerWrapper accessibilityManagerWrapper,
UiEventLogger uiEventLogger) {
- super(logger, handler);
+ super(logger, handler, systemClock);
mContext = context;
mAccessibilityMgr = accessibilityManagerWrapper;
mUiEventLogger = uiEventLogger;
@@ -234,7 +235,7 @@
final String key = snoozeKey(packageName, mUser);
Long snoozedUntil = mSnoozedPackages.get(key);
if (snoozedUntil != null) {
- if (snoozedUntil > mClock.currentTimeMillis()) {
+ if (snoozedUntil > mSystemClock.elapsedRealtime()) {
mLogger.logIsSnoozedReturned(key);
return true;
}
@@ -253,7 +254,7 @@
String packageName = entry.mEntry.getSbn().getPackageName();
String snoozeKey = snoozeKey(packageName, mUser);
mLogger.logPackageSnoozed(snoozeKey);
- mSnoozedPackages.put(snoozeKey, mClock.currentTimeMillis() + mSnoozeLengthMs);
+ mSnoozedPackages.put(snoozeKey, mSystemClock.elapsedRealtime() + mSnoozeLengthMs);
}
}
@@ -311,7 +312,7 @@
protected void dumpInternal(@NonNull PrintWriter pw, @NonNull String[] args) {
pw.print(" mTouchAcceptanceDelay="); pw.println(mTouchAcceptanceDelay);
pw.print(" mSnoozeLengthMs="); pw.println(mSnoozeLengthMs);
- pw.print(" now="); pw.println(mClock.currentTimeMillis());
+ pw.print(" now="); pw.println(mSystemClock.elapsedRealtime());
pw.print(" mUser="); pw.println(mUser);
for (AlertEntry entry: mAlertEntries.values()) {
pw.print(" HeadsUpEntry="); pw.println(entry.mEntry);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
index b5f39eb..a3cff87e6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/AlertingNotificationManagerTest.java
@@ -46,6 +46,8 @@
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.policy.HeadsUpManagerLogger;
import com.android.systemui.util.settings.FakeGlobalSettings;
+import com.android.systemui.util.time.SystemClock;
+import com.android.systemui.util.time.SystemClockImpl;
import org.junit.After;
import org.junit.Before;
@@ -76,6 +78,7 @@
protected Handler mTestHandler;
protected final FakeGlobalSettings mGlobalSettings = new FakeGlobalSettings();
+ protected final SystemClock mSystemClock = new SystemClockImpl();
protected boolean mTimedOut = false;
@Mock protected ExpandableNotificationRow mRow;
@@ -89,8 +92,8 @@
private static class TestableAlertingNotificationManager extends AlertingNotificationManager {
private AlertEntry mLastCreatedEntry;
- private TestableAlertingNotificationManager(Handler handler) {
- super(new HeadsUpManagerLogger(logcatLogBuffer()), handler);
+ private TestableAlertingNotificationManager(Handler handler, SystemClock systemClock) {
+ super(new HeadsUpManagerLogger(logcatLogBuffer()), handler, systemClock);
mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME;
mAutoDismissTime = TEST_AUTO_DISMISS_TIME;
mStickyForSomeTimeAutoDismissTime = TEST_STICKY_AUTO_DISMISS_TIME;
@@ -115,7 +118,7 @@
}
protected AlertingNotificationManager createAlertingNotificationManager() {
- return new TestableAlertingNotificationManager(mTestHandler);
+ return new TestableAlertingNotificationManager(mTestHandler, mSystemClock);
}
protected StatusBarNotification createSbn(int id, Notification n) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
index db0c125..37ee322 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/HeadsUpManagerPhoneTest.java
@@ -47,6 +47,7 @@
import com.android.systemui.statusbar.policy.HeadsUpManagerLogger;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.time.SystemClock;
import org.junit.After;
import org.junit.Before;
@@ -89,6 +90,7 @@
ConfigurationController configurationController,
Handler handler,
GlobalSettings globalSettings,
+ SystemClock systemClock,
AccessibilityManagerWrapper accessibilityManagerWrapper,
UiEventLogger uiEventLogger,
JavaAdapter javaAdapter,
@@ -104,6 +106,7 @@
configurationController,
handler,
globalSettings,
+ systemClock,
accessibilityManagerWrapper,
uiEventLogger,
javaAdapter,
@@ -125,6 +128,7 @@
mConfigurationController,
mTestHandler,
mGlobalSettings,
+ mSystemClock,
mAccessibilityManagerWrapper,
mUiEventLogger,
mJavaAdapter,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
index 05b755f..2940c39 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BaseHeadsUpManagerTest.java
@@ -57,6 +57,7 @@
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.collection.NotificationEntryBuilder;
import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.time.SystemClock;
import org.junit.After;
import org.junit.Before;
@@ -100,10 +101,11 @@
HeadsUpManagerLogger logger,
Handler handler,
GlobalSettings globalSettings,
+ SystemClock systemClock,
AccessibilityManagerWrapper accessibilityManagerWrapper,
UiEventLogger uiEventLogger) {
- super(context, logger, handler, globalSettings, accessibilityManagerWrapper,
- uiEventLogger);
+ super(context, logger, handler, globalSettings, systemClock,
+ accessibilityManagerWrapper, uiEventLogger);
mTouchAcceptanceDelay = TEST_TOUCH_ACCEPTANCE_TIME;
mMinimumDisplayTime = TEST_MINIMUM_DISPLAY_TIME;
mAutoDismissTime = TEST_AUTO_DISMISS_TIME;
@@ -182,7 +184,7 @@
private BaseHeadsUpManager createHeadsUpManager() {
return new TestableHeadsUpManager(mContext, mLogger, mTestHandler, mGlobalSettings,
- mAccessibilityMgr, mUiEventLoggerFake);
+ mSystemClock, mAccessibilityMgr, mUiEventLoggerFake);
}
@Override