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

Commit c5712240 authored by Julia Tuttle's avatar Julia Tuttle Committed by Android (Google) Code Review
Browse files

Merge "Inject more into NotificationInterruptStateProviderImpl" into main

parents 050a9f61 14a03f24
Loading
Loading
Loading
Loading
+22 −18
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.systemui.statusbar.notification.interruption;

import static android.provider.Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED;
import static android.provider.Settings.Global.HEADS_UP_OFF;

import static com.android.systemui.statusbar.StatusBarState.SHADE;
import static com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent.FSI_SUPPRESSED_NO_HUN_OR_KEYGUARD;
import static com.android.systemui.statusbar.notification.interruption.NotificationInterruptStateProviderImpl.NotificationInterruptEvent.FSI_SUPPRESSED_SUPPRESSIVE_BUBBLE_METADATA;
@@ -24,12 +27,10 @@ import static com.android.systemui.statusbar.notification.interruption.Notificat

import android.app.Notification;
import android.app.NotificationManager;
import android.content.ContentResolver;
import android.database.ContentObserver;
import android.hardware.display.AmbientDisplayConfiguration;
import android.os.Handler;
import android.os.PowerManager;
import android.provider.Settings;
import android.service.notification.StatusBarNotification;

import androidx.annotation.NonNull;
@@ -48,6 +49,8 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.time.SystemClock;

import java.util.ArrayList;
import java.util.List;
@@ -66,7 +69,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
    private final List<NotificationInterruptSuppressor> mSuppressors = new ArrayList<>();
    private final StatusBarStateController mStatusBarStateController;
    private final KeyguardStateController mKeyguardStateController;
    private final ContentResolver mContentResolver;
    private final PowerManager mPowerManager;
    private final AmbientDisplayConfiguration mAmbientDisplayConfiguration;
    private final BatteryController mBatteryController;
@@ -77,6 +79,8 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
    private final UiEventLogger mUiEventLogger;
    private final UserTracker mUserTracker;
    private final DeviceProvisionedController mDeviceProvisionedController;
    private final SystemClock mSystemClock;
    private final GlobalSettings mGlobalSettings;

    @VisibleForTesting
    protected boolean mUseHeadsUp = false;
