Loading src/com/android/settings/password/ChooseLockSettingsHelper.java +34 −9 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.ActivityOptions; import android.app.KeyguardManager; import android.app.RemoteLockscreenValidationSession; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentSender; import android.os.Bundle; import android.os.UserManager; import android.util.Log; Loading Loading @@ -147,7 +149,8 @@ public final class ChooseLockSettingsHelper { private boolean mRemoteLockscreenValidation; @Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession; @Nullable private ComponentName mRemoteLockscreenValidationServiceComponent; boolean mRequestGatekeeperPasswordHandle; private boolean mRequestGatekeeperPasswordHandle; private boolean mTaskOverlay; public Builder(@NonNull Activity activity) { mActivity = activity; Loading Loading @@ -252,6 +255,14 @@ public final class ChooseLockSettingsHelper { return this; } /** * @param taskOverlay specifies whether the activity should be launched as a task overlay. */ @NonNull public Builder setTaskOverlay(boolean taskOverlay) { mTaskOverlay = taskOverlay; return this; } /** * @param foregroundOnly if true, the confirmation activity will be finished if it loses * foreground. Loading Loading @@ -371,7 +382,8 @@ public final class ChooseLockSettingsHelper { mBuilder.mCheckBoxLabel, mBuilder.mRemoteLockscreenValidation, mBuilder.mRemoteLockscreenValidationSession, mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId, mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle); mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle, mBuilder.mTaskOverlay); } private boolean launchConfirmationActivity(int request, @Nullable CharSequence title, Loading @@ -381,7 +393,8 @@ public final class ChooseLockSettingsHelper { @Nullable CharSequence checkboxLabel, boolean remoteLockscreenValidation, @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession, @Nullable ComponentName remoteLockscreenValidationServiceComponent, boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) { boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle, boolean taskOverlay) { Optional<Class<?>> activityClass = determineAppropriateActivityClass( returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession); if (activityClass.isEmpty()) { Loading @@ -392,7 +405,7 @@ public final class ChooseLockSettingsHelper { returnCredentials, external, forceVerifyPath, userId, alternateButton, checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession, remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly, requestGatekeeperPasswordHandle); requestGatekeeperPasswordHandle, taskOverlay); } private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header, Loading @@ -402,7 +415,8 @@ public final class ChooseLockSettingsHelper { boolean remoteLockscreenValidation, @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession, @Nullable ComponentName remoteLockscreenValidationServiceComponent, boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) { boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle, boolean taskOverlay) { final Intent intent = new Intent(); intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title); intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header); Loading Loading @@ -434,28 +448,39 @@ public final class ChooseLockSettingsHelper { Intent inIntent = mFragment != null ? mFragment.getActivity().getIntent() : mActivity.getIntent(); copyInternalExtras(inIntent, intent); Bundle launchOptions = createLaunchOptions(taskOverlay); if (external) { intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); copyOptionalExtras(inIntent, intent); if (mActivityResultLauncher != null) { mActivityResultLauncher.launch(intent); } else if (mFragment != null) { mFragment.startActivity(intent); mFragment.startActivity(intent, launchOptions); } else { mActivity.startActivity(intent); mActivity.startActivity(intent, launchOptions); } } else { if (mActivityResultLauncher != null) { mActivityResultLauncher.launch(intent); } else if (mFragment != null) { mFragment.startActivityForResult(intent, request); mFragment.startActivityForResult(intent, request, launchOptions); } else { mActivity.startActivityForResult(intent, request); mActivity.startActivityForResult(intent, request, launchOptions); } } return true; } private Bundle createLaunchOptions(boolean taskOverlay) { if (!taskOverlay) { return null; } ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchTaskId(mActivity.getTaskId()); options.setTaskOverlay(true /* taskOverlay */, true /* canResume */); return options.toBundle(); } private Optional<Integer> passwordQualityToLockTypes(int quality) { switch (quality) { case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: Loading src/com/android/settings/password/ConfirmDeviceCredentialActivity.java +11 −33 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROF import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN; import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN; import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; import android.app.Activity; import android.app.KeyguardManager; import android.app.RemoteLockscreenValidationSession; Loading Loading @@ -63,13 +61,6 @@ import java.util.concurrent.Executor; public class ConfirmDeviceCredentialActivity extends FragmentActivity { public static final String TAG = ConfirmDeviceCredentialActivity.class.getSimpleName(); /** * If the intent is sent from {@link com.android.systemui.keyguard.WorkLockActivityController} * then check for device policy management flags. */ public static final String EXTRA_FROM_WORK_LOCK_ACTIVITY_CONTROLLER = "from_work_lock_activity_controller"; // The normal flow that apps go through private static final int CREDENTIAL_NORMAL = 1; // Unlocks the managed profile when the primary profile is unlocked Loading @@ -80,15 +71,6 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { public static class InternalActivity extends ConfirmDeviceCredentialActivity { } public static Intent createIntent(CharSequence title, CharSequence details) { Intent intent = new Intent(); intent.setClassName(SETTINGS_PACKAGE_NAME, ConfirmDeviceCredentialActivity.class.getName()); intent.putExtra(KeyguardManager.EXTRA_TITLE, title); intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION, details); return intent; } private BiometricFragment mBiometricFragment; private DevicePolicyManager mDevicePolicyManager; private LockPatternUtils mLockPatternUtils; Loading @@ -97,6 +79,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { private Handler mHandler = new Handler(Looper.getMainLooper()); private Context mContext; private boolean mCheckDevicePolicyManager; private boolean mTaskOverlay; private String mTitle; private CharSequence mDetails; Loading Loading @@ -186,6 +169,8 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { boolean frp = KeyguardManager.ACTION_CONFIRM_FRP_CREDENTIAL.equals(intent.getAction()); boolean remoteValidation = KeyguardManager.ACTION_CONFIRM_REMOTE_DEVICE_CREDENTIAL.equals(intent.getAction()); mTaskOverlay = isInternalActivity() && intent.getBooleanExtra(KeyguardManager.EXTRA_FORCE_TASK_OVERLAY, false); mUserId = UserHandle.myUserId(); if (isInternalActivity()) { Loading Loading @@ -417,6 +402,12 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { */ private void showConfirmCredentials() { boolean launched = false; ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this) .setHeader(mTitle) .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .setTaskOverlay(mTaskOverlay); // The only difference between CREDENTIAL_MANAGED and CREDENTIAL_NORMAL is that for // CREDENTIAL_MANAGED, we launch the real confirm credential activity with an explicit // but fake challenge value (0L). This will result in ConfirmLockPassword calling Loading @@ -429,22 +420,9 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { // LockPatternChecker and LockPatternUtils. verifyPassword should be the only API to use, // which optionally accepts a challenge. if (mCredentialMode == CREDENTIAL_MANAGED) { final ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this); launched = builder.setHeader(mTitle) .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .setForceVerifyPath(true) .show(); launched = builder.setForceVerifyPath(true).show(); } else if (mCredentialMode == CREDENTIAL_NORMAL) { final ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this); launched = builder.setHeader(mTitle) // Show the title string in the header area .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .show(); launched = builder.show(); } if (!launched) { Log.d(TAG, "No pin/pattern/pass set"); Loading Loading
src/com/android/settings/password/ChooseLockSettingsHelper.java +34 −9 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Activity; import android.app.ActivityOptions; import android.app.KeyguardManager; import android.app.RemoteLockscreenValidationSession; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import android.content.Intent; import android.content.IntentSender; import android.os.Bundle; import android.os.UserManager; import android.util.Log; Loading Loading @@ -147,7 +149,8 @@ public final class ChooseLockSettingsHelper { private boolean mRemoteLockscreenValidation; @Nullable private RemoteLockscreenValidationSession mRemoteLockscreenValidationSession; @Nullable private ComponentName mRemoteLockscreenValidationServiceComponent; boolean mRequestGatekeeperPasswordHandle; private boolean mRequestGatekeeperPasswordHandle; private boolean mTaskOverlay; public Builder(@NonNull Activity activity) { mActivity = activity; Loading Loading @@ -252,6 +255,14 @@ public final class ChooseLockSettingsHelper { return this; } /** * @param taskOverlay specifies whether the activity should be launched as a task overlay. */ @NonNull public Builder setTaskOverlay(boolean taskOverlay) { mTaskOverlay = taskOverlay; return this; } /** * @param foregroundOnly if true, the confirmation activity will be finished if it loses * foreground. Loading Loading @@ -371,7 +382,8 @@ public final class ChooseLockSettingsHelper { mBuilder.mCheckBoxLabel, mBuilder.mRemoteLockscreenValidation, mBuilder.mRemoteLockscreenValidationSession, mBuilder.mRemoteLockscreenValidationServiceComponent, mBuilder.mAllowAnyUserId, mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle); mBuilder.mForegroundOnly, mBuilder.mRequestGatekeeperPasswordHandle, mBuilder.mTaskOverlay); } private boolean launchConfirmationActivity(int request, @Nullable CharSequence title, Loading @@ -381,7 +393,8 @@ public final class ChooseLockSettingsHelper { @Nullable CharSequence checkboxLabel, boolean remoteLockscreenValidation, @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession, @Nullable ComponentName remoteLockscreenValidationServiceComponent, boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) { boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle, boolean taskOverlay) { Optional<Class<?>> activityClass = determineAppropriateActivityClass( returnCredentials, forceVerifyPath, userId, remoteLockscreenValidationSession); if (activityClass.isEmpty()) { Loading @@ -392,7 +405,7 @@ public final class ChooseLockSettingsHelper { returnCredentials, external, forceVerifyPath, userId, alternateButton, checkboxLabel, remoteLockscreenValidation, remoteLockscreenValidationSession, remoteLockscreenValidationServiceComponent, allowAnyUser, foregroundOnly, requestGatekeeperPasswordHandle); requestGatekeeperPasswordHandle, taskOverlay); } private boolean launchConfirmationActivity(int request, CharSequence title, CharSequence header, Loading @@ -402,7 +415,8 @@ public final class ChooseLockSettingsHelper { boolean remoteLockscreenValidation, @Nullable RemoteLockscreenValidationSession remoteLockscreenValidationSession, @Nullable ComponentName remoteLockscreenValidationServiceComponent, boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle) { boolean allowAnyUser, boolean foregroundOnly, boolean requestGatekeeperPasswordHandle, boolean taskOverlay) { final Intent intent = new Intent(); intent.putExtra(ConfirmDeviceCredentialBaseFragment.TITLE_TEXT, title); intent.putExtra(ConfirmDeviceCredentialBaseFragment.HEADER_TEXT, header); Loading Loading @@ -434,28 +448,39 @@ public final class ChooseLockSettingsHelper { Intent inIntent = mFragment != null ? mFragment.getActivity().getIntent() : mActivity.getIntent(); copyInternalExtras(inIntent, intent); Bundle launchOptions = createLaunchOptions(taskOverlay); if (external) { intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); copyOptionalExtras(inIntent, intent); if (mActivityResultLauncher != null) { mActivityResultLauncher.launch(intent); } else if (mFragment != null) { mFragment.startActivity(intent); mFragment.startActivity(intent, launchOptions); } else { mActivity.startActivity(intent); mActivity.startActivity(intent, launchOptions); } } else { if (mActivityResultLauncher != null) { mActivityResultLauncher.launch(intent); } else if (mFragment != null) { mFragment.startActivityForResult(intent, request); mFragment.startActivityForResult(intent, request, launchOptions); } else { mActivity.startActivityForResult(intent, request); mActivity.startActivityForResult(intent, request, launchOptions); } } return true; } private Bundle createLaunchOptions(boolean taskOverlay) { if (!taskOverlay) { return null; } ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchTaskId(mActivity.getTaskId()); options.setTaskOverlay(true /* taskOverlay */, true /* canResume */); return options.toBundle(); } private Optional<Integer> passwordQualityToLockTypes(int quality) { switch (quality) { case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: Loading
src/com/android/settings/password/ConfirmDeviceCredentialActivity.java +11 −33 Original line number Diff line number Diff line Loading @@ -24,8 +24,6 @@ import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROF import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PATTERN; import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_CONFIRM_PIN; import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; import android.app.Activity; import android.app.KeyguardManager; import android.app.RemoteLockscreenValidationSession; Loading Loading @@ -63,13 +61,6 @@ import java.util.concurrent.Executor; public class ConfirmDeviceCredentialActivity extends FragmentActivity { public static final String TAG = ConfirmDeviceCredentialActivity.class.getSimpleName(); /** * If the intent is sent from {@link com.android.systemui.keyguard.WorkLockActivityController} * then check for device policy management flags. */ public static final String EXTRA_FROM_WORK_LOCK_ACTIVITY_CONTROLLER = "from_work_lock_activity_controller"; // The normal flow that apps go through private static final int CREDENTIAL_NORMAL = 1; // Unlocks the managed profile when the primary profile is unlocked Loading @@ -80,15 +71,6 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { public static class InternalActivity extends ConfirmDeviceCredentialActivity { } public static Intent createIntent(CharSequence title, CharSequence details) { Intent intent = new Intent(); intent.setClassName(SETTINGS_PACKAGE_NAME, ConfirmDeviceCredentialActivity.class.getName()); intent.putExtra(KeyguardManager.EXTRA_TITLE, title); intent.putExtra(KeyguardManager.EXTRA_DESCRIPTION, details); return intent; } private BiometricFragment mBiometricFragment; private DevicePolicyManager mDevicePolicyManager; private LockPatternUtils mLockPatternUtils; Loading @@ -97,6 +79,7 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { private Handler mHandler = new Handler(Looper.getMainLooper()); private Context mContext; private boolean mCheckDevicePolicyManager; private boolean mTaskOverlay; private String mTitle; private CharSequence mDetails; Loading Loading @@ -186,6 +169,8 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { boolean frp = KeyguardManager.ACTION_CONFIRM_FRP_CREDENTIAL.equals(intent.getAction()); boolean remoteValidation = KeyguardManager.ACTION_CONFIRM_REMOTE_DEVICE_CREDENTIAL.equals(intent.getAction()); mTaskOverlay = isInternalActivity() && intent.getBooleanExtra(KeyguardManager.EXTRA_FORCE_TASK_OVERLAY, false); mUserId = UserHandle.myUserId(); if (isInternalActivity()) { Loading Loading @@ -417,6 +402,12 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { */ private void showConfirmCredentials() { boolean launched = false; ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this) .setHeader(mTitle) .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .setTaskOverlay(mTaskOverlay); // The only difference between CREDENTIAL_MANAGED and CREDENTIAL_NORMAL is that for // CREDENTIAL_MANAGED, we launch the real confirm credential activity with an explicit // but fake challenge value (0L). This will result in ConfirmLockPassword calling Loading @@ -429,22 +420,9 @@ public class ConfirmDeviceCredentialActivity extends FragmentActivity { // LockPatternChecker and LockPatternUtils. verifyPassword should be the only API to use, // which optionally accepts a challenge. if (mCredentialMode == CREDENTIAL_MANAGED) { final ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this); launched = builder.setHeader(mTitle) .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .setForceVerifyPath(true) .show(); launched = builder.setForceVerifyPath(true).show(); } else if (mCredentialMode == CREDENTIAL_NORMAL) { final ChooseLockSettingsHelper.Builder builder = new ChooseLockSettingsHelper.Builder(this); launched = builder.setHeader(mTitle) // Show the title string in the header area .setDescription(mDetails) .setExternal(true) .setUserId(mUserId) .show(); launched = builder.show(); } if (!launched) { Log.d(TAG, "No pin/pattern/pass set"); Loading