Add support for Predictive Back in CreateUserActivity

Test: atest CreateUserActivityTest
Bug: 254840316
Change-Id: I9d00c114ae38e72f11678dab93d3feaf222463d1
This commit is contained in:
omarmt
2022-10-21 14:39:43 +00:00
parent a1d923e11f
commit d1c43eaa15
4 changed files with 80 additions and 1 deletions

View File

@@ -223,6 +223,7 @@ android_library {
"androidx.test.rules",
"androidx.test.uiautomator",
"mockito-target-extended-minus-junit4",
"androidx.test.ext.junit",
"testables",
"truth-prebuilt",
"monet",

View File

@@ -25,6 +25,8 @@ import android.graphics.drawable.Drawable;
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 @@ public class CreateUserActivity extends Activity {
private final ActivityStarter mActivityStarter;
private Dialog mSetupUserDialog;
private final OnBackInvokedCallback mBackCallback = this::onBackInvoked;
@Inject
public CreateUserActivity(UserCreator userCreator,
@@ -82,6 +85,10 @@ public class CreateUserActivity extends Activity {
mSetupUserDialog = createDialog();
mSetupUserDialog.show();
getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
mBackCallback);
}
@Override
@@ -125,10 +132,20 @@ public class CreateUserActivity extends Activity {
@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) {

View File

@@ -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"

View File

@@ -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
@TestableLooper.RunWithLooper
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()
}
}
}