Merge "Fix TouchExcludeRegion should ignore the invisible windows" into rvc-dev
This commit is contained in:
@@ -2547,6 +2547,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
}
|
}
|
||||||
for (int i = mTapExcludedWindows.size() - 1; i >= 0; i--) {
|
for (int i = mTapExcludedWindows.size() - 1; i >= 0; i--) {
|
||||||
final WindowState win = mTapExcludedWindows.get(i);
|
final WindowState win = mTapExcludedWindows.get(i);
|
||||||
|
if (!win.isVisibleLw()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
win.getTouchableRegion(mTmpRegion);
|
win.getTouchableRegion(mTmpRegion);
|
||||||
mTouchExcludeRegion.op(mTmpRegion, Region.Op.UNION);
|
mTouchExcludeRegion.op(mTmpRegion, Region.Op.UNION);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,16 @@ public class TaskTapPointerEventListener implements PointerEventListener {
|
|||||||
mDisplayContent = displayContent;
|
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
|
@Override
|
||||||
public void onPointerEvent(MotionEvent motionEvent) {
|
public void onPointerEvent(MotionEvent motionEvent) {
|
||||||
switch (motionEvent.getActionMasked()) {
|
switch (motionEvent.getActionMasked()) {
|
||||||
@@ -67,6 +77,10 @@ public class TaskTapPointerEventListener implements PointerEventListener {
|
|||||||
case MotionEvent.ACTION_HOVER_MOVE: {
|
case MotionEvent.ACTION_HOVER_MOVE: {
|
||||||
final int x = (int) motionEvent.getX();
|
final int x = (int) motionEvent.getX();
|
||||||
final int y = (int) motionEvent.getY();
|
final int y = (int) motionEvent.getY();
|
||||||
|
if (mTouchExcludeRegion.contains(x, y)) {
|
||||||
|
restorePointerIcon(x, y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
final Task task = mDisplayContent.findTaskForResizePoint(x, y);
|
final Task task = mDisplayContent.findTaskForResizePoint(x, y);
|
||||||
int iconType = TYPE_NOT_SPECIFIED;
|
int iconType = TYPE_NOT_SPECIFIED;
|
||||||
if (task != null) {
|
if (task != null) {
|
||||||
@@ -103,13 +117,7 @@ public class TaskTapPointerEventListener implements PointerEventListener {
|
|||||||
case MotionEvent.ACTION_HOVER_EXIT: {
|
case MotionEvent.ACTION_HOVER_EXIT: {
|
||||||
final int x = (int) motionEvent.getX();
|
final int x = (int) motionEvent.getX();
|
||||||
final int y = (int) motionEvent.getY();
|
final int y = (int) motionEvent.getY();
|
||||||
if (mPointerIconType != TYPE_NOT_SPECIFIED) {
|
restorePointerIcon(x, y);
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
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_STATUS_BAR;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
||||||
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
|
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.LayoutParams.TYPE_WALLPAPER;
|
||||||
import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED;
|
import static android.view.WindowManager.REMOVE_CONTENT_MODE_UNDEFINED;
|
||||||
import static android.view.WindowManagerGlobal.ADD_OKAY;
|
import static android.view.WindowManagerGlobal.ADD_OKAY;
|
||||||
@@ -1373,6 +1374,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
case TYPE_NOTIFICATION_SHADE:
|
case TYPE_NOTIFICATION_SHADE:
|
||||||
case TYPE_NAVIGATION_BAR:
|
case TYPE_NAVIGATION_BAR:
|
||||||
case TYPE_INPUT_METHOD_DIALOG:
|
case TYPE_INPUT_METHOD_DIALOG:
|
||||||
|
case TYPE_VOLUME_OVERLAY:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user