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

Commit 4c8d3ba6 authored by Shuming Hao's avatar Shuming Hao Committed by Android (Google) Code Review
Browse files

Merge "Revert "Load the split divider veil icons on a boosted background thread"" into main

parents 7f68b733 e69db0d5
Loading
Loading
Loading
Loading
+10 −60
Original line number Original line Diff line number Diff line
@@ -33,14 +33,12 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
import android.os.Binder;
import android.os.Binder;
import android.os.Trace;
import android.view.IWindow;
import android.view.IWindow;
import android.view.LayoutInflater;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
@@ -52,12 +50,10 @@ import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ImageView;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;


import com.android.launcher3.icons.IconProvider;
import com.android.launcher3.icons.IconProvider;
import com.android.wm.shell.R;
import com.android.wm.shell.R;
import com.android.wm.shell.common.ScreenshotUtils;
import com.android.wm.shell.common.ScreenshotUtils;
import com.android.wm.shell.common.ShellExecutor;
import com.android.wm.shell.common.SurfaceUtils;
import com.android.wm.shell.common.SurfaceUtils;


import java.util.function.Consumer;
import java.util.function.Consumer;
@@ -83,19 +79,9 @@ public class SplitDecorManager extends WindowlessWindowManager {
    private static final String RESIZING_BACKGROUND_SURFACE_NAME = "ResizingBackground";
    private static final String RESIZING_BACKGROUND_SURFACE_NAME = "ResizingBackground";
    private static final String GAP_BACKGROUND_SURFACE_NAME = "GapBackground";
    private static final String GAP_BACKGROUND_SURFACE_NAME = "GapBackground";


    // Indicates the loading state of mIcon
    enum IconLoadState {
        NOT_LOADED,
        LOADING,
        LOADED
    }

    private final IconProvider mIconProvider;
    private final IconProvider mIconProvider;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mBgExecutor;


    private Drawable mIcon;
    private Drawable mIcon;
    private IconLoadState mIconLoadState = IconLoadState.NOT_LOADED;
    private ImageView mVeilIconView;
    private ImageView mVeilIconView;
    private SurfaceControlViewHost mViewHost;
    private SurfaceControlViewHost mViewHost;
    /** The parent surface that this is attached to. Should be the stage root. */
    /** The parent surface that this is attached to. Should be the stage root. */
@@ -123,14 +109,9 @@ public class SplitDecorManager extends WindowlessWindowManager {
    private int mOffsetY;
    private int mOffsetY;
    private int mRunningAnimationCount = 0;
    private int mRunningAnimationCount = 0;


    public SplitDecorManager(Configuration configuration,
    public SplitDecorManager(Configuration configuration, IconProvider iconProvider) {
            IconProvider iconProvider,
            ShellExecutor mainExecutor,
            ShellExecutor bgExecutor) {
        super(configuration, null /* rootSurface */, null /* hostInputToken */);
        super(configuration, null /* rootSurface */, null /* hostInputToken */);
        mIconProvider = iconProvider;
        mIconProvider = iconProvider;
        mMainExecutor = mainExecutor;
        mBgExecutor = bgExecutor;
    }
    }


    @Override
    @Override
@@ -218,7 +199,6 @@ public class SplitDecorManager extends WindowlessWindowManager {
        }
        }
        mHostLeash = null;
        mHostLeash = null;
        mIcon = null;
        mIcon = null;
        mIconLoadState = IconLoadState.NOT_LOADED;
        mVeilIconView = null;
        mVeilIconView = null;
        mIsCurrentlyChanging = false;
        mIsCurrentlyChanging = false;
        mShown = false;
        mShown = false;
@@ -310,11 +290,10 @@ public class SplitDecorManager extends WindowlessWindowManager {
                    .setWindowCrop(mGapBackgroundLeash, sideBounds.width(), sideBounds.height());
                    .setWindowCrop(mGapBackgroundLeash, sideBounds.width(), sideBounds.height());
        }
        }


        if (mIconLoadState == IconLoadState.NOT_LOADED && resizingTask.topActivityInfo != null) {
        if (mIcon == null && resizingTask.topActivityInfo != null) {
            loadIconInBackground(resizingTask.topActivityInfo, () -> {
            mIcon = mIconProvider.getIcon(resizingTask.topActivityInfo);
            mVeilIconView.setImageDrawable(mIcon);
            mVeilIconView.setImageDrawable(mIcon);
            mVeilIconView.setVisibility(View.VISIBLE);
            mVeilIconView.setVisibility(View.VISIBLE);
            });


            WindowManager.LayoutParams lp =
            WindowManager.LayoutParams lp =
                    (WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
                    (WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
@@ -468,10 +447,10 @@ public class SplitDecorManager extends WindowlessWindowManager {
        }
        }


        if (mIcon == null && resizingTask.topActivityInfo != null) {
        if (mIcon == null && resizingTask.topActivityInfo != null) {
            loadIconInBackground(resizingTask.topActivityInfo, () -> {
            // Initialize icon
            mIcon = mIconProvider.getIcon(resizingTask.topActivityInfo);
            mVeilIconView.setImageDrawable(mIcon);
            mVeilIconView.setImageDrawable(mIcon);
            mVeilIconView.setVisibility(View.VISIBLE);
            mVeilIconView.setVisibility(View.VISIBLE);
            });


            WindowManager.LayoutParams lp =
            WindowManager.LayoutParams lp =
                    (WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
                    (WindowManager.LayoutParams) mViewHost.getView().getLayoutParams();
@@ -504,7 +483,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
            return;
            return;
        }
        }


        // Re-center icon
        // Recenter icon
        t.setPosition(mIconLeash,
        t.setPosition(mIconLeash,
                mInstantaneousBounds.width() / 2f - mIconSize / 2f,
                mInstantaneousBounds.width() / 2f - mIconSize / 2f,
                mInstantaneousBounds.height() / 2f - mIconSize / 2f);
                mInstantaneousBounds.height() / 2f - mIconSize / 2f);
@@ -647,36 +626,7 @@ public class SplitDecorManager extends WindowlessWindowManager {
            mVeilIconView.setImageDrawable(null);
            mVeilIconView.setImageDrawable(null);
            t.hide(mIconLeash);
            t.hide(mIconLeash);
            mIcon = null;
            mIcon = null;
            mIconLoadState = IconLoadState.NOT_LOADED;
        }
    }

    /**
     * Loads the icon for the given {@param info}, calling {@param postLoadCb} on the main thread
     * if provided.
     */
    private void loadIconInBackground(@NonNull ActivityInfo info, @Nullable Runnable postLoadCb) {
        mIconLoadState = IconLoadState.LOADING;
        mBgExecutor.setBoost();
        mBgExecutor.execute(() -> {
            Trace.beginSection("SplitDecorManager.loadIconInBackground("
                    + info.applicationInfo.packageName + ")");
            final Drawable icon = mIconProvider.getIcon(info);
            Trace.endSection();
            mMainExecutor.execute(() -> {
                if (mIconLoadState != IconLoadState.LOADING) {
                    // The request was canceled while loading in the background, just drop the
                    // result
                    return;
        }
        }
                mIcon = icon;
                mIconLoadState = IconLoadState.LOADED;
                if (postLoadCb != null) {
                    postLoadCb.run();
                }
            });
            mBgExecutor.resetBoost();
        });
    }
    }


    private static float[] getResizingBackgroundColor(ActivityManager.RunningTaskInfo taskInfo) {
    private static float[] getResizingBackgroundColor(ActivityManager.RunningTaskInfo taskInfo) {
+0 −4
Original line number Original line Diff line number Diff line
@@ -799,10 +799,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
    }
    }


    void onStartDragging() {
    void onStartDragging() {
        // This triggers initialization of things like the resize veil in preparation for
        // showing it when the user moves the divider past the slop
        updateDividerBounds(getDividerPosition(), false /* shouldUseParallaxEffect */);

        mInteractionJankMonitor.begin(getDividerLeash(), mContext, mHandler,
        mInteractionJankMonitor.begin(getDividerLeash(), mContext, mHandler,
                CUJ_SPLIT_SCREEN_RESIZE);
                CUJ_SPLIT_SCREEN_RESIZE);
    }
    }
+1 −3
Original line number Original line Diff line number Diff line
@@ -34,7 +34,6 @@ import com.android.wm.shell.common.split.SplitState;
import com.android.wm.shell.dagger.pip.TvPipModule;
import com.android.wm.shell.dagger.pip.TvPipModule;
import com.android.wm.shell.recents.RecentTasksController;
import com.android.wm.shell.recents.RecentTasksController;
import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.TransactionPool;
import com.android.wm.shell.shared.annotations.ShellBackgroundThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.splitscreen.SplitScreenController;
import com.android.wm.shell.splitscreen.tv.TvSplitScreenController;
import com.android.wm.shell.splitscreen.tv.TvSplitScreenController;
@@ -94,12 +93,11 @@ public class TvWMShellModule {
            SplitState splitState,
            SplitState splitState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread ShellExecutor mainExecutor,
            Handler mainHandler,
            Handler mainHandler,
            @ShellBackgroundThread ShellExecutor bgExecutor,
            SystemWindows systemWindows) {
            SystemWindows systemWindows) {
        return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
        return new TvSplitScreenController(context, shellInit, shellCommandHandler, shellController,
                shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
                shellTaskOrganizer, syncQueue, rootTDAOrganizer, displayController,
                displayImeController, displayInsetsController, transitions, transactionPool,
                displayImeController, displayInsetsController, transitions, transactionPool,
                iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
                iconProvider, recentTasks, launchAdjacentController, multiInstanceHelper,
                splitState, mainExecutor, mainHandler, bgExecutor, systemWindows);
                splitState, mainExecutor, mainHandler, systemWindows);
    }
    }
}
}
+2 −4
Original line number Original line Diff line number Diff line
@@ -520,8 +520,7 @@ public abstract class WMShellModule {
            MultiInstanceHelper multiInstanceHelper,
            MultiInstanceHelper multiInstanceHelper,
            SplitState splitState,
            SplitState splitState,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler,
            @ShellMainThread Handler mainHandler) {
            @ShellBackgroundThread ShellExecutor bgExecutor) {
        return new SplitScreenController(
        return new SplitScreenController(
                context,
                context,
                shellInit,
                shellInit,
@@ -545,8 +544,7 @@ public abstract class WMShellModule {
                multiInstanceHelper,
                multiInstanceHelper,
                splitState,
                splitState,
                mainExecutor,
                mainExecutor,
                mainHandler,
                mainHandler);
                bgExecutor);
    }
    }


    //
    //
