Put recents input consumer to the top of the display area
- Instead of trying to place it above the top task which can't account for other relative layering (ie. IME), just place the consumer at the top of the display area containing all the tasks Fixes: 195427335 Fixes: 198416276 Test: Open an app with the IME showing, enter recents Change-Id: Iab9ccea417b1c14d8318296ee8bc181528942013
This commit is contained in:
@@ -48,6 +48,8 @@ import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT;
|
||||
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
|
||||
import static com.android.server.wm.WindowManagerService.LOGTAG_INPUT_FOCUS;
|
||||
|
||||
import static java.lang.Integer.MAX_VALUE;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Region;
|
||||
@@ -581,10 +583,11 @@ final class InputMonitor {
|
||||
if (mAddRecentsAnimationInputConsumerHandle && shouldApplyRecentsInputConsumer) {
|
||||
if (recentsAnimationController.updateInputConsumerForApp(
|
||||
mRecentsAnimationInputConsumer.mWindowHandle)) {
|
||||
final WindowState highestLayerWindow =
|
||||
recentsAnimationController.getHighestLayerWindow();
|
||||
if (highestLayerWindow != null) {
|
||||
mRecentsAnimationInputConsumer.show(mInputTransaction, highestLayerWindow);
|
||||
final DisplayArea targetDA =
|
||||
recentsAnimationController.getTargetAppDisplayArea();
|
||||
if (targetDA != null) {
|
||||
mRecentsAnimationInputConsumer.reparent(mInputTransaction, targetDA);
|
||||
mRecentsAnimationInputConsumer.show(mInputTransaction, MAX_VALUE - 1);
|
||||
mAddRecentsAnimationInputConsumerHandle = false;
|
||||
}
|
||||
}
|
||||
@@ -597,7 +600,7 @@ final class InputMonitor {
|
||||
rootTask.getSurfaceControl());
|
||||
// We set the layer to z=MAX-1 so that it's always on top.
|
||||
mPipInputConsumer.reparent(mInputTransaction, rootTask);
|
||||
mPipInputConsumer.show(mInputTransaction, Integer.MAX_VALUE - 1);
|
||||
mPipInputConsumer.show(mInputTransaction, MAX_VALUE - 1);
|
||||
mAddPipInputConsumerHandle = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1102,21 +1102,11 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
return mTargetActivityRecord.findMainWindow();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the window with the highest layer, or null if none is found.
|
||||
*/
|
||||
public WindowState getHighestLayerWindow() {
|
||||
int highestLayer = Integer.MIN_VALUE;
|
||||
Task highestLayerTask = null;
|
||||
for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
|
||||
TaskAnimationAdapter adapter = mPendingAnimations.get(i);
|
||||
int layer = adapter.mTask.getPrefixOrderIndex();
|
||||
if (layer > highestLayer) {
|
||||
highestLayer = layer;
|
||||
highestLayerTask = adapter.mTask;
|
||||
}
|
||||
DisplayArea getTargetAppDisplayArea() {
|
||||
if (mTargetActivityRecord == null) {
|
||||
return null;
|
||||
}
|
||||
return highestLayerTask.getTopMostActivity().getTopChild();
|
||||
return mTargetActivityRecord.getDisplayArea();
|
||||
}
|
||||
|
||||
boolean isAnimatingTask(Task task) {
|
||||
|
||||
Reference in New Issue
Block a user