Merge "Make confirm lock screen use the right theme" into oc-dr1-dev am: 98a9d341c8
am: 9b8f36e359
Change-Id: I08f5a9da6f6fac3206a5bb6df2e2106e91033863
This commit is contained in:
@@ -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
|
||||
|
@@ -21,16 +21,15 @@ import android.app.Activity;
|
||||
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 @@ public final class ChooseLockSettingsHelper {
|
||||
}
|
||||
} 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 @@ public final class ChooseLockSettingsHelper {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@ import android.widget.LinearLayout;
|
||||
|
||||
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 @@ public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivi
|
||||
setTheme(R.style.Theme_ConfirmDeviceCredentialsDark);
|
||||
mConfirmCredentialTheme = ConfirmCredentialTheme.DARK;
|
||||
} else {
|
||||
setTheme(R.style.GlifTheme_Light);
|
||||
setTheme(SetupWizardUtils.getTheme(getIntent()));
|
||||
mConfirmCredentialTheme = ConfirmCredentialTheme.INTERNAL;
|
||||
}
|
||||
super.onCreate(savedState);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -34,7 +34,7 @@ import java.util.List;
|
||||
* 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<>();
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user