diff --git a/packages/SystemUI/res-keyguard/values/integers.xml b/packages/SystemUI/res-keyguard/values/integers.xml
index 6f14dc9ba2e17..c6e90c0fcdec6 100644
--- a/packages/SystemUI/res-keyguard/values/integers.xml
+++ b/packages/SystemUI/res-keyguard/values/integers.xml
@@ -20,4 +20,11 @@
0x50 = bottom, 0x01 = center_horizontal -->
0x51
+
+
+ 0x51
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
index 31f1332b265c7..d06c8bc6bffeb 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
@@ -475,7 +475,18 @@ public class KeyguardHostViewController extends ViewController
* configuration.
*/
public void updateResources() {
- int gravity = mView.getResources().getInteger(R.integer.keyguard_host_view_gravity);
+ int gravity;
+
+ Resources resources = mView.getResources();
+
+ if (resources.getBoolean(R.bool.can_use_one_handed_bouncer)
+ && resources.getBoolean(
+ com.android.internal.R.bool.config_enableOneHandedKeyguard)) {
+ gravity = resources.getInteger(
+ R.integer.keyguard_host_view_one_handed_gravity);
+ } else {
+ gravity = resources.getInteger(R.integer.keyguard_host_view_gravity);
+ }
// Android SysUI uses a FrameLayout as the top-level, but Auto uses RelativeLayout.
// We're just changing the gravity here though (which can't be applied to RelativeLayout),
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
index 4d526508ce0f6..42314bf3643f1 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
@@ -29,6 +29,7 @@ import android.telephony.TelephonyManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+import android.testing.TestableResources;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -49,7 +50,6 @@ import org.mockito.junit.MockitoRule;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class KeyguardHostViewControllerTest extends SysuiTestCase {
-
@Mock
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -68,14 +68,21 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
+ private TestableResources mTestableResources;
private KeyguardHostViewController mKeyguardHostViewController;
@Before
public void setup() {
- mContext.ensureTestableResources();
+ mTestableResources = mContext.getOrCreateTestableResources();
mKeyguardHostView = new KeyguardHostView(mContext);
+ // Explicitly disable one handed keyguard.
+ mTestableResources.addOverride(
+ R.bool.can_use_one_handed_bouncer, false);
+ mTestableResources.addOverride(
+ com.android.internal.R.bool.config_enableOneHandedKeyguard, false);
+
when(mKeyguardSecurityContainerControllerFactory.create(any(
KeyguardSecurityContainer.SecurityCallback.class)))
.thenReturn(mKeyguardSecurityContainerController);
@@ -106,7 +113,7 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
mKeyguardHostView.setLayoutParams(lp);
// Set initial gravity
- mContext.getOrCreateTestableResources().addOverride(R.integer.keyguard_host_view_gravity,
+ mTestableResources.addOverride(R.integer.keyguard_host_view_gravity,
Gravity.CENTER);
// Kick off the initial pass...
@@ -116,7 +123,7 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
Gravity.CENTER);
// Now simulate a config change
- mContext.getOrCreateTestableResources().addOverride(R.integer.keyguard_host_view_gravity,
+ mTestableResources.addOverride(R.integer.keyguard_host_view_gravity,
Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
mKeyguardHostViewController.updateResources();
@@ -125,6 +132,43 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
}
+ @Test
+ public void testGravityUsesOneHandGravityWhenApplicable() {
+ FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT);
+ mKeyguardHostView.setLayoutParams(lp);
+
+ mTestableResources.addOverride(
+ R.integer.keyguard_host_view_gravity,
+ Gravity.CENTER);
+ mTestableResources.addOverride(
+ R.integer.keyguard_host_view_one_handed_gravity,
+ Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
+
+ // Start disabled.
+ mTestableResources.addOverride(
+ R.bool.can_use_one_handed_bouncer, false);
+ mTestableResources.addOverride(
+ com.android.internal.R.bool.config_enableOneHandedKeyguard, false);
+
+ mKeyguardHostViewController.init();
+ assertEquals(
+ ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity,
+ Gravity.CENTER);
+
+ // And enable
+ mTestableResources.addOverride(
+ R.bool.can_use_one_handed_bouncer, true);
+ mTestableResources.addOverride(
+ com.android.internal.R.bool.config_enableOneHandedKeyguard, true);
+
+ mKeyguardHostViewController.updateResources();
+ assertEquals(
+ ((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity,
+ Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
+ }
+
@Test
public void testUpdateKeyguardPositionDelegatesToSecurityContainer() {
mKeyguardHostViewController.updateKeyguardPosition(1.0f);