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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user