diff options
Diffstat (limited to 'services/accessibility')
2 files changed, 16 insertions, 1 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index b3867a35dba5..07bb3356aec0 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -51,6 +51,7 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.database.ContentObserver; @@ -2934,11 +2935,19 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub public class AccessibilityDisplayListener implements DisplayManager.DisplayListener { private final DisplayManager mDisplayManager; private final ArrayList<Display> mDisplaysList = new ArrayList<>(); + private int mSystemUiUid = 0; AccessibilityDisplayListener(Context context, MainHandler handler) { mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); mDisplayManager.registerDisplayListener(this, handler); initializeDisplayList(); + + final PackageManagerInternal pm = + LocalServices.getService(PackageManagerInternal.class); + if (pm != null) { + mSystemUiUid = pm.getPackageUid(pm.getSystemUiServiceComponent().getPackageName(), + PackageManager.MATCH_SYSTEM_ONLY, mCurrentUserId); + } } ArrayList<Display> getValidDisplayList() { @@ -3034,8 +3043,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } // Private virtual displays are created by the ap and is not allowed to access by other // aps. We assume we could ignore them. + // The exceptional case is for bubbles. Because the bubbles use the activityView, and + // the virtual display of the activityView is private, so if the owner UID of the + // private virtual display is the one of system ui which creates the virtual display of + // bubbles, then this private virtual display should track the windows. if (display.getType() == Display.TYPE_VIRTUAL - && (display.getFlags() & Display.FLAG_PRIVATE) != 0) { + && (display.getFlags() & Display.FLAG_PRIVATE) != 0 + && display.getOwnerUid() != mSystemUiUid) { return false; } return true; diff --git a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java index e5340f10dc4c..642a841257bf 100644 --- a/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java +++ b/services/accessibility/java/com/android/server/accessibility/gestures/MultiFingerMultiTap.java @@ -197,6 +197,7 @@ class MultiFingerMultiTap extends GestureMatcher { if (getState() == STATE_GESTURE_STARTED || getState() == STATE_CLEAR) { // Needs more fingers lifted within the tap timeout // after reaching the target number of fingers are down. + cancelAfterTapTimeout(event, rawEvent, policyFlags); } else { cancelGesture(event, rawEvent, policyFlags); } |