+3 −7
Original line number Original line Diff line number Diff line
@@ -185,7 +185,6 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
    private final LauncherApps mLauncherApps;
    private final LauncherApps mLauncherApps;
    private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
    private final RootTaskDisplayAreaOrganizer mRootTDAOrganizer;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mMainExecutor;
    private final ShellExecutor mBgExecutor;
    private final Handler mMainHandler;
    private final Handler mMainHandler;
    private final SplitScreenImpl mImpl = new SplitScreenImpl();
    private final SplitScreenImpl mImpl = new SplitScreenImpl();
    private final DisplayController mDisplayController;
    private final DisplayController mDisplayController;
@@ -232,8 +231,7 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
            MultiInstanceHelper multiInstanceHelper,
            MultiInstanceHelper multiInstanceHelper,
            SplitState splitState,
            SplitState splitState,
            ShellExecutor mainExecutor,
            ShellExecutor mainExecutor,
            Handler mainHandler,
            Handler mainHandler) {
            ShellExecutor bgExecutor) {
        mShellCommandHandler = shellCommandHandler;
        mShellCommandHandler = shellCommandHandler;
        mShellController = shellController;
        mShellController = shellController;
        mTaskOrganizer = shellTaskOrganizer;
        mTaskOrganizer = shellTaskOrganizer;
@@ -243,7 +241,6 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
        mRootTDAOrganizer = rootTDAOrganizer;
        mRootTDAOrganizer = rootTDAOrganizer;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
        mMainHandler = mainHandler;
        mMainHandler = mainHandler;
        mBgExecutor = bgExecutor;
        mDisplayController = displayController;
        mDisplayController = displayController;
        mDisplayImeController = displayImeController;
        mDisplayImeController = displayImeController;
        mDisplayInsetsController = displayInsetsController;
        mDisplayInsetsController = displayInsetsController;
@@ -301,9 +298,8 @@ public class SplitScreenController implements SplitDragPolicy.Starter,
        return new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
        return new StageCoordinator(mContext, DEFAULT_DISPLAY, mSyncQueue,
                mTaskOrganizer, mDisplayController, mDisplayImeController,
                mTaskOrganizer, mDisplayController, mDisplayImeController,
                mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider,
                mDisplayInsetsController, mTransitions, mTransactionPool, mIconProvider,
                mMainExecutor, mMainHandler, mBgExecutor, mRecentTasksOptional,
                mMainExecutor, mMainHandler, mRecentTasksOptional, mLaunchAdjacentController,
                mLaunchAdjacentController, mWindowDecorViewModel, mSplitState,
                mWindowDecorViewModel, mSplitState, mDesktopTasksController);
                mDesktopTasksController);
    }
    }


    @Override
    @Override
Loading