Make confirm lock screen use the right theme
Test: cd tests/robotests && mma
Bug: 62348472
Change-Id: Ie05c2e6adba8450a1092f0fefcad6b003398de7d
diff --git a/res/layout/confirm_lock_pattern_internal_base.xml b/res/layout/confirm_lock_pattern_internal_base.xml
index cd5739e..758fc0d 100644
--- a/res/layout/confirm_lock_pattern_internal_base.xml
+++ b/res/layout/confirm_lock_pattern_internal_base.xml
@@ -37,6 +37,7 @@
style="@style/LockPatternIconStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_gravity="?attr/suwGlifHeaderGravity"
android:src="@drawable/ic_lock" />
<TextView
diff --git a/src/com/android/settings/password/ChooseLockSettingsHelper.java b/src/com/android/settings/password/ChooseLockSettingsHelper.java
index 95f5a54..b5a838f 100644
--- a/src/com/android/settings/password/ChooseLockSettingsHelper.java
+++ b/src/com/android/settings/password/ChooseLockSettingsHelper.java
@@ -21,16 +21,15 @@
import android.app.Fragment;
import android.app.KeyguardManager;
import android.app.admin.DevicePolicyManager;
-import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.os.UserManager;
-import android.provider.Settings;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
+import com.android.setupwizardlib.util.WizardManagerHelper;
public final class ChooseLockSettingsHelper {
@@ -278,8 +277,10 @@
}
} else {
if (mFragment != null) {
+ copyInternalExtras(mFragment.getActivity().getIntent(), intent);
mFragment.startActivityForResult(intent, request);
} else {
+ copyInternalExtras(mActivity.getIntent(), intent);
mActivity.startActivityForResult(intent, request);
}
}
@@ -304,4 +305,11 @@
outIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
}
}
+
+ private void copyInternalExtras(Intent inIntent, Intent outIntent) {
+ String theme = inIntent.getStringExtra(WizardManagerHelper.EXTRA_THEME);
+ if (theme != null) {
+ outIntent.putExtra(WizardManagerHelper.EXTRA_THEME, theme);
+ }
+ }
}
diff --git a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
index 2de955f..2b2b38f 100644
--- a/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
+++ b/src/com/android/settings/password/ConfirmDeviceCredentialBaseActivity.java
@@ -26,6 +26,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivity {
@@ -56,7 +57,7 @@
setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
mConfirmCredentialTheme = ConfirmCredentialTheme.DARK;
} else {
- setTheme(R.style.GlifTheme_Light);
+ setTheme(SetupWizardUtils.getTheme(getIntent()));
mConfirmCredentialTheme = ConfirmCredentialTheme.INTERNAL;
}
super.onCreate(savedState);
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java
new file mode 100644
index 0000000..20a05e3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockSettingsHelperTest.java
@@ -0,0 +1,157 @@
+package com.android.settings.password;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.app.Activity;
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.UserHandle;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowUserManager;
+import com.android.settings.testutils.shadow.ShadowUtils;
+import com.android.setupwizardlib.util.WizardManagerHelper;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowActivity;
+import org.robolectric.shadows.ShadowActivity.IntentForResult;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(
+ manifest = TestConfig.MANIFEST_PATH,
+ sdk = TestConfig.SDK_VERSION,
+ shadows = {
+ ShadowUserManager.class,
+ ShadowUtils.class
+ })
+public class ChooseLockSettingsHelperTest {
+
+ @Test
+ public void testLaunchConfirmationActivityWithExternalAndChallenge() {
+
+ final int userId = UserHandle.myUserId();
+ final int request = 100;
+ final long challenge = 10000L;
+
+ final Activity activity = Robolectric.setupActivity(Activity.class);
+ ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(activity);
+ helper.launchConfirmationActivityWithExternalAndChallenge(
+ request, // request
+ "title",
+ "header",
+ "description",
+ true, // external
+ challenge,
+ userId
+ );
+
+ ShadowActivity shadowActivity = Shadows.shadowOf(activity);
+ Intent startedIntent = shadowActivity.getNextStartedActivity();
+
+ assertEquals(new ComponentName("com.android.settings",
+ ConfirmLockPattern.InternalActivity.class.getName()),
+ startedIntent.getComponent());
+ assertFalse(startedIntent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
+ assertTrue(startedIntent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
+ assertEquals(challenge, startedIntent.getLongExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
+ assertEquals(
+ true,
+ (startedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
+ assertEquals(true, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
+ assertEquals(true, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
+ assertEquals(true, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
+ assertEquals(true, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
+ }
+
+ @Test
+ public void testLaunchConfirmationActivityInternalAndChallenge() {
+
+ final int userId = UserHandle.myUserId();
+ final int request = 100;
+ final long challenge = 10000L;
+
+ final Activity activity = Robolectric.setupActivity(Activity.class);
+ ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(activity);
+ helper.launchConfirmationActivityWithExternalAndChallenge(
+ request,
+ "title",
+ "header",
+ "description",
+ false, // external
+ challenge,
+ userId
+ );
+ ShadowActivity shadowActivity = Shadows.shadowOf(activity);
+ Intent startedIntent = shadowActivity.getNextStartedActivity();
+
+ assertEquals(new ComponentName("com.android.settings",
+ ConfirmLockPattern.InternalActivity.class.getName()),
+ startedIntent.getComponent());
+ assertFalse(startedIntent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
+ assertTrue(startedIntent.getBooleanExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
+ assertEquals(challenge, startedIntent.getLongExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
+ assertEquals(
+ false,
+ (startedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
+ assertEquals(false, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
+ assertEquals(false, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
+ assertEquals(false, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
+ assertEquals(false, startedIntent.getBooleanExtra(
+ ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
+ }
+
+ @Test
+ public void testLaunchConfirmationActivity_internal_shouldPropagateTheme() {
+ Intent intent = new Intent()
+ .putExtra(WizardManagerHelper.EXTRA_THEME, WizardManagerHelper.THEME_GLIF_V2);
+ Activity activity = Robolectric.buildActivity(Activity.class)
+ .withIntent(intent)
+ .get();
+ ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(activity);
+ helper.launchConfirmationActivity(123, "test title", true, 0 /* userId */);
+
+ ShadowActivity shadowActivity = Shadows.shadowOf(activity);
+ IntentForResult startedActivity = shadowActivity.getNextStartedActivityForResult();
+ assertThat(startedActivity.requestCode).isEqualTo(123);
+ assertThat(startedActivity.intent.getStringExtra(WizardManagerHelper.EXTRA_THEME))
+ .isEqualTo(WizardManagerHelper.THEME_GLIF_V2);
+ }
+
+
+ private ChooseLockSettingsHelper getChooseLockSettingsHelper(Activity activity) {
+ LockPatternUtils mockLockPatternUtils = mock(LockPatternUtils.class);
+ when(mockLockPatternUtils.getKeyguardStoredPasswordQuality(anyInt()))
+ .thenReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+
+ ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(activity);
+ helper.mLockPatternUtils = mockLockPatternUtils;
+ return helper;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
index 61346bc..860ee11 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -34,7 +34,7 @@
* This class provides the API 24 implementation of UserManager.get(Context).
*/
@Implements(UserManager.class)
-public class ShadowUserManager {
+public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager {
private SparseArray<UserInfo> mUserInfos = new SparseArray<>();
diff --git a/tests/unit/src/com/android/settings/password/ChooseLockSettingsHelperTest.java b/tests/unit/src/com/android/settings/password/ChooseLockSettingsHelperTest.java
deleted file mode 100644
index e534fb6..0000000
--- a/tests/unit/src/com/android/settings/password/ChooseLockSettingsHelperTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.android.settings.password;
-
-
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.test.AndroidTestCase;
-
-import com.android.internal.widget.LockPatternUtils;
-
-import org.mockito.ArgumentCaptor;
-
-import java.util.List;
-
-public class ChooseLockSettingsHelperTest extends AndroidTestCase {
-
- private static final String SYSTEM_PROPERTY_DEXMAKER_DEXCACHE = "dexmaker.dexcache";
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, getContext().getCacheDir().getPath());
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- System.clearProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
- }
-
- public void testlaunchConfirmationActivityWithExternalAndChallenge() {
-
- final int userId = UserHandle.myUserId();
- final int request = 100;
- final long challenge = 10000L;
- {
- // Test external == true
- final boolean external = true;
-
- final Activity mockActivity = getMockActivity();
- ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
- helper.launchConfirmationActivityWithExternalAndChallenge(
- request, // request
- "title",
- "header",
- "description",
- external,
- challenge,
- userId
- );
- final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mockActivity, times(1)).startActivity(intentCaptor.capture());
- Intent capturedIntent = getResultIntent(intentCaptor);
-
- assertEquals(new ComponentName("com.android.settings",
- ConfirmLockPattern.InternalActivity.class.getName()),
- capturedIntent.getComponent());
- assertFalse(capturedIntent.getBooleanExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
- assertTrue(capturedIntent.getBooleanExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
- assertEquals(challenge, capturedIntent.getLongExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
- assertEquals(external,
- (capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
- }
-
- {
- // Test external == false
- final boolean external = false;
-
- final Activity mockActivity = getMockActivity();
- ChooseLockSettingsHelper helper = getChooseLockSettingsHelper(mockActivity);
- helper.launchConfirmationActivityWithExternalAndChallenge(
- request, // request
- "title",
- "header",
- "description",
- external,
- challenge,
- userId
- );
- final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mockActivity, times(1)).startActivityForResult(intentCaptor.capture(),
- eq(request));
- Intent capturedIntent = getResultIntent(intentCaptor);
-
-
- assertEquals(new ComponentName("com.android.settings",
- ConfirmLockPattern.InternalActivity.class.getName()),
- capturedIntent.getComponent());
- assertFalse(capturedIntent.getBooleanExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_RETURN_CREDENTIALS, false));
- assertTrue(capturedIntent.getBooleanExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false));
- assertEquals(challenge, capturedIntent.getLongExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0L));
- assertEquals(external,
- (capturedIntent.getFlags() & Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0);
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.ALLOW_FP_AUTHENTICATION, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.DARK_THEME, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.SHOW_CANCEL_BUTTON, false));
- assertEquals(external, capturedIntent.getBooleanExtra(
- ConfirmDeviceCredentialBaseFragment.SHOW_WHEN_LOCKED, false));
- }
- }
-
-
- private ChooseLockSettingsHelper getChooseLockSettingsHelper(Activity mockActivity) {
- LockPatternUtils mockLockPatternUtils = mock(LockPatternUtils.class);
- when(mockLockPatternUtils.getKeyguardStoredPasswordQuality(anyInt()))
- .thenReturn(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
-
- ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(mockActivity);
- helper.mLockPatternUtils = mockLockPatternUtils;
- return helper;
- }
-
- private Activity getMockActivity() {
- Activity mockActivity = mock(Activity.class);
- when(mockActivity.getSystemService(Context.USER_SERVICE))
- .thenReturn(getContext().getSystemService(UserManager.class));
- when(mockActivity.getContentResolver()).thenReturn(getContext().getContentResolver());
- when(mockActivity.getIntent()).thenReturn(new Intent());
- return mockActivity;
- }
-
-
-
- private static Intent getResultIntent(ArgumentCaptor<Intent> intentCaptor) {
- List<Intent> capturedIntents = intentCaptor.getAllValues();
- assertEquals(1, capturedIntents.size());
- return capturedIntents.get(0);
- }
-}