Merge "Cannot click on partially visible views in touch exploration." into jb-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
28e8f76c50
@ -2338,6 +2338,7 @@ public final class ViewRootImpl implements ViewParent,
|
|||||||
mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds);
|
mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds);
|
||||||
}
|
}
|
||||||
bounds.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop);
|
bounds.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop);
|
||||||
|
bounds.intersect(0, 0, mAttachInfo.mViewRootImpl.mWidth, mAttachInfo.mViewRootImpl.mHeight);
|
||||||
drawable.setBounds(bounds);
|
drawable.setBounds(bounds);
|
||||||
drawable.draw(canvas);
|
drawable.draw(canvas);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,9 @@ import android.content.pm.PackageManager;
|
|||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
|
import android.graphics.Point;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.hardware.display.DisplayManager;
|
||||||
import android.hardware.input.InputManager;
|
import android.hardware.input.InputManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
@ -62,6 +64,7 @@ import android.text.TextUtils;
|
|||||||
import android.text.TextUtils.SimpleStringSplitter;
|
import android.text.TextUtils.SimpleStringSplitter;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.util.SparseArray;
|
import android.util.SparseArray;
|
||||||
|
import android.view.Display;
|
||||||
import android.view.IWindow;
|
import android.view.IWindow;
|
||||||
import android.view.IWindowManager;
|
import android.view.IWindowManager;
|
||||||
import android.view.InputDevice;
|
import android.view.InputDevice;
|
||||||
@ -137,6 +140,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
private final List<AccessibilityServiceInfo> mEnabledServicesForFeedbackTempList =
|
private final List<AccessibilityServiceInfo> mEnabledServicesForFeedbackTempList =
|
||||||
new ArrayList<AccessibilityServiceInfo>();
|
new ArrayList<AccessibilityServiceInfo>();
|
||||||
|
|
||||||
|
private final Rect mTempRect = new Rect();
|
||||||
|
|
||||||
|
private final Point mTempPoint = new Point();
|
||||||
|
|
||||||
|
private final Display mDefaultDisplay;
|
||||||
|
|
||||||
private final PackageManager mPackageManager;
|
private final PackageManager mPackageManager;
|
||||||
|
|
||||||
private final IWindowManager mWindowManagerService;
|
private final IWindowManager mWindowManagerService;
|
||||||
@ -194,6 +203,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
mWindowManagerService = (IWindowManager) ServiceManager.getService(Context.WINDOW_SERVICE);
|
mWindowManagerService = (IWindowManager) ServiceManager.getService(Context.WINDOW_SERVICE);
|
||||||
mSecurityPolicy = new SecurityPolicy();
|
mSecurityPolicy = new SecurityPolicy();
|
||||||
mMainHandler = new MainHandler(mContext.getMainLooper());
|
mMainHandler = new MainHandler(mContext.getMainLooper());
|
||||||
|
//TODO: (multi-display) We need to support multiple displays.
|
||||||
|
DisplayManager displayManager = (DisplayManager)
|
||||||
|
mContext.getSystemService(Context.DISPLAY_SERVICE);
|
||||||
|
mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
|
||||||
registerBroadcastReceivers();
|
registerBroadcastReceivers();
|
||||||
new AccessibilityContentObserver(mMainHandler).register(
|
new AccessibilityContentObserver(mMainHandler).register(
|
||||||
context.getContentResolver());
|
context.getContentResolver());
|
||||||
@ -582,6 +595,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
* @param outBounds The output to which to write the focus bounds.
|
* @param outBounds The output to which to write the focus bounds.
|
||||||
* @return Whether accessibility focus was found and the bounds are populated.
|
* @return Whether accessibility focus was found and the bounds are populated.
|
||||||
*/
|
*/
|
||||||
|
// TODO: (multi-display) Make sure this works for multiple displays.
|
||||||
boolean getAccessibilityFocusBoundsInActiveWindow(Rect outBounds) {
|
boolean getAccessibilityFocusBoundsInActiveWindow(Rect outBounds) {
|
||||||
// Instead of keeping track of accessibility focus events per
|
// Instead of keeping track of accessibility focus events per
|
||||||
// window to be able to find the focus in the active window,
|
// window to be able to find the focus in the active window,
|
||||||
@ -603,6 +617,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
focus.getBoundsInScreen(outBounds);
|
focus.getBoundsInScreen(outBounds);
|
||||||
|
// Clip to the window rectangle.
|
||||||
|
Rect windowBounds = mTempRect;
|
||||||
|
getActiveWindowBounds(windowBounds);
|
||||||
|
outBounds.intersect(windowBounds);
|
||||||
|
// Clip to the screen rectangle.
|
||||||
|
mDefaultDisplay.getRealSize(mTempPoint);
|
||||||
|
outBounds.intersect(0, 0, mTempPoint.x, mTempPoint.y);
|
||||||
return true;
|
return true;
|
||||||
} finally {
|
} finally {
|
||||||
client.removeConnection(connectionId);
|
client.removeConnection(connectionId);
|
||||||
|
Reference in New Issue
Block a user