Add support for Predictive Back in CreateUserActivity
Test: atest CreateUserActivityTest
Bug: 254840316
Change-Id: I9d00c114ae38e72f11678dab93d3feaf222463d1
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 6d54270..540ca04 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -223,6 +223,7 @@
"androidx.test.rules",
"androidx.test.uiautomator",
"mockito-target-extended-minus-junit4",
+ "androidx.test.ext.junit",
"testables",
"truth-prebuilt",
"monet",
diff --git a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
index f017126..b56c403 100644
--- a/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/user/CreateUserActivity.java
@@ -25,6 +25,8 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
+import android.window.OnBackInvokedCallback;
+import android.window.OnBackInvokedDispatcher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -59,6 +61,7 @@
private final ActivityStarter mActivityStarter;
private Dialog mSetupUserDialog;
+ private final OnBackInvokedCallback mBackCallback = this::onBackInvoked;
@Inject
public CreateUserActivity(UserCreator userCreator,
@@ -82,6 +85,10 @@
mSetupUserDialog = createDialog();
mSetupUserDialog.show();
+
+ getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
+ OnBackInvokedDispatcher.PRIORITY_DEFAULT,
+ mBackCallback);
}
@Override
@@ -125,10 +132,20 @@
@Override
public void onBackPressed() {
- super.onBackPressed();
+ onBackInvoked();
+ }
+
+ private void onBackInvoked() {
if (mSetupUserDialog != null) {
mSetupUserDialog.dismiss();
}
+ finish();
+ }
+
+ @Override
+ protected void onDestroy() {
+ getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mBackCallback);
+ super.onDestroy();
}
private void addUserNow(String userName, Drawable userIcon) {
diff --git a/packages/SystemUI/tests/AndroidManifest.xml b/packages/SystemUI/tests/AndroidManifest.xml
index 1b404a8..e51236b 100644
--- a/packages/SystemUI/tests/AndroidManifest.xml
+++ b/packages/SystemUI/tests/AndroidManifest.xml
@@ -106,6 +106,12 @@
android:finishOnCloseSystemDialogs="true"
android:excludeFromRecents="true" />
+ <activity android:name=".user.CreateUserActivityTest$CreateUserActivityTestable"
+ android:exported="false"
+ android:theme="@style/Theme.SystemUI.Dialog.Alert"
+ android:finishOnCloseSystemDialogs="true"
+ android:excludeFromRecents="true" />
+
<provider
android:name="androidx.startup.InitializationProvider"
tools:replace="android:authorities"
diff --git a/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt b/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt
new file mode 100644
index 0000000..51afbcb
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/user/CreateUserActivityTest.kt
@@ -0,0 +1,55 @@
+package com.android.systemui.user
+
+import android.app.Dialog
+import android.testing.AndroidTestingRunner
+import android.testing.TestableLooper
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.filters.SmallTest
+import com.android.systemui.SysuiTestCase
+import com.android.systemui.util.mockito.mock
+import com.android.systemui.util.mockito.nullable
+import com.android.systemui.util.mockito.whenever
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidTestingRunner::class)
+@SmallTest
[email protected]
+class CreateUserActivityTest : SysuiTestCase() {
+ open class CreateUserActivityTestable :
+ CreateUserActivity(
+ /* userCreator = */ mock(),
+ /* editUserInfoController = */ mock {
+ val dialog: Dialog = mock()
+ whenever(
+ createDialog(
+ /* activity = */ nullable(),
+ /* activityStarter = */ nullable(),
+ /* oldUserIcon = */ nullable(),
+ /* defaultUserName = */ nullable(),
+ /* title = */ nullable(),
+ /* successCallback = */ nullable(),
+ /* cancelCallback = */ nullable()
+ )
+ )
+ .thenReturn(dialog)
+ },
+ /* activityManager = */ mock(),
+ /* activityStarter = */ mock(),
+ )
+
+ @get:Rule val activityRule = ActivityScenarioRule(CreateUserActivityTestable::class.java)
+
+ @Test
+ fun onBackPressed_finishActivity() {
+ activityRule.scenario.onActivity { activity ->
+ assertThat(activity.isFinishing).isFalse()
+
+ activity.onBackPressed()
+
+ assertThat(activity.isFinishing).isTrue()
+ }
+ }
+}