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