Reduce jank in security lock selection by finishing on return
Earlier the finish of the chooser was happening before the pattern/pin chooser was started, resulting in two transitions. This change defers the finish to after returning from the other activity. There is still sometimes a very small glitch on the way back, but much smaller than the current problem. Bug: 7342594 Change-Id: I5f4f4393b841ce31dc7236074381283155ebddbd
This commit is contained in:
@@ -59,6 +59,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
private static final String PASSWORD_CONFIRMED = "password_confirmed";
|
private static final String PASSWORD_CONFIRMED = "password_confirmed";
|
||||||
private static final String CONFIRM_CREDENTIALS = "confirm_credentials";
|
private static final String CONFIRM_CREDENTIALS = "confirm_credentials";
|
||||||
private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation";
|
private static final String WAITING_FOR_CONFIRMATION = "waiting_for_confirmation";
|
||||||
|
private static final String FINISH_PENDING = "finish_pending";
|
||||||
public static final String MINIMUM_QUALITY_KEY = "minimum_quality";
|
public static final String MINIMUM_QUALITY_KEY = "minimum_quality";
|
||||||
|
|
||||||
private static final boolean ALWAY_SHOW_TUTORIAL = true;
|
private static final boolean ALWAY_SHOW_TUTORIAL = true;
|
||||||
@@ -68,6 +69,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
private KeyStore mKeyStore;
|
private KeyStore mKeyStore;
|
||||||
private boolean mPasswordConfirmed = false;
|
private boolean mPasswordConfirmed = false;
|
||||||
private boolean mWaitingForConfirmation = false;
|
private boolean mWaitingForConfirmation = false;
|
||||||
|
private boolean mFinishPending = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@@ -85,6 +87,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED);
|
mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED);
|
||||||
mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION);
|
mWaitingForConfirmation = savedInstanceState.getBoolean(WAITING_FOR_CONFIRMATION);
|
||||||
|
mFinishPending = savedInstanceState.getBoolean(FINISH_PENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPasswordConfirmed) {
|
if (mPasswordConfirmed) {
|
||||||
@@ -101,7 +104,14 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
if (mFinishPending) {
|
||||||
|
mFinishPending = false;
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
|
||||||
@@ -170,6 +180,7 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
// Saved so we don't force user to re-enter their password if configuration changes
|
// Saved so we don't force user to re-enter their password if configuration changes
|
||||||
outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed);
|
outState.putBoolean(PASSWORD_CONFIRMED, mPasswordConfirmed);
|
||||||
outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation);
|
outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation);
|
||||||
|
outState.putBoolean(FINISH_PENDING, mFinishPending);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updatePreferencesOrFinish() {
|
private void updatePreferencesOrFinish() {
|
||||||
@@ -352,10 +363,11 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
intent.putExtra(CONFIRM_CREDENTIALS, false);
|
intent.putExtra(CONFIRM_CREDENTIALS, false);
|
||||||
intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK,
|
intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK,
|
||||||
isFallback);
|
isFallback);
|
||||||
if(isFallback) {
|
if (isFallback) {
|
||||||
startActivityForResult(intent, FALLBACK_REQUEST);
|
startActivityForResult(intent, FALLBACK_REQUEST);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
mFinishPending = true;
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
@@ -369,22 +381,26 @@ public class ChooseLockGeneric extends PreferenceActivity {
|
|||||||
intent.putExtra(CONFIRM_CREDENTIALS, false);
|
intent.putExtra(CONFIRM_CREDENTIALS, false);
|
||||||
intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK,
|
intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK,
|
||||||
isFallback);
|
isFallback);
|
||||||
if(isFallback) {
|
if (isFallback) {
|
||||||
startActivityForResult(intent, FALLBACK_REQUEST);
|
startActivityForResult(intent, FALLBACK_REQUEST);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
mFinishPending = true;
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
}
|
}
|
||||||
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
|
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
|
||||||
Intent intent = getBiometricSensorIntent();
|
Intent intent = getBiometricSensorIntent();
|
||||||
|
mFinishPending = true;
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
|
} else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
|
||||||
mChooseLockSettingsHelper.utils().clearLock(false);
|
mChooseLockSettingsHelper.utils().clearLock(false);
|
||||||
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled);
|
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled);
|
||||||
getActivity().setResult(Activity.RESULT_OK);
|
getActivity().setResult(Activity.RESULT_OK);
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
finish();
|
||||||
}
|
}
|
||||||
finish();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user