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

Commit 331c3e3b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Dagger] Make SystemUiProxy provided by DaggerSingletonObject" into main

parents 4674c3bb 716a1542
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -54,15 +54,16 @@ import android.window.TransitionFilter;

import androidx.annotation.MainThread;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;

import com.android.internal.logging.InstanceId;
import com.android.internal.util.ScreenshotRequest;
import com.android.internal.view.AppearanceRegion;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.dagger.ApplicationContext;
import com.android.launcher3.dagger.LauncherAppSingleton;
import com.android.launcher3.util.DaggerSingletonObject;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.SafeCloseable;
import com.android.quickstep.dagger.QuickstepBaseAppComponent;
import com.android.quickstep.util.ActiveGestureProtoLogProxy;
import com.android.quickstep.util.ContextualSearchInvoker;
import com.android.quickstep.util.unfold.ProxyUnfoldTransitionProvider;
@@ -109,14 +110,17 @@ import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;

import javax.inject.Inject;

/**
 * Holds the reference to SystemUI.
 */
public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable {
@LauncherAppSingleton
public class SystemUiProxy implements ISystemUiProxy, NavHandle {
    private static final String TAG = "SystemUiProxy";

    public static final MainThreadInitializedObject<SystemUiProxy> INSTANCE =
            new MainThreadInitializedObject<>(SystemUiProxy::new);
    public static final DaggerSingletonObject<SystemUiProxy> INSTANCE =
            new DaggerSingletonObject<>(QuickstepBaseAppComponent::getSystemUiProxy);

    private static final int MSG_SET_SHELF_HEIGHT = 1;
    private static final int MSG_SET_LAUNCHER_KEEP_CLEAR_AREA_HEIGHT = 2;
@@ -188,8 +192,8 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable {
    @Nullable
    private final ProxyUnfoldTransitionProvider mUnfoldTransitionProvider;

    @VisibleForTesting
    protected SystemUiProxy(Context context) {
    @Inject
    public SystemUiProxy(@ApplicationContext Context context) {
        mContext = context;
        mAsyncHandler = new Handler(UI_HELPER_EXECUTOR.getLooper(), this::handleMessageAsync);
        final Intent baseIntent = new Intent().setPackage(mContext.getPackageName());
@@ -205,9 +209,6 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle, SafeCloseable {
                         ? new ProxyUnfoldTransitionProvider() : null;
    }

    @Override
    public void close() { }

    @Override
    public void onBackPressed() {
        if (mSystemUiProxy != null) {
+3 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.quickstep.dagger;
import com.android.launcher3.dagger.LauncherAppComponent;
import com.android.launcher3.dagger.LauncherBaseAppComponent;
import com.android.launcher3.model.WellbeingModel;
import com.android.quickstep.SystemUiProxy;
import com.android.quickstep.util.AsyncClockEventDelegate;

/**
@@ -34,4 +35,6 @@ public interface QuickstepBaseAppComponent extends LauncherBaseAppComponent {
    WellbeingModel getWellbeingModel();

    AsyncClockEventDelegate getAsyncClockEventDelegate();

    SystemUiProxy getSystemUiProxy();
}
+15 −22
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOH
import com.android.launcher3.taskbar.rules.TaskbarModeRule
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.TRANSIENT
import com.android.launcher3.taskbar.rules.TaskbarModeRule.TaskbarMode
import com.android.launcher3.taskbar.rules.TaskbarSandboxComponent
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.InjectController
import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
@@ -33,36 +34,28 @@ import com.android.quickstep.SystemUiProxy
import com.google.common.truth.Truth.assertThat
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestRule
import org.junit.runner.RunWith
import org.junit.runners.model.Statement

@RunWith(LauncherMultivalentJUnit::class)
@EmulatedDevices(["pixelTablet2023"])
class TaskbarAutohideSuspendControllerTest {

    @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
    @get:Rule(order = 1) val animatorTestRule = AnimatorTestRule(this)
    @get:Rule(order = 2)
    val systemUiProxyRule = TestRule { base, _ ->
        object : Statement() {
            override fun evaluate() {
                getInstrumentation().runOnMainSync {
                    context.putObject(
                        SystemUiProxy.INSTANCE,
                        object : SystemUiProxy(context) {
    @get:Rule(order = 0)
    val context =
        TaskbarWindowSandboxContext.create {
            builder: TaskbarSandboxComponent.Builder,
            sandboxContext: TaskbarWindowSandboxContext ->
            builder.bindSystemUiProxy(
                object : SystemUiProxy(sandboxContext) {
                    override fun notifyTaskbarAutohideSuspend(suspend: Boolean) {
                        latestSuspendNotification = suspend
                    }
                        },
                    )
                }
                base.evaluate()
            }
                }
            )
        }
    @get:Rule(order = 3) val taskbarModeRule = TaskbarModeRule(context)
    @get:Rule(order = 4) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
    @get:Rule(order = 1) val animatorTestRule = AnimatorTestRule(this)
    @get:Rule(order = 2) val taskbarModeRule = TaskbarModeRule(context)
    @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)

    @InjectController lateinit var autohideSuspendController: TaskbarAutohideSuspendController
    @InjectController lateinit var stashController: TaskbarStashController
+17 −11
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.launcher3.taskbar.rules.TaskbarModeRule
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.PINNED
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.TRANSIENT
import com.android.launcher3.taskbar.rules.TaskbarModeRule.TaskbarMode
import com.android.launcher3.taskbar.rules.TaskbarSandboxComponent
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.InjectController
import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
@@ -42,7 +43,20 @@ import org.junit.runner.RunWith
@RunWith(LauncherMultivalentJUnit::class)
@EmulatedDevices(["pixelTablet2023"])
class TaskbarScrimViewControllerTest {
    @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
    @get:Rule(order = 0)
    val context =
        TaskbarWindowSandboxContext.create {
            builder: TaskbarSandboxComponent.Builder,
            sandboxContext: TaskbarWindowSandboxContext ->
            builder.bindSystemUiProxy(
                object : SystemUiProxy(sandboxContext) {
                    override fun onBackPressed() {
                        super.onBackPressed()
                        backPressed = true
                    }
                }
            )
        }
    @get:Rule(order = 1) val taskbarModeRule = TaskbarModeRule(context)
    @get:Rule(order = 2) val animatorTestRule = AnimatorTestRule(this)
    @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@@ -53,6 +67,8 @@ class TaskbarScrimViewControllerTest {
    private val animationDuration =
        context.resources.getInteger(android.R.integer.config_mediumAnimTime).toLong()

    private var backPressed = false

    @Test
    @TaskbarMode(PINNED)
    fun testOnTaskbarVisibleChanged_onlyTaskbarVisible_noScrim() {
@@ -130,16 +146,6 @@ class TaskbarScrimViewControllerTest {
    @Test
    @TaskbarMode(PINNED)
    fun testOnClick_scrimShown_performsSystemBack() {
        var backPressed = false
        context.putObject(
            SystemUiProxy.INSTANCE,
            object : SystemUiProxy(context) {
                override fun onBackPressed() {
                    backPressed = true
                }
            },
        )

        getInstrumentation().runOnMainSync {
            scrimViewController.updateStateForSysuiFlags(SYSUI_STATE_BUBBLES_EXPANDED, true)
            scrimViewController.onTaskbarVisibilityChanged(VISIBLE)
+39 −5
Original line number Diff line number Diff line
@@ -24,8 +24,13 @@ import android.view.Display.DEFAULT_DISPLAY
import androidx.test.core.app.ApplicationProvider
import com.android.launcher3.FakeLauncherPrefs
import com.android.launcher3.LauncherPrefs
import com.android.launcher3.dagger.LauncherAppComponent
import com.android.launcher3.dagger.LauncherAppSingleton
import com.android.launcher3.util.MainThreadInitializedObject.ObjectSandbox
import com.android.launcher3.util.SandboxApplication
import com.android.quickstep.SystemUiProxy
import dagger.BindsInstance
import dagger.Component
import org.junit.rules.ExternalResource
import org.junit.rules.RuleChain
import org.junit.rules.TestRule
@@ -50,7 +55,14 @@ private constructor(base: SandboxApplication, val virtualDisplay: VirtualDisplay
        private const val VIRTUAL_DISPLAY_NAME = "TaskbarSandboxDisplay"

        /** Creates a [SandboxApplication] for Taskbar tests. */
        fun create(): TaskbarWindowSandboxContext {
        fun create(
            daggerComponentBinder:
                ((
                    builder: TaskbarSandboxComponent.Builder,
                    sandboxContext: TaskbarWindowSandboxContext,
                ) -> TaskbarSandboxComponent.Builder)? =
                null
        ): TaskbarWindowSandboxContext {
            val base = ApplicationProvider.getApplicationContext<Context>()
            val displayManager = checkNotNull(base.getSystemService(DisplayManager::class.java))

@@ -67,11 +79,22 @@ private constructor(base: SandboxApplication, val virtualDisplay: VirtualDisplay
                    )
                }

            return TaskbarWindowSandboxContext(
                SandboxApplication(base.createDisplayContext(virtualDisplay.display)),
                virtualDisplay,
            val sandboxApplication =
                SandboxApplication(base.createDisplayContext(virtualDisplay.display))
            val taskbarWindowSandboxContext =
                TaskbarWindowSandboxContext(sandboxApplication, virtualDisplay)

            if (daggerComponentBinder != null) {
                sandboxApplication.initDaggerComponent(
                    daggerComponentBinder(
                        DaggerTaskbarSandboxComponent.builder(),
                        taskbarWindowSandboxContext,
                    )
                )
            }

            return taskbarWindowSandboxContext
        }
    }
}

@@ -80,3 +103,14 @@ private fun virtualDisplayRule(virtualDisplay: VirtualDisplay): TestRule {
        override fun after() = virtualDisplay.release()
    }
}

@LauncherAppSingleton
@Component
interface TaskbarSandboxComponent : LauncherAppComponent {
    @Component.Builder
    interface Builder : LauncherAppComponent.Builder {
        @BindsInstance fun bindSystemUiProxy(proxy: SystemUiProxy): Builder

        override fun build(): TaskbarSandboxComponent
    }
}
Loading