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

Commit db02000f authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "Migrate from PipMenuActivity -> PipMenuView."

parents ae905ec5 abaefa0c
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -22,8 +22,6 @@ import android.view.IWindowManager;

import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.pip.phone.PipMenuActivity;
import com.android.systemui.pip.phone.dagger.PipMenuActivityClass;
import com.android.systemui.wm.DisplaySystemBarsController;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayImeController;
@@ -43,12 +41,4 @@ public class CarWMShellModule {
        return new DisplaySystemBarsController(context, wmService, displayController,
                mainHandler, transactionPool);
    }

    /** TODO(b/150319024): PipMenuActivity will move to a Window */
    @SysUISingleton
    @PipMenuActivityClass
    @Provides
    Class<?> providePipMenuActivityClass() {
        return PipMenuActivity.class;
    }
}
+0 −14
Original line number Diff line number Diff line
@@ -530,20 +530,6 @@
            androidprv:alwaysFocusable="true"
            android:excludeFromRecents="true" />

        <activity
            android:name=".pip.phone.PipMenuActivity"
            android:permission="com.android.systemui.permission.SELF"
            android:theme="@style/PipPhoneOverlayControlTheme"
            android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
            android:excludeFromRecents="true"
            android:exported="false"
            android:resizeableActivity="true"
            android:supportsPictureInPicture="true"
            android:stateNotNeeded="true"
            android:taskAffinity=""
            android:launchMode="singleTop"
            androidprv:alwaysFocusable="true" />

        <!-- started from SliceProvider -->
        <activity android:name=".SlicePermissionActivity"
            android:theme="@style/Theme.SystemUI.Dialog.Alert"
+53 −0
Original line number Diff line number Diff line
@@ -49,6 +49,9 @@ import android.os.RemoteException;
import android.util.Log;
import android.util.Size;
import android.view.SurfaceControl;
import android.view.SurfaceControlViewHost;
import android.view.View;
import android.view.WindowManager;
import android.window.TaskOrganizer;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
@@ -57,6 +60,7 @@ import android.window.WindowOrganizer;

import com.android.internal.os.SomeArgs;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.pip.phone.PipMenuActivityController;
import com.android.systemui.pip.phone.PipUpdateThread;
import com.android.systemui.stackdivider.SplitScreen;
import com.android.wm.shell.R;
@@ -95,6 +99,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements ShellTaskOrganize
    private static final int MSG_FINISH_RESIZE = 4;
    private static final int MSG_RESIZE_USER = 5;

    private final Context mContext;
    private final Handler mMainHandler;
    private final Handler mUpdateHandler;
    private final PipBoundsHandler mPipBoundsHandler;
@@ -107,6 +112,8 @@ public class PipTaskOrganizer extends TaskOrganizer implements ShellTaskOrganize
    private final Map<IBinder, Configuration> mInitialState = new HashMap<>();
    private final Optional<SplitScreen> mSplitScreenOptional;
    protected final ShellTaskOrganizer mTaskOrganizer;
    private SurfaceControlViewHost mPipViewHost;
    private SurfaceControl mPipMenuSurface;

    // These callbacks are called on the update thread
    private final PipAnimationController.PipAnimationCallback mPipAnimationCallback =
@@ -212,6 +219,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements ShellTaskOrganize
            @NonNull DisplayController displayController,
            @NonNull PipUiEventLogger pipUiEventLogger,
            @NonNull ShellTaskOrganizer shellTaskOrganizer) {
        mContext = context;
        mMainHandler = new Handler(Looper.getMainLooper());
        mUpdateHandler = new Handler(PipUpdateThread.get().getLooper(), mUpdateCallbacks);
        mPipBoundsHandler = boundsHandler;
@@ -503,6 +511,45 @@ public class PipTaskOrganizer extends TaskOrganizer implements ShellTaskOrganize
        }
    }

    /**
     * Setup the ViewHost and attach the provided menu view to the ViewHost.
     */
    public void attachPipMenuViewHost(View menuView, WindowManager.LayoutParams lp) {
        if (mPipMenuSurface != null) {
            Log.e(TAG, "PIP Menu View already created and attached.");
            return;
        }

        if (Looper.getMainLooper() != Looper.myLooper()) {
            throw new RuntimeException("PipMenuView needs to be attached on the main thread.");
        }

        mPipViewHost = new SurfaceControlViewHost(mContext, mContext.getDisplay(),
                (android.os.Binder) null);
        mPipMenuSurface = mPipViewHost.getSurfacePackage().getSurfaceControl();
        SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
        transaction.reparent(mPipMenuSurface, mLeash);
        transaction.show(mPipMenuSurface);
        transaction.setRelativeLayer(mPipMenuSurface, mLeash, 1);
        transaction.apply();
        mPipViewHost.setView(menuView, lp);
    }


    /**
     * Releases the PIP Menu's View host, remove it from PIP task surface.
     */
    public void detachPipMenuViewHost() {
        if (mPipMenuSurface != null) {
            SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
            transaction.remove(mPipMenuSurface);
            transaction.apply();
            mPipMenuSurface = null;
            mPipViewHost = null;
        }
    }


    /**
     * Note that dismissing PiP is now originated from SystemUI, see {@link #exitPip(int)}.
     * Meanwhile this callback is invoked whenever the task is removed. For instance:
@@ -838,6 +885,12 @@ public class PipTaskOrganizer extends TaskOrganizer implements ShellTaskOrganize
        WindowContainerTransaction wct = new WindowContainerTransaction();
        prepareFinishResizeTransaction(destinationBounds, direction, tx, wct);
        applyFinishBoundsResize(wct, direction);
        runOnMainHandler(() -> {
            if (mPipViewHost != null) {
                mPipViewHost.relayout(PipMenuActivityController.getPipMenuLayoutParams(
                        destinationBounds.width(), destinationBounds.height()));
            }
        });
    }

    private void prepareFinishResizeTransaction(Rect destinationBounds,
+2 −4
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSurfaceTransactionHelper;
import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.pip.PipUiEventLogger;
import com.android.systemui.pip.phone.dagger.PipMenuActivityClass;
import com.android.systemui.shared.recents.IPinnedStackAnimationListener;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.InputConsumerController;
@@ -267,7 +266,6 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio

    @Inject
    public PipManager(Context context, BroadcastDispatcher broadcastDispatcher,
            @PipMenuActivityClass Class<?> pipMenuActivityClass,
            ConfigurationController configController,
            DeviceConfigProxy deviceConfig,
            DisplayController displayController,
@@ -296,8 +294,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
        mPipTaskOrganizer.registerPipTransitionCallback(this);
        mInputConsumerController = InputConsumerController.getPipInputConsumer();
        mMediaController = new PipMediaController(context, mActivityManager, broadcastDispatcher);
        mMenuController = new PipMenuActivityController(context, pipMenuActivityClass,
                mMediaController, mInputConsumerController);
        mMenuController = new PipMenuActivityController(context,
                mMediaController, mInputConsumerController, mPipTaskOrganizer);
        mTouchHandler = new PipTouchHandler(context, mActivityManager,
                mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer,
                floatingContentCoordinator, deviceConfig, sysUiState, pipUiEventLogger);
Loading