Loading core/java/android/app/ActivityManagerInternal.java +6 −0 Original line number Diff line number Diff line Loading @@ -262,4 +262,10 @@ public abstract class ActivityManagerInternal { * Clears the previously saved activity manager ANR state. */ public abstract void clearSavedANRState(); /** * Set focus on an activity. * @param token The IApplicationToken for the activity */ public abstract void setFocusedActivity(IBinder token); } core/java/android/view/WindowInfo.java +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ public class WindowInfo implements Parcelable { public int layer; public IBinder token; public IBinder parentToken; public IBinder activityToken; public boolean focused; public final Rect boundsInScreen = new Rect(); public List<IBinder> childTokens; Loading @@ -66,6 +67,7 @@ public class WindowInfo implements Parcelable { window.layer = other.layer; window.token = other.token; window.parentToken = other.parentToken; window.activityToken = other.activityToken; window.focused = other.focused; window.boundsInScreen.set(other.boundsInScreen); window.title = other.title; Loading Loading @@ -99,6 +101,7 @@ public class WindowInfo implements Parcelable { parcel.writeInt(layer); parcel.writeStrongBinder(token); parcel.writeStrongBinder(parentToken); parcel.writeStrongBinder(activityToken); parcel.writeInt(focused ? 1 : 0); boundsInScreen.writeToParcel(parcel, flags); parcel.writeCharSequence(title); Loading Loading @@ -135,6 +138,7 @@ public class WindowInfo implements Parcelable { layer = parcel.readInt(); token = parcel.readStrongBinder(); parentToken = parcel.readStrongBinder(); activityToken = parcel.readStrongBinder(); focused = (parcel.readInt() == 1); boundsInScreen.readFromParcel(parcel); title = parcel.readCharSequence(); Loading @@ -155,6 +159,7 @@ public class WindowInfo implements Parcelable { layer = 0; token = null; parentToken = null; activityToken = null; focused = false; boundsInScreen.setEmpty(); if (childTokens != null) { Loading services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +67 −55 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.server.accessibility; import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS; import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS; import android.Manifest; import android.accessibilityservice.AccessibilityService; Loading @@ -27,6 +29,7 @@ import android.accessibilityservice.GestureDescription; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceConnection; import android.annotation.NonNull; import android.app.ActivityManagerInternal; import android.app.AlertDialog; import android.app.PendingIntent; import android.app.StatusBarManager; Loading Loading @@ -847,7 +850,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (resolvedUserId != mCurrentUserId) { return null; } if (mSecurityPolicy.findWindowById(windowId) == null) { if (mSecurityPolicy.findA11yWindowInfoById(windowId) == null) { return null; } IBinder token = mGlobalWindowTokens.get(windowId); Loading Loading @@ -3027,7 +3030,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (!permissionGranted) { return null; } AccessibilityWindowInfo window = mSecurityPolicy.findWindowById(windowId); AccessibilityWindowInfo window = mSecurityPolicy.findA11yWindowInfoById(windowId); if (window != null) { AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window); windowClone.setConnectionId(mId); Loading Loading @@ -3349,34 +3352,33 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { throws RemoteException { final int resolvedWindowId; IAccessibilityInteractionConnection connection = null; IBinder activityToken = null; synchronized (mLock) { if (!isCalledForCurrentUserLocked()) { return false; } resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId); final boolean permissionGranted = mSecurityPolicy.canGetAccessibilityNodeInfoLocked( this, resolvedWindowId); if (!permissionGranted) { return false; } else { connection = getConnectionLocked(resolvedWindowId); if (connection == null) { if (!mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId)) { return false; } AccessibilityWindowInfo windowInfo = mSecurityPolicy.findWindowById(resolvedWindowId); if ((windowInfo != null) && windowInfo.inPictureInPicture()) { boolean isA11yFocusAction = (action == AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS) || (action == AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); connection = getConnectionLocked(resolvedWindowId); if (connection == null) return false; final boolean isA11yFocusAction = (action == ACTION_ACCESSIBILITY_FOCUS) || (action == ACTION_CLEAR_ACCESSIBILITY_FOCUS); final AccessibilityWindowInfo a11yWindowInfo = mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId); if (!isA11yFocusAction) { final WindowInfo windowInfo = mSecurityPolicy.findWindowInfoById(resolvedWindowId); if (windowInfo != null) activityToken = windowInfo.activityToken; } if ((a11yWindowInfo != null) && a11yWindowInfo.inPictureInPicture()) { if ((mPictureInPictureActionReplacingConnection != null) && !isA11yFocusAction) { connection = mPictureInPictureActionReplacingConnection.mConnection; } } } } final int interrogatingPid = Binder.getCallingPid(); final long identityToken = Binder.clearCallingIdentity(); try { Loading @@ -3385,6 +3387,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { mPowerManager.userActivity(SystemClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY, 0); if (activityToken != null) { LocalServices.getService(ActivityManagerInternal.class) .setFocusedActivity(activityToken); } connection.performAccessibilityAction(accessibilityNodeId, action, arguments, interactionId, callback, mFetchFlags, interrogatingPid, interrogatingTid); } catch (RemoteException re) { Loading Loading @@ -4108,7 +4114,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { IAccessibilityInteractionConnectionCallback originalCallback, int resolvedWindowId, int interactionId, int interrogatingPid, long interrogatingTid) { AccessibilityWindowInfo windowInfo = mSecurityPolicy.findWindowById(resolvedWindowId); AccessibilityWindowInfo windowInfo = mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId); if ((windowInfo == null) || !windowInfo.inPictureInPicture() || (mPictureInPictureActionReplacingConnection == null)) { return originalCallback; Loading Loading @@ -4229,24 +4236,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { @Override public void onWindowsForAccessibilityChanged(List<WindowInfo> windows) { synchronized (mLock) { // Populate the windows to report. List<AccessibilityWindowInfo> reportedWindows = new ArrayList<>(); final int receivedWindowCount = windows.size(); for (int i = 0; i < receivedWindowCount; i++) { WindowInfo receivedWindow = windows.get(i); AccessibilityWindowInfo reportedWindow = populateReportedWindow( receivedWindow); if (reportedWindow != null) { reportedWindows.add(reportedWindow); } } if (DEBUG) { Slog.i(LOG_TAG, "Windows changed: " + reportedWindows); Slog.i(LOG_TAG, "Windows changed: " + windows); } // Let the policy update the focused and active windows. mSecurityPolicy.updateWindowsLocked(reportedWindows); mSecurityPolicy.updateWindowsLocked(windows); // Someone may be waiting for the windows - advertise it. mLock.notifyAll(); Loading Loading @@ -4468,7 +4463,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // In Z order public List<AccessibilityWindowInfo> mWindows; public SparseArray<AccessibilityWindowInfo> mWindowsById = new SparseArray<>(); public SparseArray<AccessibilityWindowInfo> mA11yWindowInfoById = new SparseArray<>(); public SparseArray<WindowInfo> mWindowInfoById = new SparseArray<>(); public int mActiveWindowId = INVALID_WINDOW_ID; public int mFocusedWindowId = INVALID_WINDOW_ID; Loading Loading @@ -4512,14 +4508,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } public void clearWindowsLocked() { List<AccessibilityWindowInfo> windows = Collections.emptyList(); List<WindowInfo> windows = Collections.emptyList(); final int activeWindowId = mActiveWindowId; updateWindowsLocked(windows); mActiveWindowId = activeWindowId; mWindows = null; } public void updateWindowsLocked(List<AccessibilityWindowInfo> windows) { public void updateWindowsLocked(List<WindowInfo> windows) { if (mWindows == null) { mWindows = new ArrayList<>(); } Loading @@ -4528,7 +4524,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { for (int i = oldWindowCount - 1; i >= 0; i--) { mWindows.remove(i).recycle(); } mWindowsById.clear(); mA11yWindowInfoById.clear(); for (int i = 0; i < mWindowInfoById.size(); i++) { mWindowInfoById.valueAt(i).recycle(); } mWindowInfoById.clear(); mFocusedWindowId = INVALID_WINDOW_ID; if (!mTouchInteractionInProgress) { Loading @@ -4545,7 +4546,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { final int windowCount = windows.size(); if (windowCount > 0) { for (int i = 0; i < windowCount; i++) { AccessibilityWindowInfo window = windows.get(i); WindowInfo windowInfo = windows.get(i); AccessibilityWindowInfo window = (mWindowsForAccessibilityCallback != null) ? mWindowsForAccessibilityCallback.populateReportedWindow(windowInfo) : null; if (window != null) { final int windowId = window.getId(); if (window.isFocused()) { mFocusedWindowId = windowId; Loading @@ -4557,7 +4562,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } mWindows.add(window); mWindowsById.put(windowId, window); mA11yWindowInfoById.put(windowId, window); mWindowInfoById.put(windowId, WindowInfo.obtain(windowInfo)); } } if (mTouchInteractionInProgress && activeWindowGone) { Loading @@ -4566,7 +4573,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // Focused window may change the active one, so set the // active window once we decided which it is. for (int i = 0; i < windowCount; i++) { final int accessibilityWindowCount = mWindows.size(); for (int i = 0; i < accessibilityWindowCount; i++) { AccessibilityWindowInfo window = mWindows.get(i); if (window.getId() == mActiveWindowId) { window.setActive(true); Loading Loading @@ -4869,11 +4877,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (windowId == mActiveWindowId) { return true; } return findWindowById(windowId) != null; return findA11yWindowInfoById(windowId) != null; } private AccessibilityWindowInfo findA11yWindowInfoById(int windowId) { return mA11yWindowInfoById.get(windowId); } private AccessibilityWindowInfo findWindowById(int windowId) { return mWindowsById.get(windowId); private WindowInfo findWindowInfoById(int windowId) { return mWindowInfoById.get(windowId); } private AccessibilityWindowInfo getPictureInPictureWindow() { Loading services/core/java/com/android/server/am/ActivityManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -24107,6 +24107,21 @@ public class ActivityManagerService extends IActivityManager.Stub mLastANRState = null; } } @Override public void setFocusedActivity(IBinder token) { synchronized (ActivityManagerService.this) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r == null) { throw new IllegalArgumentException( "setFocusedActivity: No activity record matching token=" + token); } if (mStackSupervisor.moveFocusableActivityStackToFrontLocked( r, "setFocusedActivity")) { mStackSupervisor.resumeFocusedStackTopActivityLocked(); } } } } /** services/core/java/com/android/server/wm/WindowState.java +3 −0 Original line number Diff line number Diff line Loading @@ -4022,6 +4022,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP windowInfo.type = mAttrs.type; windowInfo.layer = mLayer; windowInfo.token = mClient.asBinder(); if (mAppToken != null) { windowInfo.activityToken = mAppToken.appToken.asBinder(); } windowInfo.title = mAttrs.accessibilityTitle; windowInfo.accessibilityIdOfAnchor = mAttrs.accessibilityIdOfAnchor; windowInfo.focused = isFocused(); Loading Loading
core/java/android/app/ActivityManagerInternal.java +6 −0 Original line number Diff line number Diff line Loading @@ -262,4 +262,10 @@ public abstract class ActivityManagerInternal { * Clears the previously saved activity manager ANR state. */ public abstract void clearSavedANRState(); /** * Set focus on an activity. * @param token The IApplicationToken for the activity */ public abstract void setFocusedActivity(IBinder token); }
core/java/android/view/WindowInfo.java +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ public class WindowInfo implements Parcelable { public int layer; public IBinder token; public IBinder parentToken; public IBinder activityToken; public boolean focused; public final Rect boundsInScreen = new Rect(); public List<IBinder> childTokens; Loading @@ -66,6 +67,7 @@ public class WindowInfo implements Parcelable { window.layer = other.layer; window.token = other.token; window.parentToken = other.parentToken; window.activityToken = other.activityToken; window.focused = other.focused; window.boundsInScreen.set(other.boundsInScreen); window.title = other.title; Loading Loading @@ -99,6 +101,7 @@ public class WindowInfo implements Parcelable { parcel.writeInt(layer); parcel.writeStrongBinder(token); parcel.writeStrongBinder(parentToken); parcel.writeStrongBinder(activityToken); parcel.writeInt(focused ? 1 : 0); boundsInScreen.writeToParcel(parcel, flags); parcel.writeCharSequence(title); Loading Loading @@ -135,6 +138,7 @@ public class WindowInfo implements Parcelable { layer = parcel.readInt(); token = parcel.readStrongBinder(); parentToken = parcel.readStrongBinder(); activityToken = parcel.readStrongBinder(); focused = (parcel.readInt() == 1); boundsInScreen.readFromParcel(parcel); title = parcel.readCharSequence(); Loading @@ -155,6 +159,7 @@ public class WindowInfo implements Parcelable { layer = 0; token = null; parentToken = null; activityToken = null; focused = false; boundsInScreen.setEmpty(); if (childTokens != null) { Loading
services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +67 −55 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.server.accessibility; import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS; import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS; import android.Manifest; import android.accessibilityservice.AccessibilityService; Loading @@ -27,6 +29,7 @@ import android.accessibilityservice.GestureDescription; import android.accessibilityservice.IAccessibilityServiceClient; import android.accessibilityservice.IAccessibilityServiceConnection; import android.annotation.NonNull; import android.app.ActivityManagerInternal; import android.app.AlertDialog; import android.app.PendingIntent; import android.app.StatusBarManager; Loading Loading @@ -847,7 +850,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (resolvedUserId != mCurrentUserId) { return null; } if (mSecurityPolicy.findWindowById(windowId) == null) { if (mSecurityPolicy.findA11yWindowInfoById(windowId) == null) { return null; } IBinder token = mGlobalWindowTokens.get(windowId); Loading Loading @@ -3027,7 +3030,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (!permissionGranted) { return null; } AccessibilityWindowInfo window = mSecurityPolicy.findWindowById(windowId); AccessibilityWindowInfo window = mSecurityPolicy.findA11yWindowInfoById(windowId); if (window != null) { AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window); windowClone.setConnectionId(mId); Loading Loading @@ -3349,34 +3352,33 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { throws RemoteException { final int resolvedWindowId; IAccessibilityInteractionConnection connection = null; IBinder activityToken = null; synchronized (mLock) { if (!isCalledForCurrentUserLocked()) { return false; } resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId); final boolean permissionGranted = mSecurityPolicy.canGetAccessibilityNodeInfoLocked( this, resolvedWindowId); if (!permissionGranted) { return false; } else { connection = getConnectionLocked(resolvedWindowId); if (connection == null) { if (!mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId)) { return false; } AccessibilityWindowInfo windowInfo = mSecurityPolicy.findWindowById(resolvedWindowId); if ((windowInfo != null) && windowInfo.inPictureInPicture()) { boolean isA11yFocusAction = (action == AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS) || (action == AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS); connection = getConnectionLocked(resolvedWindowId); if (connection == null) return false; final boolean isA11yFocusAction = (action == ACTION_ACCESSIBILITY_FOCUS) || (action == ACTION_CLEAR_ACCESSIBILITY_FOCUS); final AccessibilityWindowInfo a11yWindowInfo = mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId); if (!isA11yFocusAction) { final WindowInfo windowInfo = mSecurityPolicy.findWindowInfoById(resolvedWindowId); if (windowInfo != null) activityToken = windowInfo.activityToken; } if ((a11yWindowInfo != null) && a11yWindowInfo.inPictureInPicture()) { if ((mPictureInPictureActionReplacingConnection != null) && !isA11yFocusAction) { connection = mPictureInPictureActionReplacingConnection.mConnection; } } } } final int interrogatingPid = Binder.getCallingPid(); final long identityToken = Binder.clearCallingIdentity(); try { Loading @@ -3385,6 +3387,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { mPowerManager.userActivity(SystemClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_ACCESSIBILITY, 0); if (activityToken != null) { LocalServices.getService(ActivityManagerInternal.class) .setFocusedActivity(activityToken); } connection.performAccessibilityAction(accessibilityNodeId, action, arguments, interactionId, callback, mFetchFlags, interrogatingPid, interrogatingTid); } catch (RemoteException re) { Loading Loading @@ -4108,7 +4114,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { IAccessibilityInteractionConnectionCallback originalCallback, int resolvedWindowId, int interactionId, int interrogatingPid, long interrogatingTid) { AccessibilityWindowInfo windowInfo = mSecurityPolicy.findWindowById(resolvedWindowId); AccessibilityWindowInfo windowInfo = mSecurityPolicy.findA11yWindowInfoById(resolvedWindowId); if ((windowInfo == null) || !windowInfo.inPictureInPicture() || (mPictureInPictureActionReplacingConnection == null)) { return originalCallback; Loading Loading @@ -4229,24 +4236,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { @Override public void onWindowsForAccessibilityChanged(List<WindowInfo> windows) { synchronized (mLock) { // Populate the windows to report. List<AccessibilityWindowInfo> reportedWindows = new ArrayList<>(); final int receivedWindowCount = windows.size(); for (int i = 0; i < receivedWindowCount; i++) { WindowInfo receivedWindow = windows.get(i); AccessibilityWindowInfo reportedWindow = populateReportedWindow( receivedWindow); if (reportedWindow != null) { reportedWindows.add(reportedWindow); } } if (DEBUG) { Slog.i(LOG_TAG, "Windows changed: " + reportedWindows); Slog.i(LOG_TAG, "Windows changed: " + windows); } // Let the policy update the focused and active windows. mSecurityPolicy.updateWindowsLocked(reportedWindows); mSecurityPolicy.updateWindowsLocked(windows); // Someone may be waiting for the windows - advertise it. mLock.notifyAll(); Loading Loading @@ -4468,7 +4463,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // In Z order public List<AccessibilityWindowInfo> mWindows; public SparseArray<AccessibilityWindowInfo> mWindowsById = new SparseArray<>(); public SparseArray<AccessibilityWindowInfo> mA11yWindowInfoById = new SparseArray<>(); public SparseArray<WindowInfo> mWindowInfoById = new SparseArray<>(); public int mActiveWindowId = INVALID_WINDOW_ID; public int mFocusedWindowId = INVALID_WINDOW_ID; Loading Loading @@ -4512,14 +4508,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } public void clearWindowsLocked() { List<AccessibilityWindowInfo> windows = Collections.emptyList(); List<WindowInfo> windows = Collections.emptyList(); final int activeWindowId = mActiveWindowId; updateWindowsLocked(windows); mActiveWindowId = activeWindowId; mWindows = null; } public void updateWindowsLocked(List<AccessibilityWindowInfo> windows) { public void updateWindowsLocked(List<WindowInfo> windows) { if (mWindows == null) { mWindows = new ArrayList<>(); } Loading @@ -4528,7 +4524,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { for (int i = oldWindowCount - 1; i >= 0; i--) { mWindows.remove(i).recycle(); } mWindowsById.clear(); mA11yWindowInfoById.clear(); for (int i = 0; i < mWindowInfoById.size(); i++) { mWindowInfoById.valueAt(i).recycle(); } mWindowInfoById.clear(); mFocusedWindowId = INVALID_WINDOW_ID; if (!mTouchInteractionInProgress) { Loading @@ -4545,7 +4546,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { final int windowCount = windows.size(); if (windowCount > 0) { for (int i = 0; i < windowCount; i++) { AccessibilityWindowInfo window = windows.get(i); WindowInfo windowInfo = windows.get(i); AccessibilityWindowInfo window = (mWindowsForAccessibilityCallback != null) ? mWindowsForAccessibilityCallback.populateReportedWindow(windowInfo) : null; if (window != null) { final int windowId = window.getId(); if (window.isFocused()) { mFocusedWindowId = windowId; Loading @@ -4557,7 +4562,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } mWindows.add(window); mWindowsById.put(windowId, window); mA11yWindowInfoById.put(windowId, window); mWindowInfoById.put(windowId, WindowInfo.obtain(windowInfo)); } } if (mTouchInteractionInProgress && activeWindowGone) { Loading @@ -4566,7 +4573,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // Focused window may change the active one, so set the // active window once we decided which it is. for (int i = 0; i < windowCount; i++) { final int accessibilityWindowCount = mWindows.size(); for (int i = 0; i < accessibilityWindowCount; i++) { AccessibilityWindowInfo window = mWindows.get(i); if (window.getId() == mActiveWindowId) { window.setActive(true); Loading Loading @@ -4869,11 +4877,15 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (windowId == mActiveWindowId) { return true; } return findWindowById(windowId) != null; return findA11yWindowInfoById(windowId) != null; } private AccessibilityWindowInfo findA11yWindowInfoById(int windowId) { return mA11yWindowInfoById.get(windowId); } private AccessibilityWindowInfo findWindowById(int windowId) { return mWindowsById.get(windowId); private WindowInfo findWindowInfoById(int windowId) { return mWindowInfoById.get(windowId); } private AccessibilityWindowInfo getPictureInPictureWindow() { Loading
services/core/java/com/android/server/am/ActivityManagerService.java +15 −0 Original line number Diff line number Diff line Loading @@ -24107,6 +24107,21 @@ public class ActivityManagerService extends IActivityManager.Stub mLastANRState = null; } } @Override public void setFocusedActivity(IBinder token) { synchronized (ActivityManagerService.this) { final ActivityRecord r = ActivityRecord.forTokenLocked(token); if (r == null) { throw new IllegalArgumentException( "setFocusedActivity: No activity record matching token=" + token); } if (mStackSupervisor.moveFocusableActivityStackToFrontLocked( r, "setFocusedActivity")) { mStackSupervisor.resumeFocusedStackTopActivityLocked(); } } } } /**
services/core/java/com/android/server/wm/WindowState.java +3 −0 Original line number Diff line number Diff line Loading @@ -4022,6 +4022,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP windowInfo.type = mAttrs.type; windowInfo.layer = mLayer; windowInfo.token = mClient.asBinder(); if (mAppToken != null) { windowInfo.activityToken = mAppToken.appToken.asBinder(); } windowInfo.title = mAttrs.accessibilityTitle; windowInfo.accessibilityIdOfAnchor = mAttrs.accessibilityIdOfAnchor; windowInfo.focused = isFocused(); Loading