X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=services%2Faccessibility%2Fjava%2Fcom%2Fandroid%2Fserver%2Faccessibility%2FAccessibilityManagerService.java;h=bfbf0ac7cf375818213da2e97fd920572127279c;hb=5d604181;hp=8ab3588bff0fab7d0184350f7eb8c214899e34c3;hpb=d988a45d60cd2ff05e41a44c78cb09d307bd90cb;p=android-x86%2Fframeworks-base.git diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 8ab3588bff0f..bfbf0ac7cf37 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -67,7 +67,6 @@ import android.util.Pools.Pool; import android.util.Pools.SimplePool; import android.util.Slog; import android.util.SparseArray; -import android.view.AccessibilityManagerInternal; import android.view.Display; import android.view.IWindow; import android.view.InputDevice; @@ -148,6 +147,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private static final int MAX_POOL_SIZE = 10; + private static final int WINDOW_ID_UNKNOWN = -1; + private static int sIdCounter = 0; private static int sNextWindowId; @@ -233,7 +234,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { registerBroadcastReceivers(); new AccessibilityContentObserver(mMainHandler).register( context.getContentResolver()); - LocalServices.addService(AccessibilityManagerInternal.class, new LocalService()); } private UserState getUserStateLocked(int userId) { @@ -787,6 +787,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return false; } + boolean accessibilityFocusOnlyInActiveWindow() { + synchronized (mLock) { + return mWindowsForAccessibilityCallback == null; + } + } + int getActiveWindowId() { return mSecurityPolicy.getActiveWindowId(); } @@ -1073,7 +1079,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return false; } - if (!event.isImportantForAccessibility() + if (event.getWindowId() != WINDOW_ID_UNKNOWN && !event.isImportantForAccessibility() && (service.mFetchFlags & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) == 0) { return false; @@ -1323,7 +1329,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { updateTouchExplorationLocked(userState); updateEnhancedWebAccessibilityLocked(userState); updateDisplayColorAdjustmentSettingsLocked(userState); - updateEncryptionState(userState); scheduleUpdateInputFilter(userState); scheduleUpdateClientsIfNeededLocked(userState); } @@ -1600,17 +1605,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { DisplayAdjustmentUtils.applyAdjustments(mContext, userState.mUserId); } - private void updateEncryptionState(UserState userState) { - if (userState.mUserId != UserHandle.USER_OWNER) { - return; - } - if (hasRunningServicesLocked(userState) && LockPatternUtils.isDeviceEncrypted()) { - // If there are running accessibility services we do not have encryption as - // the user needs the accessibility layer to be running to authenticate. - mLockPatternUtils.clearEncryptionPassword(); - } - } - private boolean hasRunningServicesLocked(UserState userState) { return !userState.mBoundServices.isEmpty() || !userState.mBindingServices.isEmpty(); } @@ -3318,6 +3312,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } // $fall-through$ case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED: + case AccessibilityEvent.TYPE_ANNOUNCEMENT: // All events generated by the user touching the // screen should *always* be dispatched. case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START: @@ -3596,6 +3591,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } private void notifyWindowsChanged() { + if (mWindowsForAccessibilityCallback == null) { + return; + } final long identity = Binder.clearCallingIdentity(); try { // Let the client know the windows changed. @@ -3680,6 +3678,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } private boolean isRetrievalAllowingWindow(int windowId) { + // The system gets to interact with any window it wants. + if (Binder.getCallingUid() == Process.SYSTEM_UID) { + return true; + } if (windowId == mActiveWindowId) { return true; } @@ -3949,14 +3951,4 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } } - - private final class LocalService extends AccessibilityManagerInternal { - @Override - public boolean isNonDefaultEncryptionPasswordAllowed() { - synchronized (mLock) { - UserState userState = getCurrentUserStateLocked(); - return !hasRunningServicesLocked(userState); - } - } - } }