Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1c43eaa authored by omarmt's avatar omarmt
Browse files

Add support for Predictive Back in CreateUserActivity

Test: atest CreateUserActivityTest
Bug: 254840316
Change-Id: I9d00c114ae38e72f11678dab93d3feaf222463d1
parent a1d923e1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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",
+18 −1
Original line number Diff line number Diff line
@@ -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) {
+6 −0
Original line number Diff line number Diff line
@@ -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"
+55 −0
Original line number Diff line number Diff line
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()
        }
    }
}