Merge "Don't run postexecute if activity is gone." into oc-dev
diff --git a/res/layout/choose_lock_generic_fingerprint_header.xml b/res/layout/choose_lock_generic_fingerprint_header.xml
index a92b68f..6a107bf 100644
--- a/res/layout/choose_lock_generic_fingerprint_header.xml
+++ b/res/layout/choose_lock_generic_fingerprint_header.xml
@@ -18,9 +18,9 @@
android:id="@+id/fingerprint_header_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:minHeight="56dp"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
- android:paddingTop="@dimen/suw_description_glif_margin_top"
- android:paddingBottom="@dimen/suw_description_glif_margin_bottom_lists"
android:text="@string/lock_settings_picker_fingerprint_message"
- style="@style/SuwDescription.Glif" />
+ style="@style/FingerprintHeaderStyle" />
diff --git a/tests/app/src/com/android/settings/ChooseLockGenericTest.java b/tests/app/src/com/android/settings/ChooseLockGenericTest.java
index dee6697..924e716 100644
--- a/tests/app/src/com/android/settings/ChooseLockGenericTest.java
+++ b/tests/app/src/com/android/settings/ChooseLockGenericTest.java
@@ -16,11 +16,20 @@
package com.android.settings;
+import static android.support.test.InstrumentationRegistry.getInstrumentation;
+import static android.support.test.InstrumentationRegistry.getTargetContext;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertTrue;
+
import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.ActivityManager.AppTask;
+import android.app.KeyguardManager;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.support.test.filters.MediumTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
@@ -29,24 +38,17 @@
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiSelector;
-
import android.text.format.DateUtils;
-import android.view.KeyEvent;
-import com.android.settings.R;
+import com.android.internal.widget.LockPatternUtils;
-import java.util.Collection;
-
-import org.junit.After;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
-import static android.support.test.InstrumentationRegistry.getInstrumentation;
-import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.assertTrue;
+import java.util.Collection;
+import java.util.List;
/**
* Tests for {@link ChooseLockGenericTest}
@@ -68,7 +70,7 @@
private UiDevice mDevice;
private Context mTargetContext;
private String mSettingPackage;
- private PackageManager mPackageManager;
+
@Rule
public ActivityTestRule<ChooseLockGeneric> mChooseLockGenericActivityRule =
new ActivityTestRule<>(
@@ -81,108 +83,105 @@
mDevice = UiDevice.getInstance(getInstrumentation());
mTargetContext = getInstrumentation().getTargetContext();
mSettingPackage = mTargetContext.getPackageName();
- mPackageManager = mTargetContext.getPackageManager();
+ }
+ @Test
+ public void testConfirmLockPasswordShown_deviceWithPassword() throws Throwable {
setPassword();
- }
-
- @After
- public void tearDown() throws Exception {
- clearPassword();
+ try {
+ // GIVEN a PIN password is set on this device at set up.
+ // WHEN ChooseLockGeneric is launched with no extras.
+ mChooseLockGenericActivityRule.launchActivity(null /* No extras */);
+ // THEN ConfirmLockPassword.InternalActivity is shown.
+ assertThat(getCurrentActivity())
+ .isInstanceOf(ConfirmLockPassword.InternalActivity.class);
+ } finally {
+ finishAllAppTasks();
+ mDevice.waitForIdle();
+ clearPassword();
+ }
}
@Test
- public void testConfirmLockPasswordShown_deviceWithPassword() throws Exception, Throwable {
- // GIVEN a PIN password is set on this device at set up.
- // WHEN ChooseLockGeneric is launched with no extras.
- mChooseLockGenericActivityRule.launchActivity(null /* No extras */);
- // THEN ConfirmLockPassword.InternalActivity is shown.
- assertThat(getCurrentActivity()).isInstanceOf(ConfirmLockPassword.InternalActivity.class);
+ public void testConfirmLockPasswordShown_deviceWithPassword_phishingAttack() throws Throwable {
+ setPassword();
+ try {
+ // GIVEN a PIN password is set on this device at set up.
+ // WHEN ChooseLockGeneric is launched with extras to by-pass lock password confirmation.
+ mChooseLockGenericActivityRule.launchActivity(PHISHING_ATTACK_INTENT);
+ // THEN ConfirmLockPassword.InternalActivity is still shown.
+ assertThat(getCurrentActivity())
+ .isInstanceOf(ConfirmLockPassword.InternalActivity.class);
+ } finally {
+ finishAllAppTasks();
+ mDevice.waitForIdle();
+ clearPassword();
+ }
}
@Test
- public void testConfirmLockPasswordShown_deviceWithPassword_phishingAttack()
- throws Exception, Throwable {
- // GIVEN a PIN password is set on this device at set up.
- // WHEN ChooseLockGeneric is launched with extras to by-pass lock password confirmation.
- mChooseLockGenericActivityRule.launchActivity(PHISHING_ATTACK_INTENT);
- // THEN ConfirmLockPassword.InternalActivity is still shown.
- assertThat(getCurrentActivity()).isInstanceOf(ConfirmLockPassword.InternalActivity.class);
+ public void testForFingerprint_inflateLayout() {
+ mChooseLockGenericActivityRule.launchActivity(new Intent()
+ .putExtra(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true));
+
+ assertThat(mChooseLockGenericActivityRule.getActivity().isResumed()).isTrue();
}
private Activity getCurrentActivity() throws Throwable {
getInstrumentation().waitForIdleSync();
final Activity[] activity = new Activity[1];
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- Collection<Activity> activities = ActivityLifecycleMonitorRegistry.getInstance()
- .getActivitiesInStage(Stage.RESUMED);
- activity[0] = activities.iterator().next();
- }
+ getInstrumentation().runOnMainSync(() -> {
+ Collection<Activity> activities = ActivityLifecycleMonitorRegistry.getInstance()
+ .getActivitiesInStage(Stage.RESUMED);
+ activity[0] = activities.iterator().next();
});
return activity[0];
}
- private void launchNewPassword() throws Exception {
- Intent newPasswordIntent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD)
- .setPackage(mSettingPackage)
+ /** Sets a PIN password, 12345, for testing. */
+ private void setPassword() throws Exception {
+ Intent newPasswordIntent = new Intent(getTargetContext(), ChooseLockGeneric.class)
+ .putExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
+ DevicePolicyManager.PASSWORD_QUALITY_NUMERIC)
+ .putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD,
+ "12345")
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getInstrumentation().getContext().startActivity(newPasswordIntent);
mDevice.waitForIdle();
- }
- /** Sets a PIN password, 12345, for testing. */
- private void setPassword() throws Exception {
- launchNewPassword();
-
- if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
- // Set "lock_none", but it actually means we don't want to enroll a fingerprint.
- UiObject view = new UiObject(
- new UiSelector().resourceId(mSettingPackage + ":id/lock_none"));
- assertTrue("lock_none", view.waitForExists(TIMEOUT));
- view.click();
- mDevice.waitForIdle();
- }
-
- // Pick PIN from the option list
- UiObject view = new UiObject(new UiSelector()
- .resourceId(mSettingPackage + ":id/lock_pin"));
- assertTrue("lock_pin", view.waitForExists(TIMEOUT));
- view.click();
- mDevice.waitForIdle();
// Ignore any interstitial options
- view = new UiObject(new UiSelector()
+ UiObject view = new UiObject(new UiSelector()
.resourceId(mSettingPackage + ":id/encrypt_dont_require_password"));
if (view.waitForExists(TIMEOUT)) {
view.click();
mDevice.waitForIdle();
}
- // Yes, we really want to
- view = new UiObject(new UiSelector()
- .resourceId(mSettingPackage + ":id/next_button"));
- if (view.waitForExists(TIMEOUT)) {
- view.click();
- mDevice.waitForIdle();
- }
-
// Set our PIN
view = new UiObject(new UiSelector()
.resourceId(mSettingPackage + ":id/password_entry"));
assertTrue("password_entry", view.waitForExists(TIMEOUT));
// Enter it twice to confirm
- enterTestPin();
- enterTestPin();
+ enterTestPin(view);
+ enterTestPin(view);
mDevice.pressBack();
+
+ assertThat(getTargetContext().getSystemService(KeyguardManager.class).isDeviceSecure())
+ .isTrue();
}
/** Clears the previous set PIN password. */
private void clearPassword() throws Exception {
- launchNewPassword();
+ Intent newPasswordIntent = new Intent(getTargetContext(), ChooseLockGeneric.class)
+ .putExtra(LockPatternUtils.PASSWORD_TYPE_KEY,
+ DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
+ .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ getInstrumentation().getContext().startActivity(newPasswordIntent);
+ mDevice.waitForIdle();
// Enter current PIN
UiObject view = new UiObject(
@@ -195,40 +194,26 @@
assertTrue("password_entry", view.waitForExists(TIMEOUT));
}
- enterTestPin();
-
- // Set back to "none"
- view = new UiObject(new UiSelector().resourceId(mSettingPackage + ":id/lock_none"));
- assertTrue("lock_none", view.waitForExists(TIMEOUT));
- view.click();
- mDevice.waitForIdle();
-
- // Yes, we really want "none" if prompted again
- view = new UiObject(new UiSelector().resourceId(mSettingPackage + ":id/lock_none"));
- if (view.waitForExists(TIMEOUT)) {
- view.click();
- mDevice.waitForIdle();
- }
-
- // Yes, we really want to
- view = new UiObject(new UiSelector()
- .resourceId("android:id/button1"));
- if (view.waitForExists(TIMEOUT)) {
- view.click();
- mDevice.waitForIdle();
- }
+ enterTestPin(view);
mDevice.pressBack();
+
+ assertThat(getTargetContext().getSystemService(KeyguardManager.class).isDeviceSecure())
+ .isFalse();
}
- private void enterTestPin() throws Exception {
+ private void finishAllAppTasks() {
+ final ActivityManager activityManager =
+ getTargetContext().getSystemService(ActivityManager.class);
+ final List<AppTask> appTasks = activityManager.getAppTasks();
+ for (ActivityManager.AppTask task : appTasks) {
+ task.finishAndRemoveTask();
+ }
+ }
+
+ private void enterTestPin(UiObject view) throws Exception {
mDevice.waitForIdle();
- mDevice.pressKeyCode(KeyEvent.KEYCODE_1);
- mDevice.pressKeyCode(KeyEvent.KEYCODE_2);
- mDevice.pressKeyCode(KeyEvent.KEYCODE_3);
- mDevice.pressKeyCode(KeyEvent.KEYCODE_4);
- mDevice.pressKeyCode(KeyEvent.KEYCODE_5);
- mDevice.waitForIdle();
+ view.setText("12345");
mDevice.pressEnter();
mDevice.waitForIdle();
}