Added SynchronousUserSwitchObserver
This class provides a synchronous version of onUserSwitching, which does not
require notifying a callback.
Bug: 25816558
Change-Id: Id31bb79bf10b5afd72dfca28cf4bea817e726f6f
diff --git a/core/java/android/app/SynchronousUserSwitchObserver.java b/core/java/android/app/SynchronousUserSwitchObserver.java
new file mode 100644
index 0000000..6d929f9
--- /dev/null
+++ b/core/java/android/app/SynchronousUserSwitchObserver.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.app;
+
+import android.os.Bundle;
+import android.os.IRemoteCallback;
+import android.os.RemoteException;
+
+/**
+ * Base class for synchronous implementations of {@link IUserSwitchObserver}
+ *
+ * @hide
+ */
+public abstract class SynchronousUserSwitchObserver extends IUserSwitchObserver.Stub {
+ /**
+ * Calls {@link #onUserSwitching(int)} and notifies {@code reply} by calling
+ * {@link IRemoteCallback#sendResult(Bundle)}.
+ */
+ @Override
+ public final void onUserSwitching(int newUserId, IRemoteCallback reply) throws RemoteException {
+ try {
+ onUserSwitching(newUserId);
+ } finally {
+ if (reply != null) {
+ reply.sendResult(null);
+ }
+ }
+ }
+
+ /**
+ * Synchronous version of {@link IUserSwitchObserver#onUserSwitching(int, IRemoteCallback)}
+ */
+ public abstract void onUserSwitching(int newUserId) throws RemoteException;
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 83edc96..1f52a52 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -19,8 +19,8 @@
import android.app.ActivityManagerNative;
import android.app.AlarmManager;
import android.app.AlarmManager.AlarmClockInfo;
-import android.app.IUserSwitchObserver;
import android.app.StatusBarManager;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,7 +28,6 @@
import android.content.pm.UserInfo;
import android.media.AudioManager;
import android.os.Handler;
-import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@@ -378,17 +377,11 @@
}
}
- private final IUserSwitchObserver.Stub mUserSwitchListener =
- new IUserSwitchObserver.Stub() {
+ private final SynchronousUserSwitchObserver mUserSwitchListener =
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
mUserInfoController.reloadUserInfo();
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 42dd9a8..45c1ed2 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -43,11 +43,11 @@
import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.AppOpsManager;
-import android.app.IUserSwitchObserver;
import android.app.KeyguardManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -80,7 +80,6 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.IInterface;
-import android.os.IRemoteCallback;
import android.os.Message;
import android.os.Parcel;
import android.os.Process;
@@ -788,18 +787,13 @@
int userId = 0;
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId)
+ throws RemoteException {
synchronized(mMethodMap) {
switchUserLocked(newUserId);
}
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index fcd56eb7..c4b4cbe 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -29,7 +29,7 @@
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
-import android.app.IUserSwitchObserver;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -45,7 +45,6 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -102,18 +101,12 @@
int userId = UserHandle.USER_SYSTEM;
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
synchronized(mSpellCheckerMap) {
switchUserLocked(newUserId);
}
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 103ed0a..e0a9975 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -19,12 +19,11 @@
import android.Manifest;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
-import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityManagerNative;
import android.app.AlarmManager;
import android.app.AppOpsManager;
-import android.app.IUserSwitchObserver;
import android.app.PendingIntent;
+import android.app.SynchronousUserSwitchObserver;
import android.content.ComponentName;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -38,7 +37,6 @@
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SELinux;
@@ -1134,17 +1132,11 @@
private void listenForUserSwitches() {
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0 /* unused */)
.sendToTarget();
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {