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

Commit 32247a09 authored by Julia Tuttle's avatar Julia Tuttle
Browse files

Inject SystemClock into HeadsUpManager et al

Bug: 315192399
Test: atest AlertingNotificationManagerTest
Test: atest BaseHeadsUpManagerTest
Test: atest HeadsUpManagerPhoneTest
Flag: NA
Change-Id: I268a07106213e85b85ddd0fcf16dcf7613cd2529
parent 310f5df7
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.systemui.statusbar;
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.dagger.qualifiers.Main;
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 @@ import java.util.stream.Stream;
 */
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 @@ public abstract class AlertingNotificationManager {
    @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 abstract class AlertingNotificationManager {
    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 abstract class AlertingNotificationManager {
        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 @@ public abstract class AlertingNotificationManager {
         * @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 @@ public abstract class AlertingNotificationManager {
            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 @@ public abstract class AlertingNotificationManager {
         * @return the post time
         */
        protected long calculatePostTime() {
            return mClock.currentTimeMillis();
            return mSystemClock.elapsedRealtime();
        }

        /**
@@ -373,10 +375,4 @@ public abstract class AlertingNotificationManager {
            return 0;
        }
    }

    protected final static class Clock {
        public long currentTimeMillis() {
            return SystemClock.elapsedRealtime();
        }
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;
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 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp
            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 @@ public class HeadsUpManagerPhone extends BaseHeadsUpManager implements OnHeadsUp
    @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() {
+6 −5
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.Context;
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.collection.NotificationEntry;
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 @@ public abstract class BaseHeadsUpManager extends AlertingNotificationManager imp
            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 @@ public abstract class BaseHeadsUpManager extends AlertingNotificationManager imp
        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 @@ public abstract class BaseHeadsUpManager extends AlertingNotificationManager imp
            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 @@ public abstract class BaseHeadsUpManager extends AlertingNotificationManager imp
    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);
+6 −3
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntryB
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 @@ public class AlertingNotificationManagerTest extends SysuiTestCase {

    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 @@ public class AlertingNotificationManagerTest extends SysuiTestCase {
    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 @@ public class AlertingNotificationManagerTest extends SysuiTestCase {
    }

    protected AlertingNotificationManager createAlertingNotificationManager() {
        return new TestableAlertingNotificationManager(mTestHandler);
        return new TestableAlertingNotificationManager(mTestHandler, mSystemClock);
    }

    protected StatusBarNotification createSbn(int id, Notification n) {
+4 −0
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import com.android.systemui.statusbar.policy.HeadsUpManager;
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 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest {
                ConfigurationController configurationController,
                Handler handler,
                GlobalSettings globalSettings,
                SystemClock systemClock,
                AccessibilityManagerWrapper accessibilityManagerWrapper,
                UiEventLogger uiEventLogger,
                JavaAdapter javaAdapter,
@@ -104,6 +106,7 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest {
                    configurationController,
                    handler,
                    globalSettings,
                    systemClock,
                    accessibilityManagerWrapper,
                    uiEventLogger,
                    javaAdapter,
@@ -125,6 +128,7 @@ public class HeadsUpManagerPhoneTest extends AlertingNotificationManagerTest {
                mConfigurationController,
                mTestHandler,
                mGlobalSettings,
                mSystemClock,
                mAccessibilityManagerWrapper,
                mUiEventLogger,
                mJavaAdapter,
Loading