Use SetScreenLockDialogActivity to power screen lock setup prompt

With this change, we move to using SetScreenLockDialogActivity to enable
the prompt to set up the screen lock. This prompt is shown whenever
someone taps the private space settings page option to either
setup/unlock the space. We will also be using the same dialog prompt in
other places in the framework
(UserManagerService.requestQuietModeEnabled) as well.

Test: atest PrivateSpaceAuthenticationActivityTest
Bug: 316129700
Flag: android.multiuser.show_set_screen_lock_dialog
Change-Id: Ib9fe009d3b36e0eea242fbf894e616b1efcb9d6b
This commit is contained in:
Jigar Thakkar
2024-02-14 21:01:17 +00:00
parent faba808e5e
commit 5bbc1166f3
2 changed files with 36 additions and 20 deletions

View File

@@ -18,6 +18,8 @@ package com.android.settings.privatespace;
import static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PASSWORD; import static android.app.admin.DevicePolicyManager.ACTION_SET_NEW_PASSWORD;
import static com.android.internal.app.SetScreenLockDialogActivity.LAUNCH_REASON_PRIVATE_SPACE_SETTINGS_ACCESS;
import android.app.ActivityOptions; import android.app.ActivityOptions;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.KeyguardManager; import android.app.KeyguardManager;
@@ -37,6 +39,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.SetScreenLockDialogActivity;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.transition.SettingsTransitionHelper; import com.android.settingslib.transition.SettingsTransitionHelper;
@@ -112,23 +115,31 @@ public class PrivateSpaceAuthenticationActivity extends FragmentActivity {
private void promptToSetDeviceLock() { private void promptToSetDeviceLock() {
Log.d(TAG, "Show prompt to set device lock before using private space feature"); Log.d(TAG, "Show prompt to set device lock before using private space feature");
new AlertDialog.Builder(this) if (android.multiuser.Flags.showSetScreenLockDialog()) {
.setTitle(R.string.no_device_lock_title) Intent setScreenLockPromptIntent =
.setMessage(R.string.no_device_lock_summary) SetScreenLockDialogActivity
.setPositiveButton( .createBaseIntent(LAUNCH_REASON_PRIVATE_SPACE_SETTINGS_ACCESS);
R.string.no_device_lock_action_label, startActivity(setScreenLockPromptIntent);
(DialogInterface dialog, int which) -> { finish();
Log.d(TAG, "Start activity to set new device lock"); } else {
mSetDeviceLock.launch(new Intent(ACTION_SET_NEW_PASSWORD)); new AlertDialog.Builder(this)
}) .setTitle(R.string.no_device_lock_title)
.setNegativeButton( .setMessage(R.string.no_device_lock_summary)
R.string.no_device_lock_cancel, .setPositiveButton(
(DialogInterface dialog, int which) -> finish()) R.string.no_device_lock_action_label,
.setOnCancelListener( (DialogInterface dialog, int which) -> {
(DialogInterface dialog) -> { Log.d(TAG, "Start activity to set new device lock");
finish(); mSetDeviceLock.launch(new Intent(ACTION_SET_NEW_PASSWORD));
}) })
.show(); .setNegativeButton(
R.string.no_device_lock_cancel,
(DialogInterface dialog, int which) -> finish())
.setOnCancelListener(
(DialogInterface dialog) -> {
finish();
})
.show();
}
} }
private KeyguardManager getKeyguardManager() { private KeyguardManager getKeyguardManager() {

View File

@@ -18,9 +18,11 @@ package com.android.settings.ui.privatespace
import android.os.Flags import android.os.Flags
import android.platform.test.annotations.RequiresFlagsDisabled
import android.platform.test.annotations.RequiresFlagsEnabled import android.platform.test.annotations.RequiresFlagsEnabled
import android.platform.test.flag.junit.DeviceFlagsValueProvider import android.platform.test.flag.junit.DeviceFlagsValueProvider
import android.provider.Settings import android.provider.Settings
import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By import androidx.test.uiautomator.By
@@ -77,15 +79,18 @@ class PrivateSpaceAuthenticationActivityTest {
Thread.sleep(1000) Thread.sleep(1000)
device.assertHasTexts(listOf(SET_LOCK_BUTTON,CANCEL_TEXT)) device.assertHasTexts(listOf(SET_LOCK_BUTTON,CANCEL_TEXT))
device.clickObject(By.text(SET_LOCK_BUTTON)) device.clickObject(By.text(SET_LOCK_BUTTON))
device.assertHasTexts(listOf(LOCK_SCREEN_TITLE)) Thread.sleep(1000)
device.assertHasTexts(listOf(PATTERN_TEXT, PIN_TEXT, PASSWORD_TEXT))
} }
private companion object { private companion object {
// Items we really want to always show // Items we really want to always show
val PRIVATE_SPACE_SETTING = "Private Space" val PRIVATE_SPACE_SETTING = "Private space"
const val SET_LOCK_BUTTON = "Set screen lock" const val SET_LOCK_BUTTON = "Set screen lock"
val CANCEL_TEXT = "Cancel" val CANCEL_TEXT = "Cancel"
val DIALOG_TITLE = "Set a screen lock" val DIALOG_TITLE = "Set a screen lock"
val LOCK_SCREEN_TITLE = "Choose screen lock" val PATTERN_TEXT = "Pattern"
val PIN_TEXT = "PIN"
val PASSWORD_TEXT = "Password"
} }
} }