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

Commit bfdfe0ec authored by Adrian Roos's avatar Adrian Roos
Browse files

DisplayImeController: Refactor for testability

Bug: 162875596
Test: atest WMShellUnitTests
Change-Id: I3118310a391592fcc72ea6ef8b4b8adccce2f14f
parent 3c99024f
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import android.view.animation.PathInterpolator;
import com.android.internal.view.IInputMethodManager;

import java.util.ArrayList;
import java.util.concurrent.Executor;

/**
 * Manages IME control at the display-level. This occurs when IME comes up in multi-window mode.
@@ -62,15 +63,21 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
    private static final int FLOATING_IME_BOTTOM_INSET = -80;

    protected final IWindowManager mWmService;
    protected final Handler mHandler;
    protected final Executor mExecutor;
    private final TransactionPool mTransactionPool;
    private final DisplayController mDisplayController;
    private final SparseArray<PerDisplay> mImePerDisplay = new SparseArray<>();
    private final ArrayList<ImePositionProcessor> mPositionProcessors = new ArrayList<>();

    @Deprecated
    public DisplayImeController(IWindowManager wmService, DisplayController displayController,
            Handler mainHandler, TransactionPool transactionPool) {
        mHandler = mainHandler;
        this(wmService, displayController, mainHandler::post, transactionPool);
    }

    public DisplayImeController(IWindowManager wmService, DisplayController displayController,
            Executor mainExecutor, TransactionPool transactionPool) {
        mExecutor = mainExecutor;
        mWmService = wmService;
        mTransactionPool = transactionPool;
        mDisplayController = displayController;
@@ -197,7 +204,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged

        @Override
        public void insetsChanged(InsetsState insetsState) {
            mHandler.post(() -> {
            mExecutor.execute(() -> {
                if (mInsetsState.equals(insetsState)) {
                    return;
                }
@@ -224,7 +231,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                        continue;
                    }
                    if (activeControl.getType() == InsetsState.ITYPE_IME) {
                        mHandler.post(() -> {
                        mExecutor.execute(() -> {
                            final Point lastSurfacePosition = mImeSourceControl != null
                                    ? mImeSourceControl.getSurfacePosition() : null;
                            mImeSourceControl = activeControl;
@@ -246,7 +253,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                return;
            }
            if (DEBUG) Slog.d(TAG, "Got showInsets for ime");
            mHandler.post(() -> startAnimation(true /* show */, false /* forceRestart */));
            mExecutor.execute(() -> startAnimation(true /* show */, false /* forceRestart */));
        }

        @Override
@@ -255,7 +262,7 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged
                return;
            }
            if (DEBUG) Slog.d(TAG, "Got hideInsets for ime");
            mHandler.post(() -> startAnimation(false /* show */, false /* forceRestart */));
            mExecutor.execute(() -> startAnimation(false /* show */, false /* forceRestart */));
        }

        @Override
+3 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ public class DisplaySystemBarsController extends DisplayImeController {

    private final Context mContext;
    private final DisplayController mDisplayController;
    private final Handler mHandler;
    private SparseArray<PerDisplay> mPerDisplaySparseArray;

    public DisplaySystemBarsController(
@@ -58,9 +59,10 @@ public class DisplaySystemBarsController extends DisplayImeController {
            DisplayController displayController,
            @Main Handler mainHandler,
            TransactionPool transactionPool) {
        super(wmService, displayController, mainHandler, transactionPool);
        super(wmService, displayController, (r) -> mainHandler.post(r), transactionPool);
        mContext = context;
        mDisplayController = displayController;
        mHandler = mainHandler;
    }

    @Override
+5 −2
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import com.android.wm.shell.common.TransactionPool;
import com.android.wm.shell.splitscreen.SplitScreen;
import com.android.wm.shell.splitscreen.SplitScreenController;

import java.util.concurrent.Executor;

import dagger.Module;
import dagger.Provides;

@@ -44,9 +46,10 @@ public class TvWMShellModule {
    @SysUISingleton
    @Provides
    static DisplayImeController provideDisplayImeController(IWindowManager wmService,
            DisplayController displayController, @Main Handler mainHandler,
            DisplayController displayController, @Main Executor mainExecutor,
            TransactionPool transactionPool) {
        return new DisplayImeController(wmService, displayController, mainHandler, transactionPool);
        return new DisplayImeController(wmService, displayController, mainExecutor,
                transactionPool);
    }

    @SysUISingleton
+4 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import com.android.wm.shell.splitscreen.SplitScreen;
import com.android.wm.shell.splitscreen.SplitScreenController;

import java.util.Optional;
import java.util.concurrent.Executor;

import dagger.Module;
import dagger.Provides;
@@ -58,9 +59,10 @@ public class WMShellModule {
    @SysUISingleton
    @Provides
    static DisplayImeController provideDisplayImeController(IWindowManager wmService,
            DisplayController displayController, @Main Handler mainHandler,
            DisplayController displayController, @Main Executor mainExecutor,
            TransactionPool transactionPool) {
        return new DisplayImeController(wmService, displayController, mainHandler, transactionPool);
        return new DisplayImeController(wmService, displayController, mainExecutor,
                transactionPool);
    }

    @SysUISingleton