Merge "Add support for Predictive Back in CreateUserActivity" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
78b5de4a42
@@ -223,6 +223,7 @@ android_library {
|
|||||||
"androidx.test.rules",
|
"androidx.test.rules",
|
||||||
"androidx.test.uiautomator",
|
"androidx.test.uiautomator",
|
||||||
"mockito-target-extended-minus-junit4",
|
"mockito-target-extended-minus-junit4",
|
||||||
|
"androidx.test.ext.junit",
|
||||||
"testables",
|
"testables",
|
||||||
"truth-prebuilt",
|
"truth-prebuilt",
|
||||||
"monet",
|
"monet",
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ import android.graphics.drawable.Drawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.window.OnBackInvokedCallback;
|
||||||
|
import android.window.OnBackInvokedDispatcher;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@@ -59,6 +61,7 @@ public class CreateUserActivity extends Activity {
|
|||||||
private final ActivityStarter mActivityStarter;
|
private final ActivityStarter mActivityStarter;
|
||||||
|
|
||||||
private Dialog mSetupUserDialog;
|
private Dialog mSetupUserDialog;
|
||||||
|
private final OnBackInvokedCallback mBackCallback = this::onBackInvoked;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public CreateUserActivity(UserCreator userCreator,
|
public CreateUserActivity(UserCreator userCreator,
|
||||||
@@ -82,6 +85,10 @@ public class CreateUserActivity extends Activity {
|
|||||||
|
|
||||||
mSetupUserDialog = createDialog();
|
mSetupUserDialog = createDialog();
|
||||||
mSetupUserDialog.show();
|
mSetupUserDialog.show();
|
||||||
|
|
||||||
|
getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
|
||||||
|
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
|
||||||
|
mBackCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -125,10 +132,20 @@ public class CreateUserActivity extends Activity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
super.onBackPressed();
|
onBackInvoked();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onBackInvoked() {
|
||||||
if (mSetupUserDialog != null) {
|
if (mSetupUserDialog != null) {
|
||||||
mSetupUserDialog.dismiss();
|
mSetupUserDialog.dismiss();
|
||||||
}
|
}
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(mBackCallback);
|
||||||
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addUserNow(String userName, Drawable userIcon) {
|
private void addUserNow(String userName, Drawable userIcon) {
|
||||||
|
|||||||
@@ -106,6 +106,12 @@
|
|||||||
android:finishOnCloseSystemDialogs="true"
|
android:finishOnCloseSystemDialogs="true"
|
||||||
android:excludeFromRecents="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
|
<provider
|
||||||
android:name="androidx.startup.InitializationProvider"
|
android:name="androidx.startup.InitializationProvider"
|
||||||
tools:replace="android:authorities"
|
tools:replace="android:authorities"
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user