Settings ChooseLockscreen* dismiss in background.
Whenever launching ChooseLockGeneric/ChooseLockPassword/ChooseLockPassword the activity will finish itself when it goes into the background. This is to ensure that a user only has an opporunity to complete this process once the activity is shown. (It cannot be resumed after a power button press, or sending the activity to the background) Test: Verified in Settings that the ChooseLockGeneric, ChooseLockPassword and the ChooseLockPattern activities now exit if they are sent to the background. Test: Same as above but in SUW Test: m -j40 RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.password.ChooseLockPatternTest Test: m -j40 RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.password.ChooseLockPasswordTest Fixes: 287473148 Change-Id: Icc9142ff4672ab3669b2f425ff351b03ce7a223a
This commit is contained in:
@@ -200,6 +200,14 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
return SettingsEnums.CHOOSE_LOCK_GENERIC;
|
return SettingsEnums.CHOOSE_LOCK_GENERIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
if (!getActivity().isChangingConfigurations() && !mWaitingForConfirmation) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@@ -219,6 +219,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
findViewById(R.id.content_parent).setFitsSystemWindows(false);
|
findViewById(R.id.content_parent).setFitsSystemWindows(false);
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
if (!isChangingConfigurations()) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class ChooseLockPasswordFragment extends InstrumentedFragment
|
public static class ChooseLockPasswordFragment extends InstrumentedFragment
|
||||||
implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
|
implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
|
||||||
|
@@ -98,6 +98,14 @@ public class ChooseLockPattern extends SettingsActivity {
|
|||||||
return modIntent;
|
return modIntent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
if (!isChangingConfigurations()) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class IntentBuilder {
|
public static class IntentBuilder {
|
||||||
private final Intent mIntent;
|
private final Intent mIntent;
|
||||||
|
|
||||||
|
@@ -54,7 +54,9 @@ import android.os.Bundle;
|
|||||||
import android.provider.Settings.Global;
|
import android.provider.Settings.Global;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
import androidx.test.core.app.ActivityScenario;
|
||||||
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.internal.widget.LockscreenCredential;
|
import com.android.internal.widget.LockscreenCredential;
|
||||||
@@ -613,15 +615,29 @@ public class ChooseLockGenericTest {
|
|||||||
mFragment.getString(R.string.face_unlock_set_unlock_password));
|
mFragment.getString(R.string.face_unlock_set_unlock_password));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void activity_dismisses_InBackground() {
|
||||||
|
ActivityScenario<ChooseLockPassword> scenario =
|
||||||
|
ActivityScenario.launchActivityForResult(getChooseLockGenericIntent(null));
|
||||||
|
scenario.moveToState(Lifecycle.State.RESUMED);
|
||||||
|
scenario.moveToState(Lifecycle.State.CREATED);
|
||||||
|
assertThat(scenario.getResult()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
private void initActivity(@Nullable Intent intent) {
|
private void initActivity(@Nullable Intent intent) {
|
||||||
|
final Intent theIntent = getChooseLockGenericIntent(intent);
|
||||||
|
// TODO(b/275023433) This presents the activity from being made 'visible` is workaround
|
||||||
|
mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, theIntent)
|
||||||
|
.create().start().postCreate(null).resume().get();
|
||||||
|
mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Intent getChooseLockGenericIntent(@Nullable Intent intent) {
|
||||||
if (intent == null) {
|
if (intent == null) {
|
||||||
intent = new Intent();
|
intent = new Intent();
|
||||||
}
|
}
|
||||||
intent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
|
intent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
|
||||||
// TODO(b/275023433) This presents the activity from being made 'visible` is workaround
|
return intent;
|
||||||
mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, intent)
|
|
||||||
.create().start().postCreate(null).resume().get();
|
|
||||||
mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String capitalize(final String input) {
|
private static String capitalize(final String input) {
|
||||||
|
@@ -47,6 +47,9 @@ import android.view.View;
|
|||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.test.core.app.ActivityScenario;
|
||||||
|
|
||||||
import com.android.internal.widget.LockscreenCredential;
|
import com.android.internal.widget.LockscreenCredential;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment;
|
import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment;
|
||||||
@@ -515,16 +518,31 @@ public class ChooseLockPasswordTest {
|
|||||||
assertThat(pinAutoConfirmOption.isChecked()).isFalse();
|
assertThat(pinAutoConfirmOption.isChecked()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void activity_dismisses_InBackground() {
|
||||||
|
ActivityScenario<ChooseLockPassword> scenario =
|
||||||
|
ActivityScenario.launchActivityForResult(getLockPasswordIntent());
|
||||||
|
scenario.moveToState(Lifecycle.State.RESUMED);
|
||||||
|
scenario.moveToState(Lifecycle.State.CREATED);
|
||||||
|
assertThat(scenario.getResult()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
private ChooseLockPassword setupActivityWithPinTypeAndDefaultPolicy() {
|
private ChooseLockPassword setupActivityWithPinTypeAndDefaultPolicy() {
|
||||||
PasswordPolicy policy = new PasswordPolicy();
|
PasswordPolicy policy = new PasswordPolicy();
|
||||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||||
|
|
||||||
return buildChooseLockPasswordActivity(
|
return buildChooseLockPasswordActivity(
|
||||||
new IntentBuilder(application)
|
getLockPasswordIntent());
|
||||||
.setUserId(UserHandle.myUserId())
|
}
|
||||||
.setPasswordType(PASSWORD_QUALITY_NUMERIC)
|
|
||||||
.setPasswordRequirement(PASSWORD_COMPLEXITY_NONE, policy.getMinMetrics())
|
private Intent getLockPasswordIntent() {
|
||||||
.build());
|
PasswordPolicy policy = new PasswordPolicy();
|
||||||
|
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||||
|
return new IntentBuilder(application)
|
||||||
|
.setUserId(UserHandle.myUserId())
|
||||||
|
.setPasswordType(PASSWORD_QUALITY_NUMERIC)
|
||||||
|
.setPasswordRequirement(PASSWORD_COMPLEXITY_NONE, policy.getMinMetrics())
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) {
|
private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) {
|
||||||
|
@@ -30,6 +30,9 @@ import android.os.Bundle;
|
|||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
|
import androidx.lifecycle.Lifecycle;
|
||||||
|
import androidx.test.core.app.ActivityScenario;
|
||||||
|
|
||||||
import com.android.internal.widget.LockPatternUtils;
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.internal.widget.LockscreenCredential;
|
import com.android.internal.widget.LockscreenCredential;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -137,16 +140,29 @@ public class ChooseLockPatternTest {
|
|||||||
R.string.lockpassword_draw_your_pattern_again_header));
|
R.string.lockpassword_draw_your_pattern_again_header));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void activity_dismisses_InBackground() {
|
||||||
|
ActivityScenario<ChooseLockPattern> scenario =
|
||||||
|
ActivityScenario.launchActivityForResult(getLockPatternIntent(false));
|
||||||
|
scenario.moveToState(Lifecycle.State.RESUMED);
|
||||||
|
scenario.moveToState(Lifecycle.State.CREATED);
|
||||||
|
assertThat(scenario.getResult()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
|
private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
|
||||||
return Robolectric.buildActivity(
|
return Robolectric.buildActivity(
|
||||||
ChooseLockPattern.class,
|
ChooseLockPattern.class,
|
||||||
new IntentBuilder(application)
|
getLockPatternIntent(addFingerprintExtra))
|
||||||
.setUserId(UserHandle.myUserId())
|
|
||||||
.setForFingerprint(addFingerprintExtra)
|
|
||||||
.build())
|
|
||||||
.setup().get();
|
.setup().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Intent getLockPatternIntent(boolean addFingerprintExtra) {
|
||||||
|
return new IntentBuilder(application)
|
||||||
|
.setUserId(UserHandle.myUserId())
|
||||||
|
.setForFingerprint(addFingerprintExtra)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
private LockscreenCredential createPattern(String patternString) {
|
private LockscreenCredential createPattern(String patternString) {
|
||||||
return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
|
return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
|
||||||
patternString.getBytes()));
|
patternString.getBytes()));
|
||||||
|
Reference in New Issue
Block a user