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