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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
if (!getActivity().isChangingConfigurations() && !mWaitingForConfirmation) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@@ -219,6 +219,13 @@ public class ChooseLockPassword extends SettingsActivity {
|
||||
findViewById(R.id.content_parent).setFitsSystemWindows(false);
|
||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||
}
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
if (!isChangingConfigurations()) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
public static class ChooseLockPasswordFragment extends InstrumentedFragment
|
||||
implements OnEditorActionListener, TextWatcher, SaveAndFinishWorker.Listener {
|
||||
|
@@ -98,6 +98,14 @@ public class ChooseLockPattern extends SettingsActivity {
|
||||
return modIntent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
if (!isChangingConfigurations()) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
public static class IntentBuilder {
|
||||
private final Intent mIntent;
|
||||
|
||||
|
@@ -54,7 +54,9 @@ import android.os.Bundle;
|
||||
import android.provider.Settings.Global;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.test.core.app.ActivityScenario;
|
||||
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.internal.widget.LockscreenCredential;
|
||||
@@ -613,15 +615,29 @@ public class ChooseLockGenericTest {
|
||||
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) {
|
||||
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) {
|
||||
intent = new Intent();
|
||||
}
|
||||
intent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
|
||||
// TODO(b/275023433) This presents the activity from being made 'visible` is workaround
|
||||
mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, intent)
|
||||
.create().start().postCreate(null).resume().get();
|
||||
mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
|
||||
return intent;
|
||||
}
|
||||
|
||||
private static String capitalize(final String input) {
|
||||
|
@@ -47,6 +47,9 @@ import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.lifecycle.Lifecycle;
|
||||
import androidx.test.core.app.ActivityScenario;
|
||||
|
||||
import com.android.internal.widget.LockscreenCredential;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.password.ChooseLockPassword.ChooseLockPasswordFragment;
|
||||
@@ -515,16 +518,31 @@ public class ChooseLockPasswordTest {
|
||||
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() {
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||
|
||||
return buildChooseLockPasswordActivity(
|
||||
new IntentBuilder(application)
|
||||
.setUserId(UserHandle.myUserId())
|
||||
.setPasswordType(PASSWORD_QUALITY_NUMERIC)
|
||||
.setPasswordRequirement(PASSWORD_COMPLEXITY_NONE, policy.getMinMetrics())
|
||||
.build());
|
||||
getLockPasswordIntent());
|
||||
}
|
||||
|
||||
private Intent getLockPasswordIntent() {
|
||||
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) {
|
||||
|
@@ -30,6 +30,9 @@ import android.os.Bundle;
|
||||
import android.os.UserHandle;
|
||||
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.LockscreenCredential;
|
||||
import com.android.settings.R;
|
||||
@@ -137,16 +140,29 @@ public class ChooseLockPatternTest {
|
||||
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) {
|
||||
return Robolectric.buildActivity(
|
||||
ChooseLockPattern.class,
|
||||
new IntentBuilder(application)
|
||||
.setUserId(UserHandle.myUserId())
|
||||
.setForFingerprint(addFingerprintExtra)
|
||||
.build())
|
||||
ChooseLockPattern.class,
|
||||
getLockPatternIntent(addFingerprintExtra))
|
||||
.setup().get();
|
||||
}
|
||||
|
||||
private Intent getLockPatternIntent(boolean addFingerprintExtra) {
|
||||
return new IntentBuilder(application)
|
||||
.setUserId(UserHandle.myUserId())
|
||||
.setForFingerprint(addFingerprintExtra)
|
||||
.build();
|
||||
}
|
||||
|
||||
private LockscreenCredential createPattern(String patternString) {
|
||||
return LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(
|
||||
patternString.getBytes()));
|
||||
|
Reference in New Issue
Block a user