diff --git a/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml new file mode 100644 index 0000000000000..cd7ab986844ce --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout-land/keyguard_pin_view.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml b/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml new file mode 100644 index 0000000000000..80cc8c06680a0 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout-sw600dp-land/keyguard_pin_view.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml new file mode 100644 index 0000000000000..e00742d800172 --- /dev/null +++ b/packages/SystemUI/res-keyguard/layout/keyguard_pin_view_landscape.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java index f9523370adb17..20464d7d465f9 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java @@ -32,7 +32,6 @@ import android.app.ActivityManager; import android.app.admin.DevicePolicyManager; import android.content.Intent; import android.content.res.ColorStateList; -import android.content.res.Configuration; import android.content.res.Resources; import android.hardware.biometrics.BiometricOverlayConstants; import android.media.AudioManager; @@ -142,7 +141,7 @@ public class KeyguardSecurityContainerController extends ViewController mView.onDensityOrFontScaleChanged()); } diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java index a04a48db5d7a0..e77341651a8e8 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadAnimator.java @@ -58,6 +58,7 @@ class NumPadAnimator { private float mStartRadius; private float mEndRadius; private int mHeight; + private int mWidth; private static final int EXPAND_ANIMATION_MS = 100; private static final int EXPAND_COLOR_ANIMATION_MS = 50; @@ -95,11 +96,17 @@ class NumPadAnimator { mBackground.setCornerRadius(mEndRadius + (mStartRadius - mEndRadius) * progress); int height = (int) (mHeight * 0.7f + mHeight * 0.3 * progress); int difference = mHeight - height; - mBackground.setBounds(0, difference / 2, mHeight, mHeight - difference / 2); + + int left = 0; + int top = difference / 2; + int right = mWidth; + int bottom = mHeight - difference / 2; + mBackground.setBounds(left, top, right, bottom); } - void onLayout(int height) { + void onLayout(int width, int height) { boolean shouldUpdateHeight = height != mHeight; + mWidth = width; mHeight = height; mStartRadius = height / 2f; mEndRadius = height / 4f; @@ -121,7 +128,7 @@ class NumPadAnimator { ContextThemeWrapper ctw = new ContextThemeWrapper(context, mStyle); @SuppressLint("ResourceType") TypedArray a = ctw.obtainStyledAttributes(customAttrs); mNormalBackgroundColor = getPrivateAttrColorIfUnset(ctw, a, 0, 0, - NUM_PAD_BACKGROUND); + NUM_PAD_BACKGROUND); a.recycle(); mPressedBackgroundColor = getColorAttrDefaultColor(context, NUM_PAD_BACKGROUND_PRESSED); diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadButton.java b/packages/SystemUI/src/com/android/keyguard/NumPadButton.java index 3f1741a67a765..5c2f3b368f96e 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadButton.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadButton.java @@ -74,8 +74,9 @@ public class NumPadButton extends AlphaOptimizedImageButton implements NumPadAni @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); - - if (mAnimator != null) mAnimator.onLayout(b - t); + int width = r - l; + int height = b - t; + if (mAnimator != null) mAnimator.onLayout(width, height); } @Override diff --git a/packages/SystemUI/src/com/android/keyguard/NumPadKey.java b/packages/SystemUI/src/com/android/keyguard/NumPadKey.java index edc298cde0329..466d154746794 100644 --- a/packages/SystemUI/src/com/android/keyguard/NumPadKey.java +++ b/packages/SystemUI/src/com/android/keyguard/NumPadKey.java @@ -211,7 +211,9 @@ public class NumPadKey extends ViewGroup implements NumPadAnimationListener { left = centerX - mKlondikeText.getMeasuredWidth() / 2; mKlondikeText.layout(left, top, left + mKlondikeText.getMeasuredWidth(), bottom); - if (mAnimator != null) mAnimator.onLayout(b - t); + int width = r - l; + int height = b - t; + if (mAnimator != null) mAnimator.onLayout(width, height); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index add323983928f..fa035fb0df8b5 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -548,6 +548,12 @@ object Flags { val ENABLE_PIP_APP_ICON_OVERLAY = sysPropBooleanFlag(1115, "persist.wm.debug.enable_pip_app_icon_overlay", default = true) + + // TODO(b/293252410) : Tracking Bug + @JvmField + val LOCKSCREEN_ENABLE_LANDSCAPE = + unreleasedFlag(1116, name = "lockscreen.enable_landscape") + // TODO(b/273443374): Tracking Bug @Keep @JvmField val LOCKSCREEN_LIVE_WALLPAPER = diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt index 7dcdc0bdb3832..97cb45aebd13c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ConfigurationControllerImpl.kt @@ -22,8 +22,6 @@ import android.os.LocaleList import android.view.View.LAYOUT_DIRECTION_RTL import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.policy.ConfigurationController - -import java.util.ArrayList import javax.inject.Inject @SysUISingleton @@ -40,6 +38,7 @@ class ConfigurationControllerImpl @Inject constructor(context: Context) : Config private var localeList: LocaleList? = null private val context: Context private var layoutDirection: Int + private var orientation = Configuration.ORIENTATION_UNDEFINED init { val currentConfig = context.resources.configuration @@ -134,8 +133,18 @@ class ConfigurationControllerImpl @Inject constructor(context: Context) : Config it.onThemeChanged() } } + + val newOrientation = newConfig.orientation + if (orientation != newOrientation) { + orientation = newOrientation + listeners.filterForEach({ this.listeners.contains(it) }) { + it.onOrientationChanged(orientation) + } + } } + + override fun addCallback(listener: ConfigurationController.ConfigurationListener) { listeners.add(listener) listener.onDensityOrFontScaleChanged() diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java index 6b80a9dab7cf5..b2ef818d32824 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ConfigurationController.java @@ -42,5 +42,6 @@ public interface ConfigurationController extends CallbackController keyguardUnlockAnimationController, KeyguardUpdateMonitorLogger logger, - DumpManager dumpManager) { + DumpManager dumpManager, + FeatureFlags featureFlags) { mContext = context; mLogger = logger; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mLockPatternUtils = lockPatternUtils; mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback); mUnlockAnimationControllerLazy = keyguardUnlockAnimationController; + mFeatureFlags = featureFlags; dumpManager.registerDumpable(getClass().getSimpleName(), this); @@ -272,7 +281,8 @@ public class KeyguardStateControllerImpl implements KeyguardStateController, Dum @Override public boolean isKeyguardScreenRotationAllowed() { return SystemProperties.getBoolean("lockscreen.rot_override", false) - || mContext.getResources().getBoolean(R.bool.config_enableLockScreenRotation); + || mContext.getResources().getBoolean(R.bool.config_enableLockScreenRotation) + || mFeatureFlags.isEnabled(LOCKSCREEN_ENABLE_LANDSCAPE); } @Override diff --git a/packages/SystemUI/tests/src/com/android/keyguard/NumPadAnimatorTest.kt b/packages/SystemUI/tests/src/com/android/keyguard/NumPadAnimatorTest.kt index 9fcb9c8f16628..7c2550f465f61 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/NumPadAnimatorTest.kt +++ b/packages/SystemUI/tests/src/com/android/keyguard/NumPadAnimatorTest.kt @@ -47,10 +47,10 @@ class NumPadAnimatorTest : SysuiTestCase() { @Test fun testOnLayout() { - underTest.onLayout(100) + underTest.onLayout(100, 100) verify(background).cornerRadius = 50f reset(background) - underTest.onLayout(100) + underTest.onLayout(100, 100) verify(background, never()).cornerRadius = anyFloat() } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt index 6155e3c169963..03d38542d2ee1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/ConfigurationControllerImplTest.kt @@ -273,6 +273,23 @@ class ConfigurationControllerImplTest : SysuiTestCase() { assertThat(listener.themeChanged).isTrue() } + @Test + fun orientationUpdated_listenerNotified() { + val config = mContext.resources.configuration + config.orientation = Configuration.ORIENTATION_LANDSCAPE + mConfigurationController.onConfigurationChanged(config) + + val listener = createAndAddListener() + + // WHEN the orientation is updated + config.orientation = Configuration.ORIENTATION_PORTRAIT + mConfigurationController.onConfigurationChanged(config) + + // THEN the listener is notified + assertThat(listener.orientationChanged).isTrue() + } + + @Test fun multipleUpdates_listenerNotifiedOfAll() { val config = mContext.resources.configuration @@ -325,6 +342,7 @@ class ConfigurationControllerImplTest : SysuiTestCase() { var themeChanged = false var localeListChanged = false var layoutDirectionChanged = false + var orientationChanged = false override fun onConfigChanged(newConfig: Configuration?) { changedConfig = newConfig @@ -350,6 +368,9 @@ class ConfigurationControllerImplTest : SysuiTestCase() { override fun onLayoutDirectionChanged(isLayoutRtl: Boolean) { layoutDirectionChanged = true } + override fun onOrientationChanged(orientation: Int) { + orientationChanged = true + } fun assertNoMethodsCalled() { assertThat(densityOrFontScaleChanged).isFalse() diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java index 5cabcd4163b2b..cae892fc22137 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/KeyguardStateControllerTest.java @@ -36,6 +36,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.logging.KeyguardUpdateMonitorLogger; import com.android.systemui.SysuiTestCase; import com.android.systemui.dump.DumpManager; +import com.android.systemui.flags.FeatureFlags; import com.android.systemui.keyguard.KeyguardUnlockAnimationController; import dagger.Lazy; @@ -67,6 +68,8 @@ public class KeyguardStateControllerTest extends SysuiTestCase { private Lazy mKeyguardUnlockAnimationControllerLazy; @Mock private KeyguardUpdateMonitorLogger mLogger; + @Mock + private FeatureFlags mFeatureFlags; @Captor private ArgumentCaptor mUpdateCallbackCaptor; @@ -80,7 +83,8 @@ public class KeyguardStateControllerTest extends SysuiTestCase { mLockPatternUtils, mKeyguardUnlockAnimationControllerLazy, mLogger, - mDumpManager); + mDumpManager, + mFeatureFlags); } @Test