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

Commit ab8a496b authored by Jerry Chang's avatar Jerry Chang
Browse files

Decouple ForcedResizableInfoActivityController from SystemUI

Decouples ForcedResizableInfoActivityController from SystemUI by
delegating task stack chagne callbacks from outside.

Makes the controller implements DividerCallbacks and injected to
DividerView directly.

Bug: 161116823
Test: atest SystemUITests
Change-Id: I6d844fb81c9ed8917f9cd5c6736bdf814bf1afc3
parent 6b11cc83
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -78,6 +78,22 @@ public class Divider extends SystemUI {
                            onUndockingTask();
                        }
                    }

                    @Override
                    public void onActivityForcedResizable(String packageName, int taskId,
                            int reason) {
                        mDividerController.onActivityForcedResizable(packageName, taskId, reason);
                    }

                    @Override
                    public void onActivityDismissingDockedStack() {
                        mDividerController.onActivityDismissingSplitScreen();
                    }

                    @Override
                    public void onActivityLaunchOnSecondaryDisplayFailed() {
                        mDividerController.onActivityLaunchOnSecondaryDisplayFailed();
                    }
                }
        );
    }
+20 −16
Original line number Diff line number Diff line
@@ -50,8 +50,7 @@ import java.util.function.Consumer;
/**
 * Controls the docked stack divider.
 */
public class DividerController implements DividerView.DividerCallbacks,
        DisplayController.OnDisplaysChangedListener {
public class DividerController implements DisplayController.OnDisplaysChangedListener {
    static final boolean DEBUG = false;
    private static final String TAG = "Divider";

@@ -257,8 +256,8 @@ public class DividerController implements DividerView.DividerCallbacks,
        mView = (DividerView)
                LayoutInflater.from(dctx).inflate(R.layout.docked_stack_divider, null);
        DisplayLayout displayLayout = mDisplayController.getDisplayLayout(mContext.getDisplayId());
        mView.injectDependencies(mWindowManager, mDividerState, this, mSplits, mSplitLayout,
                mImePositionProcessor, mWindowManagerProxy);
        mView.injectDependencies(mWindowManager, mDividerState, mForcedResizableController, mSplits,
                mSplitLayout, mImePositionProcessor, mWindowManagerProxy);
        mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE);
        mView.setMinimizedDockStack(mMinimized, mHomeStackResizable, null /* transaction */);
        final int size = dctx.getResources().getDimensionPixelSize(
@@ -397,6 +396,21 @@ public class DividerController implements DividerView.DividerCallbacks,
        }
    }

    /** Called when there's an activity forced resizable. */
    public void onActivityForcedResizable(String packageName, int taskId, int reason) {
        mForcedResizableController.activityForcedResizable(packageName, taskId, reason);
    }

    /** Called when there's an activity dismissing split screen. */
    public void onActivityDismissingSplitScreen() {
        mForcedResizableController.activityDismissingSplitScreen();
    }

    /** Called when there's an activity launch on secondary display failed. */
    public void onActivityLaunchOnSecondaryDisplayFailed() {
        mForcedResizableController.activityLaunchOnSecondaryDisplayFailed();
    }

    /** Called when there's a task undocking. */
    public void onUndockingTask() {
        if (mView != null) {
@@ -426,17 +440,7 @@ public class DividerController implements DividerView.DividerCallbacks,
        mForcedResizableController.onAppTransitionFinished();
    }

    @Override
    public void onDraggingStart() {
        mForcedResizableController.onDraggingStart();
    }

    @Override
    public void onDraggingEnd() {
        mForcedResizableController.onDraggingEnd();
    }

    /** Dumps current status of Divider.*/
    /** Dumps current status of Split Screen. */
    public void dump(PrintWriter pw) {
        pw.print("  mVisible="); pw.println(mVisible);
        pw.print("  mMinimized="); pw.println(mMinimized);
+15 −38
Original line number Diff line number Diff line
@@ -28,15 +28,13 @@ import android.util.ArraySet;
import android.widget.Toast;

import com.android.systemui.R;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;

import java.util.function.Consumer;

/**
 * Controller that decides when to show the {@link ForcedResizableInfoActivity}.
 */
public class ForcedResizableInfoActivityController {
final class ForcedResizableInfoActivityController implements DividerView.DividerCallbacks {

    private static final String SELF_PACKAGE_NAME = "com.android.systemui";

@@ -47,12 +45,7 @@ public class ForcedResizableInfoActivityController {
    private final ArraySet<String> mPackagesShownInSession = new ArraySet<>();
    private boolean mDividerDragging;

    private final Runnable mTimeoutRunnable = new Runnable() {
        @Override
        public void run() {
            showPending();
        }
    };
    private final Runnable mTimeoutRunnable = this::showPending;

    private final Consumer<Boolean> mDockedStackExistsListener = exists -> {
        if (!exists) {
@@ -78,44 +71,28 @@ public class ForcedResizableInfoActivityController {
    public ForcedResizableInfoActivityController(Context context,
            DividerController dividerController) {
        mContext = context;
        ActivityManagerWrapper.getInstance().registerTaskStackListener(
                new TaskStackChangeListener() {
                    @Override
                    public void onActivityForcedResizable(String packageName, int taskId,
                            int reason) {
                        activityForcedResizable(packageName, taskId, reason);
        dividerController.registerInSplitScreenListener(mDockedStackExistsListener);
    }

    @Override
                    public void onActivityDismissingDockedStack() {
                        activityDismissingDockedStack();
    public void onDraggingStart() {
        mDividerDragging = true;
        mHandler.removeCallbacks(mTimeoutRunnable);
    }

    @Override
                    public void onActivityLaunchOnSecondaryDisplayFailed() {
                        activityLaunchOnSecondaryDisplayFailed();
                    }
                });
        dividerController.registerInSplitScreenListener(mDockedStackExistsListener);
    public void onDraggingEnd() {
        mDividerDragging = false;
        showPending();
    }

    public void onAppTransitionFinished() {
    void onAppTransitionFinished() {
        if (!mDividerDragging) {
            showPending();
        }
    }

    void onDraggingStart() {
        mDividerDragging = true;
        mHandler.removeCallbacks(mTimeoutRunnable);
    }

    void onDraggingEnd() {
        mDividerDragging = false;
        showPending();
    }

    private void activityForcedResizable(String packageName, int taskId, int reason) {
    void activityForcedResizable(String packageName, int taskId, int reason) {
        if (debounce(packageName)) {
            return;
        }
@@ -123,12 +100,12 @@ public class ForcedResizableInfoActivityController {
        postTimeout();
    }

    private void activityDismissingDockedStack() {
    void activityDismissingSplitScreen() {
        Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text,
                Toast.LENGTH_SHORT).show();
    }

    private void activityLaunchOnSecondaryDisplayFailed() {
    void activityLaunchOnSecondaryDisplayFailed() {
        Toast.makeText(mContext, R.string.activity_launch_on_secondary_display_failed_text,
                Toast.LENGTH_SHORT).show();
    }