diff options
-rw-r--r-- | core/java/android/app/IUiAutomationConnection.aidl | 4 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 27 |
2 files changed, 20 insertions, 11 deletions
diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl index 8ab9ac3..474154b 100644 --- a/core/java/android/app/IUiAutomationConnection.aidl +++ b/core/java/android/app/IUiAutomationConnection.aidl @@ -38,10 +38,12 @@ interface IUiAutomationConnection { boolean injectInputEvent(in InputEvent event, boolean sync); boolean setRotation(int rotation); Bitmap takeScreenshot(int width, int height); - void shutdown(); boolean clearWindowContentFrameStats(int windowId); WindowContentFrameStats getWindowContentFrameStats(int windowId); void clearWindowAnimationFrameStats(); WindowAnimationFrameStats getWindowAnimationFrameStats(); void executeShellCommand(String command, in ParcelFileDescriptor fd); + + // Called from the system process. + oneway void shutdown(); } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index eb6579c..4d9695d 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1355,6 +1355,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int DISPATCH_UIDS_CHANGED_MSG = 54; static final int REPORT_TIME_TRACKER_MSG = 55; static final int REPORT_USER_SWITCH_COMPLETE_MSG = 56; + static final int SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG = 57; static final int FIRST_ACTIVITY_STACK_MSG = 100; static final int FIRST_BROADCAST_QUEUE_MSG = 200; @@ -2019,6 +2020,17 @@ public final class ActivityManagerService extends ActivityManagerNative case REPORT_USER_SWITCH_COMPLETE_MSG: { dispatchUserSwitchComplete(msg.arg1); } break; + case SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG: { + IUiAutomationConnection connection = (IUiAutomationConnection) msg.obj; + try { + connection.shutdown(); + } catch (RemoteException e) { + Slog.w(TAG, "Error shutting down UiAutomationConnection"); + } + // Only a UiAutomation can set this flag and now that + // it is finished we make sure it is reset to its default. + mUserIsMonkey = false; + } break; } } }; @@ -17102,16 +17114,11 @@ public final class ActivityManagerService extends ActivityManagerNative } catch (RemoteException e) { } } - if (app.instrumentationUiAutomationConnection != null) { - try { - app.instrumentationUiAutomationConnection.shutdown(); - } catch (RemoteException re) { - /* ignore */ - } - // Only a UiAutomation can set this flag and now that - // it is finished we make sure it is reset to its default. - mUserIsMonkey = false; - } + + // Can't call out of the system process with a lock held, so post a message. + mHandler.obtainMessage(SHUTDOWN_UI_AUTOMATION_CONNECTION_MSG, + app.instrumentationUiAutomationConnection).sendToTarget(); + app.instrumentationWatcher = null; app.instrumentationUiAutomationConnection = null; app.instrumentationClass = null; |