@@ -111,7 +115,6 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter

    @Inject
    public NotificationInterruptStateProviderImpl(
            ContentResolver contentResolver,
            PowerManager powerManager,
            AmbientDisplayConfiguration ambientDisplayConfiguration,
            BatteryController batteryController,
@@ -124,8 +127,9 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
            KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
            UiEventLogger uiEventLogger,
            UserTracker userTracker,
            DeviceProvisionedController deviceProvisionedController) {
        mContentResolver = contentResolver;
            DeviceProvisionedController deviceProvisionedController,
            SystemClock systemClock,
            GlobalSettings globalSettings) {
        mPowerManager = powerManager;
        mBatteryController = batteryController;
        mAmbientDisplayConfiguration = ambientDisplayConfiguration;
@@ -137,15 +141,16 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
        mKeyguardNotificationVisibilityProvider = keyguardNotificationVisibilityProvider;
        mUiEventLogger = uiEventLogger;
        mUserTracker = userTracker;
        mDeviceProvisionedController = deviceProvisionedController;
        mSystemClock = systemClock;
        mGlobalSettings = globalSettings;
        ContentObserver headsUpObserver = new ContentObserver(mainHandler) {
            @Override
            public void onChange(boolean selfChange) {
                boolean wasUsing = mUseHeadsUp;
                mUseHeadsUp = ENABLE_HEADS_UP
                        && Settings.Global.HEADS_UP_OFF != Settings.Global.getInt(
                        mContentResolver,
                        Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
                        Settings.Global.HEADS_UP_OFF);
                final boolean wasUsing = mUseHeadsUp;
                final boolean settingEnabled = HEADS_UP_OFF
                        != mGlobalSettings.getInt(HEADS_UP_NOTIFICATIONS_ENABLED, HEADS_UP_OFF);
                mUseHeadsUp = ENABLE_HEADS_UP && settingEnabled;
                mLogger.logHeadsUpFeatureChanged(mUseHeadsUp);
                if (wasUsing != mUseHeadsUp) {
                    if (!mUseHeadsUp) {
@@ -157,16 +162,15 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
        };

        if (ENABLE_HEADS_UP) {
            mContentResolver.registerContentObserver(
                    Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED),
            mGlobalSettings.registerContentObserver(
                    mGlobalSettings.getUriFor(HEADS_UP_NOTIFICATIONS_ENABLED),
                    true,
                    headsUpObserver);
            mContentResolver.registerContentObserver(
                    Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
            mGlobalSettings.registerContentObserver(
                    mGlobalSettings.getUriFor(SETTING_HEADS_UP_TICKER), true,
                    headsUpObserver);
        }
        headsUpObserver.onChange(true); // set up
        mDeviceProvisionedController = deviceProvisionedController;
    }

    @Override
@@ -603,7 +607,7 @@ public class NotificationInterruptStateProviderImpl implements NotificationInter
        }

        final long when = notification.when;
        final long now = System.currentTimeMillis();
        final long now = mSystemClock.currentTimeMillis();
        final long age = now - when;

        if (age < MAX_HUN_WHEN_AGE_MS) {
+13 −3
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
import static android.app.NotificationManager.VISIBILITY_NO_OVERRIDE;
import static android.provider.Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED;
import static android.provider.Settings.Global.HEADS_UP_ON;

import static com.android.systemui.statusbar.NotificationEntryHelper.modifyRanking;
import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
@@ -74,6 +76,8 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.settings.FakeGlobalSettings;
import com.android.systemui.util.time.FakeSystemClock;

import org.junit.Before;
import org.junit.Test;
@@ -120,6 +124,8 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
    UserTracker mUserTracker;
    @Mock
    DeviceProvisionedController mDeviceProvisionedController;
    FakeSystemClock mSystemClock;
    FakeGlobalSettings mGlobalSettings;

    private NotificationInterruptStateProviderImpl mNotifInterruptionStateProvider;

@@ -129,10 +135,12 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
        when(mUserTracker.getUserId()).thenReturn(ActivityManager.getCurrentUser());

        mUiEventLoggerFake = new UiEventLoggerFake();
        mSystemClock = new FakeSystemClock();
        mGlobalSettings = new FakeGlobalSettings();
        mGlobalSettings.putInt(HEADS_UP_NOTIFICATIONS_ENABLED, HEADS_UP_ON);

        mNotifInterruptionStateProvider =
                new NotificationInterruptStateProviderImpl(
                        mContext.getContentResolver(),
                        mPowerManager,
                        mAmbientDisplayConfiguration,
                        mBatteryController,
@@ -145,7 +153,9 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
                        mKeyguardNotificationVisibilityProvider,
                        mUiEventLoggerFake,
                        mUserTracker,
                        mDeviceProvisionedController);
                        mDeviceProvisionedController,
                        mSystemClock,
                        mGlobalSettings);
        mNotifInterruptionStateProvider.mUseHeadsUp = true;
    }

@@ -426,7 +436,7 @@ public class NotificationInterruptStateProviderImplTest extends SysuiTestCase {
    }

    private long makeWhenHoursAgo(long hoursAgo) {
        return System.currentTimeMillis() - (1000 * 60 * 60 * hoursAgo);
        return mSystemClock.currentTimeMillis() - (1000 * 60 * 60 * hoursAgo);
    }

    @Test
+3 −2
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ class NotificationInterruptStateProviderWrapperTest : VisualInterruptionDecision
        get() =
            NotificationInterruptStateProviderWrapper(
                NotificationInterruptStateProviderImpl(
                        context.contentResolver,
                        powerManager,
                        ambientDisplayConfiguration,
                        batteryController,
@@ -52,7 +51,9 @@ class NotificationInterruptStateProviderWrapperTest : VisualInterruptionDecision
                        keyguardNotificationVisibilityProvider,
                        uiEventLogger,
                        userTracker,
                        deviceProvisionedController
                        deviceProvisionedController,
                        systemClock,
                        globalSettings,
                    )
                    .also { it.mUseHeadsUp = true }
            )
+8 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import android.graphics.drawable.Icon
import android.hardware.display.FakeAmbientDisplayConfiguration
import android.os.Handler
import android.os.PowerManager
import android.provider.Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED
import android.provider.Settings.Global.HEADS_UP_ON
import com.android.internal.logging.testing.UiEventLoggerFake
import com.android.systemui.SysuiTestCase
import com.android.systemui.res.R
@@ -47,6 +49,8 @@ import com.android.systemui.statusbar.policy.HeadsUpManager
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.mock
import com.android.systemui.util.settings.FakeGlobalSettings
import com.android.systemui.util.time.FakeSystemClock
import com.android.systemui.utils.leaks.FakeBatteryController
import com.android.systemui.utils.leaks.LeakCheckedTest
import junit.framework.Assert.assertTrue
@@ -61,6 +65,7 @@ abstract class VisualInterruptionDecisionProviderTestBase : SysuiTestCase() {
    protected val batteryController = FakeBatteryController(leakCheck)
    protected val deviceProvisionedController: DeviceProvisionedController = mock()
    protected val flags: NotifPipelineFlags = mock()
    protected val globalSettings = FakeGlobalSettings()
    protected val headsUpManager: HeadsUpManager = mock()
    protected val keyguardNotificationVisibilityProvider: KeyguardNotificationVisibilityProvider =
        mock()
@@ -69,6 +74,7 @@ abstract class VisualInterruptionDecisionProviderTestBase : SysuiTestCase() {
    protected val mainHandler: Handler = mock()
    protected val powerManager: PowerManager = mock()
    protected val statusBarStateController = FakeStatusBarStateController()
    protected val systemClock = FakeSystemClock()
    protected val uiEventLogger = UiEventLoggerFake()
    protected val userTracker = FakeUserTracker()

@@ -76,6 +82,8 @@ abstract class VisualInterruptionDecisionProviderTestBase : SysuiTestCase() {

    @Before
    fun setUp() {
        globalSettings.putInt(HEADS_UP_NOTIFICATIONS_ENABLED, HEADS_UP_ON)

        val user = UserInfo(ActivityManager.getCurrentUser(), "Current user", /* flags = */ 0)
        userTracker.set(listOf(user), /* currentUserIndex = */ 0)

+20 −9
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK;
import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
import static android.provider.Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED;
import static android.provider.Settings.Global.HEADS_UP_ON;

import static com.android.systemui.statusbar.StatusBarState.KEYGUARD;
import static com.android.systemui.statusbar.StatusBarState.SHADE;
@@ -51,7 +53,6 @@ import android.app.NotificationChannel;
import android.app.WallpaperManager;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.IntentFilter;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.display.AmbientDisplayConfiguration;
@@ -180,11 +181,16 @@ import com.android.systemui.util.WallpaperController;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.MessageRouterImpl;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.settings.FakeGlobalSettings;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.systemui.util.time.SystemClock;
import com.android.systemui.volume.VolumeComponent;
import com.android.wm.shell.bubbles.Bubbles;
import com.android.wm.shell.startingsurface.StartingSurface;

import dagger.Lazy;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -198,8 +204,6 @@ import java.util.Optional;

import javax.inject.Provider;

import dagger.Lazy;

@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper(setAsMainLooper = true)
@@ -319,6 +323,7 @@ public class CentralSurfacesImplTest extends SysuiTestCase {

    private ShadeController mShadeController;
    private final FakeSystemClock mFakeSystemClock = new FakeSystemClock();
    private final FakeGlobalSettings mFakeGlobalSettings = new FakeGlobalSettings();
    private final FakeExecutor mMainExecutor = new FakeExecutor(mFakeSystemClock);
    private final FakeExecutor mUiBgExecutor = new FakeExecutor(mFakeSystemClock);
    private final FakeFeatureFlags mFeatureFlags = new FakeFeatureFlags();
@@ -349,8 +354,10 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
        mPowerManager = new PowerManager(mContext, mPowerManagerService, thermalService,
                Handler.createAsync(Looper.myLooper()));

        mFakeGlobalSettings.putInt(HEADS_UP_NOTIFICATIONS_ENABLED, HEADS_UP_ON);

        mNotificationInterruptStateProvider =
                new TestableNotificationInterruptStateProviderImpl(mContext.getContentResolver(),
                new TestableNotificationInterruptStateProviderImpl(
                        mPowerManager,
                        mAmbientDisplayConfiguration,
                        mStatusBarStateController,
@@ -363,7 +370,9 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                        mock(KeyguardNotificationVisibilityProvider.class),
                        mock(UiEventLogger.class),
                        mUserTracker,
                        mDeviceProvisionedController);
                        mDeviceProvisionedController,
                        mFakeSystemClock,
                        mFakeGlobalSettings);

        mContext.addMockSystemService(TrustManager.class, mock(TrustManager.class));
        mContext.addMockSystemService(FingerprintManager.class, mock(FingerprintManager.class));
@@ -1162,7 +1171,6 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
            NotificationInterruptStateProviderImpl {

        TestableNotificationInterruptStateProviderImpl(
                ContentResolver contentResolver,
                PowerManager powerManager,
                AmbientDisplayConfiguration ambientDisplayConfiguration,
                StatusBarStateController controller,
@@ -1175,9 +1183,10 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                KeyguardNotificationVisibilityProvider keyguardNotificationVisibilityProvider,
                UiEventLogger uiEventLogger,
                UserTracker userTracker,
                DeviceProvisionedController deviceProvisionedController) {
                DeviceProvisionedController deviceProvisionedController,
                SystemClock systemClock,
                GlobalSettings globalSettings) {
            super(
                    contentResolver,
                    powerManager,
                    ambientDisplayConfiguration,
                    batteryController,
@@ -1190,7 +1199,9 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
                    keyguardNotificationVisibilityProvider,
                    uiEventLogger,
                    userTracker,
                    deviceProvisionedController
                    deviceProvisionedController,
                    systemClock,
                    globalSettings
            );
            mUseHeadsUp = true;
        }
Loading