Loading packages/SystemUI/res/values/config.xml +3 −0 Original line number Original line Diff line number Diff line Loading @@ -482,4 +482,7 @@ --> --> <string name="config_rounded_mask" translatable="false">"M8,0C3.6,0,0,3.6,0,8"</string> <string name="config_rounded_mask" translatable="false">"M8,0C3.6,0,0,3.6,0,8"</string> <!-- Preferred refresh rate at keyguard, if supported by the display --> <integer name="config_keyguardRefreshRate">-1</integer> </resources> </resources> packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.InjectionInflationController; import java.io.FileDescriptor; import java.io.FileDescriptor; Loading Loading @@ -204,6 +205,8 @@ public class KeyguardViewMediator extends SystemUI { private AlarmManager mAlarmManager; private AlarmManager mAlarmManager; private AudioManager mAudioManager; private AudioManager mAudioManager; private StatusBarManager mStatusBarManager; private StatusBarManager mStatusBarManager; private final StatusBarWindowController mStatusBarWindowController = Dependency.get(StatusBarWindowController.class); private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); private boolean mSystemReady; private boolean mSystemReady; Loading Loading @@ -1779,6 +1782,7 @@ public class KeyguardViewMediator extends SystemUI { adjustStatusBarLocked(); adjustStatusBarLocked(); userActivity(); userActivity(); mUpdateMonitor.setKeyguardGoingAway(false /* away */); mUpdateMonitor.setKeyguardGoingAway(false /* away */); mStatusBarWindowController.setKeyguardGoingAway(false /* goingAway */); mShowKeyguardWakeLock.release(); mShowKeyguardWakeLock.release(); } } mKeyguardDisplayManager.show(); mKeyguardDisplayManager.show(); Loading Loading @@ -1811,6 +1815,7 @@ public class KeyguardViewMediator extends SystemUI { } } mUpdateMonitor.setKeyguardGoingAway(true /* goingAway */); mUpdateMonitor.setKeyguardGoingAway(true /* goingAway */); mStatusBarWindowController.setKeyguardGoingAway(true /* goingAway */); // Don't actually hide the Keyguard at the moment, wait for window // Don't actually hide the Keyguard at the moment, wait for window // manager until it tells us it's safe to do so with // manager until it tells us it's safe to do so with Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +55 −6 Original line number Original line Diff line number Diff line Loading @@ -29,7 +29,9 @@ import android.graphics.PixelFormat; import android.os.Binder; import android.os.Binder; import android.os.RemoteException; import android.os.RemoteException; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.Trace; import android.util.Log; import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.Gravity; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; Loading Loading @@ -57,6 +59,7 @@ import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.ArrayList; import java.util.Arrays; import javax.inject.Inject; import javax.inject.Inject; import javax.inject.Singleton; import javax.inject.Singleton; Loading @@ -76,6 +79,8 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private final WindowManager.LayoutParams mLpChanged; private final WindowManager.LayoutParams mLpChanged; private final boolean mKeyguardScreenRotation; private final boolean mKeyguardScreenRotation; private final long mLockScreenDisplayTimeout; private final long mLockScreenDisplayTimeout; private final Display.Mode mKeyguardDisplayMode; private final KeyguardBypassController mKeyguardBypassController; private ViewGroup mStatusBarView; private ViewGroup mStatusBarView; private WindowManager.LayoutParams mLp; private WindowManager.LayoutParams mLp; private boolean mHasTopUi; private boolean mHasTopUi; Loading @@ -91,14 +96,21 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private final SysuiColorExtractor mColorExtractor = Dependency.get(SysuiColorExtractor.class); private final SysuiColorExtractor mColorExtractor = Dependency.get(SysuiColorExtractor.class); @Inject @Inject public StatusBarWindowController(Context context) { public StatusBarWindowController(Context context, StatusBarStateController statusBarStateController, ConfigurationController configurationController, KeyguardBypassController keyguardBypassController) { this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), DozeParameters.getInstance(context)); DozeParameters.getInstance(context), statusBarStateController, configurationController, keyguardBypassController); } } @VisibleForTesting @VisibleForTesting public StatusBarWindowController(Context context, WindowManager windowManager, public StatusBarWindowController(Context context, WindowManager windowManager, IActivityManager activityManager, DozeParameters dozeParameters) { IActivityManager activityManager, DozeParameters dozeParameters, StatusBarStateController statusBarStateController, ConfigurationController configurationController, KeyguardBypassController keyguardBypassController) { mContext = context; mContext = context; mWindowManager = windowManager; mWindowManager = windowManager; mActivityManager = activityManager; mActivityManager = activityManager; Loading @@ -106,12 +118,27 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat mDozeParameters = dozeParameters; mDozeParameters = dozeParameters; mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze(); mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze(); mLpChanged = new WindowManager.LayoutParams(); mLpChanged = new WindowManager.LayoutParams(); mKeyguardBypassController = keyguardBypassController; mLockScreenDisplayTimeout = context.getResources() mLockScreenDisplayTimeout = context.getResources() .getInteger(R.integer.config_lockScreenDisplayTimeout); .getInteger(R.integer.config_lockScreenDisplayTimeout); ((SysuiStatusBarStateController) Dependency.get(StatusBarStateController.class)) ((SysuiStatusBarStateController) statusBarStateController) .addCallback(mStateListener, .addCallback(mStateListener, SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER); SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER); Dependency.get(ConfigurationController.class).addCallback(this); configurationController.addCallback(this); Display.Mode[] supportedModes = context.getDisplay().getSupportedModes(); Display.Mode currentMode = context.getDisplay().getMode(); // Running on the highest frame rate available can be expensive. // Let's specify a preferred refresh rate, and allow higher FPS only when we // know that we're not falsing (because we unlocked.) int keyguardRefreshRate = context.getResources() .getInteger(R.integer.config_keyguardRefreshRate); // Find supported display mode with the same resolution and requested refresh rate. mKeyguardDisplayMode = Arrays.stream(supportedModes).filter(mode -> (int) mode.getRefreshRate() == keyguardRefreshRate && mode.getPhysicalWidth() == currentMode.getPhysicalWidth() && mode.getPhysicalHeight() == currentMode.getPhysicalHeight()) .findFirst().orElse(null); } } /** /** Loading Loading @@ -209,6 +236,18 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat } else { } else { mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; } } if (mKeyguardDisplayMode != null) { boolean bypassOnKeyguard = mKeyguardBypassController.getBypassEnabled() && state.statusBarState == StatusBarState.KEYGUARD && !state.keyguardFadingAway && !state.keyguardGoingAway; if (state.dozing || bypassOnKeyguard) { mLpChanged.preferredDisplayModeId = mKeyguardDisplayMode.getModeId(); } else { mLpChanged.preferredDisplayModeId = 0; } Trace.setCounter("display_mode_id", mLpChanged.preferredDisplayModeId); } } } private void adjustScreenOrientation(State state) { private void adjustScreenOrientation(State state) { Loading Loading @@ -575,7 +614,8 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("StatusBarWindowController state:"); pw.println("StatusBarWindowController:"); pw.println(" mKeyguardDisplayMode=" + mKeyguardDisplayMode); pw.println(mCurrentState); pw.println(mCurrentState); } } Loading @@ -594,6 +634,14 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat setKeyguardDark(useDarkText); setKeyguardDark(useDarkText); } } /** * When keyguard will be dismissed but didn't start animation yet. */ public void setKeyguardGoingAway(boolean goingAway) { mCurrentState.keyguardGoingAway = goingAway; apply(mCurrentState); } private static class State { private static class State { boolean keyguardShowing; boolean keyguardShowing; boolean keyguardOccluded; boolean keyguardOccluded; Loading @@ -603,6 +651,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat boolean statusBarFocusable; boolean statusBarFocusable; boolean bouncerShowing; boolean bouncerShowing; boolean keyguardFadingAway; boolean keyguardFadingAway; boolean keyguardGoingAway; boolean qsExpanded; boolean qsExpanded; boolean headsUpShowing; boolean headsUpShowing; boolean forceStatusBarVisible; boolean forceStatusBarVisible; Loading packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoveInterceptor; import com.android.systemui.statusbar.NotificationRemoveInterceptor; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; Loading @@ -67,6 +68,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationData; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager; Loading Loading @@ -105,6 +107,10 @@ public class BubbleControllerTest extends SysuiTestCase { private ZenModeController mZenModeController; private ZenModeController mZenModeController; @Mock @Mock private ZenModeConfig mZenModeConfig; private ZenModeConfig mZenModeConfig; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private KeyguardBypassController mKeyguardBypassController; private FrameLayout mStatusBarView; private FrameLayout mStatusBarView; @Captor @Captor Loading Loading @@ -143,7 +149,8 @@ public class BubbleControllerTest extends SysuiTestCase { // Bubbles get added to status bar window view // Bubbles get added to status bar window view mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.add(mStatusBarView, 120 /* height */); mStatusBarWindowController.add(mStatusBarView, 120 /* height */); // Need notifications for bubbles // Need notifications for bubbles Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java +14 −3 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,8 @@ import android.view.WindowManager; import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.ConfigurationController; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading @@ -54,6 +56,12 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { private ViewGroup mStatusBarView; private ViewGroup mStatusBarView; @Mock @Mock private IActivityManager mActivityManager; private IActivityManager mActivityManager; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; @Mock private KeyguardBypassController mKeyguardBypassController; private StatusBarWindowController mStatusBarWindowController; private StatusBarWindowController mStatusBarWindowController; Loading @@ -63,7 +71,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { when(mDozeParameters.getAlwaysOn()).thenReturn(true); when(mDozeParameters.getAlwaysOn()).thenReturn(true); mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.add(mStatusBarView, 100 /* height */); mStatusBarWindowController.add(mStatusBarView, 100 /* height */); } } Loading @@ -88,7 +97,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { @Test @Test public void testOnThemeChanged_doesntCrash() { public void testOnThemeChanged_doesntCrash() { mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.onThemeChanged(); mStatusBarWindowController.onThemeChanged(); } } Loading @@ -100,7 +110,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { @Test @Test public void testSetForcePluginOpen_beforeStatusBarInitialization() { public void testSetForcePluginOpen_beforeStatusBarInitialization() { mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.setForcePluginOpen(true); mStatusBarWindowController.setForcePluginOpen(true); } } } } Loading
packages/SystemUI/res/values/config.xml +3 −0 Original line number Original line Diff line number Diff line Loading @@ -482,4 +482,7 @@ --> --> <string name="config_rounded_mask" translatable="false">"M8,0C3.6,0,0,3.6,0,8"</string> <string name="config_rounded_mask" translatable="false">"M8,0C3.6,0,0,3.6,0,8"</string> <!-- Preferred refresh rate at keyguard, if supported by the display --> <integer name="config_keyguardRefreshRate">-1</integer> </resources> </resources>
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +5 −0 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,7 @@ import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.NotificationPanelView; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.InjectionInflationController; import java.io.FileDescriptor; import java.io.FileDescriptor; Loading Loading @@ -204,6 +205,8 @@ public class KeyguardViewMediator extends SystemUI { private AlarmManager mAlarmManager; private AlarmManager mAlarmManager; private AudioManager mAudioManager; private AudioManager mAudioManager; private StatusBarManager mStatusBarManager; private StatusBarManager mStatusBarManager; private final StatusBarWindowController mStatusBarWindowController = Dependency.get(StatusBarWindowController.class); private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); private boolean mSystemReady; private boolean mSystemReady; Loading Loading @@ -1779,6 +1782,7 @@ public class KeyguardViewMediator extends SystemUI { adjustStatusBarLocked(); adjustStatusBarLocked(); userActivity(); userActivity(); mUpdateMonitor.setKeyguardGoingAway(false /* away */); mUpdateMonitor.setKeyguardGoingAway(false /* away */); mStatusBarWindowController.setKeyguardGoingAway(false /* goingAway */); mShowKeyguardWakeLock.release(); mShowKeyguardWakeLock.release(); } } mKeyguardDisplayManager.show(); mKeyguardDisplayManager.show(); Loading Loading @@ -1811,6 +1815,7 @@ public class KeyguardViewMediator extends SystemUI { } } mUpdateMonitor.setKeyguardGoingAway(true /* goingAway */); mUpdateMonitor.setKeyguardGoingAway(true /* goingAway */); mStatusBarWindowController.setKeyguardGoingAway(true /* goingAway */); // Don't actually hide the Keyguard at the moment, wait for window // Don't actually hide the Keyguard at the moment, wait for window // manager until it tells us it's safe to do so with // manager until it tells us it's safe to do so with Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowController.java +55 −6 Original line number Original line Diff line number Diff line Loading @@ -29,7 +29,9 @@ import android.graphics.PixelFormat; import android.os.Binder; import android.os.Binder; import android.os.RemoteException; import android.os.RemoteException; import android.os.SystemProperties; import android.os.SystemProperties; import android.os.Trace; import android.util.Log; import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.Gravity; import android.view.View; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup; Loading Loading @@ -57,6 +59,7 @@ import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.ArrayList; import java.util.Arrays; import javax.inject.Inject; import javax.inject.Inject; import javax.inject.Singleton; import javax.inject.Singleton; Loading @@ -76,6 +79,8 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private final WindowManager.LayoutParams mLpChanged; private final WindowManager.LayoutParams mLpChanged; private final boolean mKeyguardScreenRotation; private final boolean mKeyguardScreenRotation; private final long mLockScreenDisplayTimeout; private final long mLockScreenDisplayTimeout; private final Display.Mode mKeyguardDisplayMode; private final KeyguardBypassController mKeyguardBypassController; private ViewGroup mStatusBarView; private ViewGroup mStatusBarView; private WindowManager.LayoutParams mLp; private WindowManager.LayoutParams mLp; private boolean mHasTopUi; private boolean mHasTopUi; Loading @@ -91,14 +96,21 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat private final SysuiColorExtractor mColorExtractor = Dependency.get(SysuiColorExtractor.class); private final SysuiColorExtractor mColorExtractor = Dependency.get(SysuiColorExtractor.class); @Inject @Inject public StatusBarWindowController(Context context) { public StatusBarWindowController(Context context, StatusBarStateController statusBarStateController, ConfigurationController configurationController, KeyguardBypassController keyguardBypassController) { this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), this(context, context.getSystemService(WindowManager.class), ActivityManager.getService(), DozeParameters.getInstance(context)); DozeParameters.getInstance(context), statusBarStateController, configurationController, keyguardBypassController); } } @VisibleForTesting @VisibleForTesting public StatusBarWindowController(Context context, WindowManager windowManager, public StatusBarWindowController(Context context, WindowManager windowManager, IActivityManager activityManager, DozeParameters dozeParameters) { IActivityManager activityManager, DozeParameters dozeParameters, StatusBarStateController statusBarStateController, ConfigurationController configurationController, KeyguardBypassController keyguardBypassController) { mContext = context; mContext = context; mWindowManager = windowManager; mWindowManager = windowManager; mActivityManager = activityManager; mActivityManager = activityManager; Loading @@ -106,12 +118,27 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat mDozeParameters = dozeParameters; mDozeParameters = dozeParameters; mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze(); mScreenBrightnessDoze = mDozeParameters.getScreenBrightnessDoze(); mLpChanged = new WindowManager.LayoutParams(); mLpChanged = new WindowManager.LayoutParams(); mKeyguardBypassController = keyguardBypassController; mLockScreenDisplayTimeout = context.getResources() mLockScreenDisplayTimeout = context.getResources() .getInteger(R.integer.config_lockScreenDisplayTimeout); .getInteger(R.integer.config_lockScreenDisplayTimeout); ((SysuiStatusBarStateController) Dependency.get(StatusBarStateController.class)) ((SysuiStatusBarStateController) statusBarStateController) .addCallback(mStateListener, .addCallback(mStateListener, SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER); SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER); Dependency.get(ConfigurationController.class).addCallback(this); configurationController.addCallback(this); Display.Mode[] supportedModes = context.getDisplay().getSupportedModes(); Display.Mode currentMode = context.getDisplay().getMode(); // Running on the highest frame rate available can be expensive. // Let's specify a preferred refresh rate, and allow higher FPS only when we // know that we're not falsing (because we unlocked.) int keyguardRefreshRate = context.getResources() .getInteger(R.integer.config_keyguardRefreshRate); // Find supported display mode with the same resolution and requested refresh rate. mKeyguardDisplayMode = Arrays.stream(supportedModes).filter(mode -> (int) mode.getRefreshRate() == keyguardRefreshRate && mode.getPhysicalWidth() == currentMode.getPhysicalWidth() && mode.getPhysicalHeight() == currentMode.getPhysicalHeight()) .findFirst().orElse(null); } } /** /** Loading Loading @@ -209,6 +236,18 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat } else { } else { mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; mLpChanged.privateFlags &= ~LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS; } } if (mKeyguardDisplayMode != null) { boolean bypassOnKeyguard = mKeyguardBypassController.getBypassEnabled() && state.statusBarState == StatusBarState.KEYGUARD && !state.keyguardFadingAway && !state.keyguardGoingAway; if (state.dozing || bypassOnKeyguard) { mLpChanged.preferredDisplayModeId = mKeyguardDisplayMode.getModeId(); } else { mLpChanged.preferredDisplayModeId = 0; } Trace.setCounter("display_mode_id", mLpChanged.preferredDisplayModeId); } } } private void adjustScreenOrientation(State state) { private void adjustScreenOrientation(State state) { Loading Loading @@ -575,7 +614,8 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat } } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("StatusBarWindowController state:"); pw.println("StatusBarWindowController:"); pw.println(" mKeyguardDisplayMode=" + mKeyguardDisplayMode); pw.println(mCurrentState); pw.println(mCurrentState); } } Loading @@ -594,6 +634,14 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat setKeyguardDark(useDarkText); setKeyguardDark(useDarkText); } } /** * When keyguard will be dismissed but didn't start animation yet. */ public void setKeyguardGoingAway(boolean goingAway) { mCurrentState.keyguardGoingAway = goingAway; apply(mCurrentState); } private static class State { private static class State { boolean keyguardShowing; boolean keyguardShowing; boolean keyguardOccluded; boolean keyguardOccluded; Loading @@ -603,6 +651,7 @@ public class StatusBarWindowController implements Callback, Dumpable, Configurat boolean statusBarFocusable; boolean statusBarFocusable; boolean bouncerShowing; boolean bouncerShowing; boolean keyguardFadingAway; boolean keyguardFadingAway; boolean keyguardGoingAway; boolean qsExpanded; boolean qsExpanded; boolean headsUpShowing; boolean headsUpShowing; boolean forceStatusBarVisible; boolean forceStatusBarVisible; Loading
packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +8 −1 Original line number Original line Diff line number Diff line Loading @@ -60,6 +60,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoveInterceptor; import com.android.systemui.statusbar.NotificationRemoveInterceptor; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.NotificationTestHelper; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryListener; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationEntryManager; import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider; Loading @@ -67,6 +68,7 @@ import com.android.systemui.statusbar.notification.collection.NotificationData; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.collection.NotificationEntry; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.KeyguardBypassController; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.phone.StatusBarWindowController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.HeadsUpManager; Loading Loading @@ -105,6 +107,10 @@ public class BubbleControllerTest extends SysuiTestCase { private ZenModeController mZenModeController; private ZenModeController mZenModeController; @Mock @Mock private ZenModeConfig mZenModeConfig; private ZenModeConfig mZenModeConfig; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private KeyguardBypassController mKeyguardBypassController; private FrameLayout mStatusBarView; private FrameLayout mStatusBarView; @Captor @Captor Loading Loading @@ -143,7 +149,8 @@ public class BubbleControllerTest extends SysuiTestCase { // Bubbles get added to status bar window view // Bubbles get added to status bar window view mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.add(mStatusBarView, 120 /* height */); mStatusBarWindowController.add(mStatusBarView, 120 /* height */); // Need notifications for bubbles // Need notifications for bubbles Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarWindowControllerTest.java +14 −3 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,8 @@ import android.view.WindowManager; import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.ConfigurationController; import org.junit.Before; import org.junit.Before; import org.junit.Test; import org.junit.Test; Loading @@ -54,6 +56,12 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { private ViewGroup mStatusBarView; private ViewGroup mStatusBarView; @Mock @Mock private IActivityManager mActivityManager; private IActivityManager mActivityManager; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private ConfigurationController mConfigurationController; @Mock private KeyguardBypassController mKeyguardBypassController; private StatusBarWindowController mStatusBarWindowController; private StatusBarWindowController mStatusBarWindowController; Loading @@ -63,7 +71,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { when(mDozeParameters.getAlwaysOn()).thenReturn(true); when(mDozeParameters.getAlwaysOn()).thenReturn(true); mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.add(mStatusBarView, 100 /* height */); mStatusBarWindowController.add(mStatusBarView, 100 /* height */); } } Loading @@ -88,7 +97,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { @Test @Test public void testOnThemeChanged_doesntCrash() { public void testOnThemeChanged_doesntCrash() { mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.onThemeChanged(); mStatusBarWindowController.onThemeChanged(); } } Loading @@ -100,7 +110,8 @@ public class StatusBarWindowControllerTest extends SysuiTestCase { @Test @Test public void testSetForcePluginOpen_beforeStatusBarInitialization() { public void testSetForcePluginOpen_beforeStatusBarInitialization() { mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mStatusBarWindowController = new StatusBarWindowController(mContext, mWindowManager, mActivityManager, mDozeParameters); mActivityManager, mDozeParameters, mStatusBarStateController, mConfigurationController, mKeyguardBypassController); mStatusBarWindowController.setForcePluginOpen(true); mStatusBarWindowController.setForcePluginOpen(true); } } } }