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

Commit 78645a1f authored by Lucas Dupin's avatar Lucas Dupin Committed by android-build-merger
Browse files

Merge "Switch preffered display mode on lock screen" into qt-r1-dev am: 311e1db1

am: 1edecabc

Change-Id: I272f11fead11ebd20faa594438122eb97e559702
parents 973efbe3 1edecabc
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -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>
+5 −0
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
@@ -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();
@@ -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
+55 −6
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
    }
    }


    /**
    /**
@@ -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) {
@@ -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);
    }
    }


@@ -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;
@@ -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;
+8 −1
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
@@ -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
@@ -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
+14 −3
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;


@@ -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 */);
    }
    }


@@ -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();
    }
    }


@@ -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);
    }
    }
}
}