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

Commit 488a69bf authored by Matt Sziklay's avatar Matt Sziklay Committed by Android (Google) Code Review
Browse files

Merge "Show captions on tablets even when display windowing mode is fullscreen." into tm-qpr-dev

parents b25a29ed e4a9f826
Loading
Loading
Loading
Loading
+13 −18
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.wm.shell.fullscreen;

import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;

import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_FULLSCREEN;
import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString;

@@ -107,13 +105,14 @@ public class FullscreenTaskListener<T extends AutoCloseable>

        if (Transitions.ENABLE_SHELL_TRANSITIONS) return;
        updateRecentsForVisibleFullscreenTask(taskInfo);
        if (shouldShowWindowDecor(taskInfo) && mWindowDecorViewModelOptional.isPresent()) {
        if (mWindowDecorViewModelOptional.isPresent()) {
            SurfaceControl.Transaction t = new SurfaceControl.Transaction();
            state.mWindowDecoration =
                    mWindowDecorViewModelOptional.get().createWindowDecoration(taskInfo,
                            leash, t, t);
            t.apply();
        } else {
        }
        if (state.mWindowDecoration == null) {
            mSyncQueue.runInSync(t -> {
                // Reset several properties back to fullscreen (PiP, for example, leaves all these
                // properties in a bad state).
@@ -178,13 +177,12 @@ public class FullscreenTaskListener<T extends AutoCloseable>
    public void createWindowDecoration(TransitionInfo.Change change,
            SurfaceControl.Transaction startT, SurfaceControl.Transaction finishT) {
        final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
        if (!mWindowDecorViewModelOptional.isPresent()
                || !shouldShowWindowDecor(state.mTaskInfo)) {
            return;
        }

        state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration(
        if (!mWindowDecorViewModelOptional.isPresent()) return;
        T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration(
                state.mTaskInfo, state.mLeash, startT, finishT);
        if (newWindowDecor != null) {
            state.mWindowDecoration = newWindowDecor;
        }
    }

    /**
@@ -202,8 +200,7 @@ public class FullscreenTaskListener<T extends AutoCloseable>
            SurfaceControl.Transaction startT,
            SurfaceControl.Transaction finishT,
            @Nullable AutoCloseable windowDecor) {
        if (!mWindowDecorViewModelOptional.isPresent()
                || !shouldShowWindowDecor(change.getTaskInfo())) {
        if (!mWindowDecorViewModelOptional.isPresent()) {
            return false;
        }
        final State<T> state = createOrUpdateTaskState(change.getTaskInfo(), change.getLeash());
@@ -214,8 +211,11 @@ public class FullscreenTaskListener<T extends AutoCloseable>
                    state.mTaskInfo, startT, finishT, state.mWindowDecoration);
            return true;
        } else {
            state.mWindowDecoration = mWindowDecorViewModelOptional.get().createWindowDecoration(
            T newWindowDecor = mWindowDecorViewModelOptional.get().createWindowDecoration(
                    state.mTaskInfo, state.mLeash, startT, finishT);
            if (newWindowDecor != null) {
                state.mWindowDecoration = newWindowDecor;
            }
            return false;
        }
    }
@@ -336,10 +336,5 @@ public class FullscreenTaskListener<T extends AutoCloseable>
        return TAG + ":" + taskListenerTypeToString(TASK_LISTENER_TYPE_FULLSCREEN);
    }

    private static boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) {
        return taskInfo.getConfiguration().windowConfiguration.getDisplayWindowingMode()
                == WINDOWING_MODE_FREEFORM;
    }


}
+15 −3
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.wm.shell.R;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.SyncTransactionQueue;
import com.android.wm.shell.desktopmode.DesktopMode;
import com.android.wm.shell.freeform.FreeformTaskTransitionStarter;
import com.android.wm.shell.transition.Transitions;

@@ -80,6 +81,7 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption
            SurfaceControl taskSurface,
            SurfaceControl.Transaction startT,
            SurfaceControl.Transaction finishT) {
        if (!shouldShowWindowDecor(taskInfo)) return null;
        final CaptionWindowDecoration windowDecoration = new CaptionWindowDecoration(
                mContext,
                mDisplayController,
@@ -101,9 +103,12 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption

    @Override
    public CaptionWindowDecoration adoptWindowDecoration(AutoCloseable windowDecor) {
        return (windowDecor instanceof CaptionWindowDecoration)
                ? (CaptionWindowDecoration) windowDecor
                : null;
        if (!(windowDecor instanceof CaptionWindowDecoration)) return null;
        final CaptionWindowDecoration captionWindowDecor = (CaptionWindowDecoration) windowDecor;
        if (!shouldShowWindowDecor(captionWindowDecor.mTaskInfo)) {
            return null;
        }
        return captionWindowDecor;
    }

    @Override
@@ -231,4 +236,11 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel<Caption
            }
        }
    }

    private boolean shouldShowWindowDecor(RunningTaskInfo taskInfo) {
        if (taskInfo.getWindowingMode() == WINDOWING_MODE_FREEFORM) return true;
        return DesktopMode.IS_SUPPORTED
                && mDisplayController.getDisplayContext(taskInfo.displayId)
                .getResources().getConfiguration().smallestScreenWidthDp >= 600;
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ public interface WindowDecorViewModel<T extends AutoCloseable> {

    /**
     * Creates a window decoration for the given task.
     * Can be {@code null} for Fullscreen tasks but not Freeform ones.
     *
     * @param taskInfo the initial task info of the task
     * @param taskSurface the surface of the task
@@ -49,7 +50,7 @@ public interface WindowDecorViewModel<T extends AutoCloseable> {
     * @param finishT the finish transaction to restore states after the transition
     * @return the window decoration object
     */
    T createWindowDecoration(
    @Nullable T createWindowDecoration(
            ActivityManager.RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
            SurfaceControl.Transaction startT,
@@ -57,11 +58,12 @@ public interface WindowDecorViewModel<T extends AutoCloseable> {

    /**
     * Adopts the window decoration if possible.
     * May be {@code null} if a window decor is not needed or the given one is incompatible.
     *
     * @param windowDecor the potential window decoration to adopt
     * @return the window decoration if it can be adopted, or {@code null} otherwise.
     */
    T adoptWindowDecoration(@Nullable AutoCloseable windowDecor);
    @Nullable T adoptWindowDecoration(@Nullable AutoCloseable windowDecor);

    /**
     * Notifies a task info update on the given task, with the window decoration created previously