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

Commit d8aa7f78 authored by Tiger Huang's avatar Tiger Huang
Browse files

Let TaskSnapshotWindow compute its window frame

When LOCAL_LAYOUT is enabled, TaskSnapshotWindow computes its window
frame on its own.

Bug: 161810301
Test: presubmit
Change-Id: I9e5bf9d5c93055017d303515ea1d1b0048776ebd
parent 9519e3c9
Loading
Loading
Loading
Loading
+25 −3
Original line number Original line Diff line number Diff line
@@ -20,8 +20,10 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.graphics.Color.WHITE;
import static android.graphics.Color.WHITE;
import static android.graphics.Color.alpha;
import static android.graphics.Color.alpha;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.ViewRootImpl.LOCAL_LAYOUT;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowLayout.UNSPECIFIED_LENGTH;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
import static android.view.WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES;
import static android.view.WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES;
@@ -51,6 +53,7 @@ import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityManager.TaskDescription;
import android.app.ActivityManager.TaskDescription;
import android.app.ActivityThread;
import android.app.ActivityThread;
import android.app.WindowConfiguration;
import android.content.Context;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Color;
@@ -77,6 +80,7 @@ import android.view.SurfaceSession;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.WindowInsets;
import android.view.WindowInsets;
import android.view.WindowLayout;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.WindowManagerGlobal;
import android.view.WindowManagerGlobal;
import android.window.ClientWindowFrames;
import android.window.ClientWindowFrames;
@@ -208,6 +212,8 @@ public class TaskSnapshotWindow {
        final IWindowSession session = WindowManagerGlobal.getWindowSession();
        final IWindowSession session = WindowManagerGlobal.getWindowSession();
        final SurfaceControl surfaceControl = new SurfaceControl();
        final SurfaceControl surfaceControl = new SurfaceControl();
        final ClientWindowFrames tmpFrames = new ClientWindowFrames();
        final ClientWindowFrames tmpFrames = new ClientWindowFrames();
        final WindowLayout windowLayout = new WindowLayout();
        final Rect displayCutoutSafe = new Rect();


        final InsetsSourceControl[] tmpControls = new InsetsSourceControl[0];
        final InsetsSourceControl[] tmpControls = new InsetsSourceControl[0];
        final MergedConfiguration tmpMergedConfiguration = new MergedConfiguration();
        final MergedConfiguration tmpMergedConfiguration = new MergedConfiguration();
@@ -244,9 +250,25 @@ public class TaskSnapshotWindow {
        window.setOuter(snapshotSurface);
        window.setOuter(snapshotSurface);
        try {
        try {
            Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#relayout");
            Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "TaskSnapshot#relayout");
            if (LOCAL_LAYOUT) {
                if (!surfaceControl.isValid()) {
                    session.updateVisibility(window, layoutParams, View.VISIBLE,
                            tmpMergedConfiguration, surfaceControl, tmpInsetsState, tmpControls);
                }
                tmpInsetsState.getDisplayCutoutSafe(displayCutoutSafe);
                final WindowConfiguration winConfig =
                        tmpMergedConfiguration.getMergedConfiguration().windowConfiguration;
                windowLayout.computeFrames(layoutParams, tmpInsetsState, displayCutoutSafe,
                        winConfig.getBounds(), winConfig.getWindowingMode(), UNSPECIFIED_LENGTH,
                        UNSPECIFIED_LENGTH, info.requestedVisibilities,
                        null /* attachedWindowFrame */, 1f /* compatScale */, tmpFrames);
                session.updateLayout(window, layoutParams, 0 /* flags */, tmpFrames,
                        UNSPECIFIED_LENGTH, UNSPECIFIED_LENGTH);
            } else {
                session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0,
                session.relayout(window, layoutParams, -1, -1, View.VISIBLE, 0,
                        tmpFrames, tmpMergedConfiguration, surfaceControl, tmpInsetsState,
                        tmpFrames, tmpMergedConfiguration, surfaceControl, tmpInsetsState,
                        tmpControls, new Bundle());
                        tmpControls, new Bundle());
            }
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
            Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            snapshotSurface.clearWindowSynced();
            snapshotSurface.clearWindowSynced();