Merge "Fix TouchExcludeRegion should ignore the invisible windows" into rvc-dev am: 7532d7557e am: dfa8b451d2 am: 7be1295925

Change-Id: I510d26266021dc6e56f2db15e381d40da29a3abf
This commit is contained in:
Arthur Hung
2020-05-06 14:19:31 +00:00
committed by Automerger Merge Worker
3 changed files with 20 additions and 7 deletions

View File

@@ -2547,6 +2547,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
}
for (int i = mTapExcludedWindows.size() - 1; i >= 0; i--) {
final WindowState win = mTapExcludedWindows.get(i);
if (!win.isVisibleLw()) {
continue;
}
win.getTouchableRegion(mTmpRegion);
mTouchExcludeRegion.op(mTmpRegion, Region.Op.UNION);
}

View File

@@ -48,6 +48,16 @@ public class TaskTapPointerEventListener implements PointerEventListener {
mDisplayContent = displayContent;
}
private void restorePointerIcon(int x, int y) {
if (mPointerIconType != TYPE_NOT_SPECIFIED) {
mPointerIconType = TYPE_NOT_SPECIFIED;
// Find the underlying window and ask it to restore the pointer icon.
mService.mH.removeMessages(H.RESTORE_POINTER_ICON);
mService.mH.obtainMessage(H.RESTORE_POINTER_ICON,
x, y, mDisplayContent).sendToTarget();
}
}
@Override
public void onPointerEvent(MotionEvent motionEvent) {
switch (motionEvent.getActionMasked()) {
@@ -67,6 +77,10 @@ public class TaskTapPointerEventListener implements PointerEventListener {
case MotionEvent.ACTION_HOVER_MOVE: {
final int x = (int) motionEvent.getX();
final int y = (int) motionEvent.getY();
if (mTouchExcludeRegion.contains(x, y)) {
restorePointerIcon(x, y);
break;
}
final Task task = mDisplayContent.findTaskForResizePoint(x, y);
int iconType = TYPE_NOT_SPECIFIED;
if (task != null) {
@@ -103,13 +117,7 @@ public class TaskTapPointerEventListener implements PointerEventListener {
case MotionEvent.ACTION_HOVER_EXIT: {
final int x = (int) motionEvent.getX();
final int y = (int) motionEvent.getY();
if (mPointerIconType != TYPE_NOT_SPECIFIED) {
mPointerIconType = TYPE_NOT_SPECIFIED;
// Find the underlying window and ask it to restore the pointer icon.
mService.mH.removeMessages(H.RESTORE_POINTER_ICON);
mService.mH.obtainMessage(H.RESTORE_POINTER_ICON,
x, y, mDisplayContent).sendToTarget();
}
restorePointerIcon(x, y);
}
break;
}

View File

@@ -72,6 +72,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED;
import static android.view.WindowManagerGlobal.ADD_OKAY;
@@ -1373,6 +1374,7 @@ public class WindowManagerService extends IWindowManager.Stub
case TYPE_NOTIFICATION_SHADE:
case TYPE_NAVIGATION_BAR:
case TYPE_INPUT_METHOD_DIALOG:
case TYPE_VOLUME_OVERLAY:
return true;
}
return false;