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

Commit abb4d087 authored by Eghosa Ewansiha-Vlachavas's avatar Eghosa Ewansiha-Vlachavas Committed by Android (Google) Code Review
Browse files

Merge "[1/n] Hide desktop button in overview for incompatible tasks" into main

parents f3bac3d6 c2bb2751
Loading
Loading
Loading
Loading
+20 −12
Original line number Diff line number Diff line
@@ -14,20 +14,18 @@
 * limitations under the License.
 */

package com.android.wm.shell.compatui
package com.android.wm.shell.shared.desktopmode

import android.app.ActivityManager.RunningTaskInfo
import android.app.TaskInfo
import android.content.Context
import android.window.DesktopModeFlags
import com.android.internal.R
import com.android.wm.shell.dagger.WMSingleton
import javax.inject.Inject

/**
 * Class to decide whether to apply app compat policies in desktop mode.
 */
// TODO(b/347289970): Consider replacing with API
@WMSingleton
class DesktopModeCompatPolicy @Inject constructor(context: Context) {
class DesktopModeCompatPolicy(context: Context) {

    private val systemUiPackage: String = context.resources.getString(R.string.config_systemUi)

@@ -37,16 +35,26 @@ class DesktopModeCompatPolicy @Inject constructor(context: Context) {
     * not being displayed, regardless of its configuration, we will not exempt it as to remain in
     * the desktop windowing environment.
     */
    fun isTopActivityExemptFromDesktopWindowing(task: RunningTaskInfo) =
        (isSystemUiTask(task) || isTransparentTask(task)) && !task.isTopActivityNoDisplay
    fun isTopActivityExemptFromDesktopWindowing(task: TaskInfo) =
        isTopActivityExemptFromDesktopWindowing(task.baseActivity?.packageName,
            task.numActivities, task.isTopActivityNoDisplay, task.isActivityStackTransparent)

    fun isTopActivityExemptFromDesktopWindowing(packageName: String?,
        numActivities: Int, isTopActivityNoDisplay: Boolean, isActivityStackTransparent: Boolean) =
        DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue
                && ((isSystemUiTask(packageName)
                || isTransparentTask(isActivityStackTransparent, numActivities))
                && !isTopActivityNoDisplay)

    /**
     * Returns true if all activities in a tasks stack are transparent. If there are no activities
     * will return false.
     */
    fun isTransparentTask(task: RunningTaskInfo): Boolean = task.isActivityStackTransparent
            && task.numActivities > 0
    fun isTransparentTask(task: TaskInfo): Boolean =
        isTransparentTask(task.isActivityStackTransparent, task.numActivities)

    private fun isTransparentTask(isActivityStackTransparent: Boolean, numActivities: Int) =
        isActivityStackTransparent && numActivities > 0

    private fun isSystemUiTask(task: RunningTaskInfo): Boolean =
        task.baseActivity?.packageName == systemUiPackage
    private fun isSystemUiTask(packageName: String?) = packageName == systemUiPackage
}
+7 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.annotations.ShellAnimationThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.annotations.ShellSplashscreenThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.splitscreen.SplitScreen;
import com.android.wm.shell.splitscreen.SplitScreenController;
@@ -256,6 +257,12 @@ public abstract class WMShellBaseModule {
                mainExecutor);
    }

    @WMSingleton
    @Provides
    static DesktopModeCompatPolicy provideDesktopModeCompatPolicy(Context context) {
        return new DesktopModeCompatPolicy(context);
    }

    @WMSingleton
    @Provides
    static Optional<CompatUIHandler> provideCompatUIController(
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.common.TaskStackListenerImpl;
import com.android.wm.shell.common.UserProfileContexts;
import com.android.wm.shell.common.split.SplitState;
import com.android.wm.shell.compatui.DesktopModeCompatPolicy;
import com.android.wm.shell.compatui.letterbox.LetterboxCommandHandler;
import com.android.wm.shell.compatui.letterbox.LetterboxTransitionObserver;
import com.android.wm.shell.dagger.back.ShellBackAnimationModule;
@@ -133,6 +132,7 @@ import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.annotations.ShellAnimationThread;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.sysui.ShellCommandHandler;
+3 −7
Original line number Diff line number Diff line
@@ -86,7 +86,6 @@ import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.common.SingleInstanceRemoteListener
import com.android.wm.shell.common.SyncTransactionQueue
import com.android.wm.shell.common.UserProfileContexts
import com.android.wm.shell.compatui.DesktopModeCompatPolicy
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.MinimizeReason
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger
@@ -115,6 +114,7 @@ import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_ST
import com.android.wm.shell.shared.TransitionUtil
import com.android.wm.shell.shared.annotations.ExternalThread
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.DESKTOP_DENSITY_OVERRIDE
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useDesktopOverrideDensity
@@ -516,10 +516,7 @@ class DesktopTasksController(
        remoteTransition: RemoteTransition? = null,
        callback: IMoveToDesktopCallback? = null,
    ) {
        if (
            DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() &&
                desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task)
        ) {
        if (desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task)) {
            logW("Cannot enter desktop for taskId %d, ineligible top activity found", task.taskId)
            return
        }
@@ -1821,7 +1818,6 @@ class DesktopTasksController(
            taskRepository.isActiveTask(triggerTask.taskId))

    private fun isIncompatibleTask(task: RunningTaskInfo) =
        DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() &&
        desktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing(task)

    private fun shouldHandleTaskClosing(request: TransitionRequestInfo): Boolean =
+1 −1
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@ import androidx.core.animation.addListener
import com.android.app.animation.Interpolators
import com.android.internal.protolog.ProtoLog
import com.android.wm.shell.common.ShellExecutor
import com.android.wm.shell.compatui.DesktopModeCompatPolicy
import com.android.wm.shell.desktopmode.DesktopUserRepositories
import com.android.wm.shell.desktopmode.DesktopWallpaperActivity
import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE
@@ -37,6 +36,7 @@ import com.android.wm.shell.shared.TransitionUtil.isClosingMode
import com.android.wm.shell.shared.TransitionUtil.isClosingType
import com.android.wm.shell.shared.TransitionUtil.isOpeningMode
import com.android.wm.shell.shared.TransitionUtil.isOpeningType
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy
import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.transition.Transitions.TransitionHandler
Loading