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

Commit 8e8b5225 authored by Matt Sziklay's avatar Matt Sziklay Committed by Automerger Merge Worker
Browse files

Merge "Show captions on tablets even when display windowing mode is...

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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19817715



Change-Id: Ib000a4eb7a4d1fdf0f154aa8ae4c2d3518cb8784
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 45f52349 488a69bf
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