DisplayImeController: Refactor for testability

Bug: 162875596
Test: atest WMShellUnitTests
Change-Id: I3118310a391592fcc72ea6ef8b4b8adccce2f14f
This commit is contained in:
Adrian Roos
2020-09-24 14:22:11 +02:00
parent 3c99024fdb
commit bfdfe0ec42
4 changed files with 25 additions and 11 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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