diff options
6 files changed, 41 insertions, 0 deletions
diff --git a/core/java/android/app/IUserSwitchObserver.aidl b/core/java/android/app/IUserSwitchObserver.aidl index 845897b..caee14f 100644 --- a/core/java/android/app/IUserSwitchObserver.aidl +++ b/core/java/android/app/IUserSwitchObserver.aidl @@ -22,4 +22,5 @@ import android.os.IRemoteCallback; oneway interface IUserSwitchObserver { void onUserSwitching(int newUserId, IRemoteCallback reply); void onUserSwitchComplete(int newUserId); + void onForegroundProfileSwitch(int newProfileId); } diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 82dec30..a928211 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -722,6 +722,10 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { newUserId, 0)); mSwitchingUser = false; } + @Override + public void onForegroundProfileSwitch(int newProfileId) { + // Ignore. + } }); } catch (RemoteException e) { // TODO Auto-generated catch block diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index 4677f65..3e068bc 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -796,6 +796,11 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { } + + @Override + public void onForegroundProfileSwitch(int newProfileId) { + // Ignore. + } }); userId = ActivityManagerNative.getDefault().getCurrentUser().id; } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java index 5add88e..9a6f696 100644 --- a/services/core/java/com/android/server/TextServicesManagerService.java +++ b/services/core/java/com/android/server/TextServicesManagerService.java @@ -116,6 +116,11 @@ public class TextServicesManagerService extends ITextServicesManager.Stub { @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { } + + @Override + public void onForegroundProfileSwitch(int newProfileId) { + // Ignore. + } }); userId = ActivityManagerNative.getDefault().getCurrentUser().id; } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index d2f52b4..b3808fc 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1277,6 +1277,7 @@ public final class ActivityManagerService extends ActivityManagerNative static final int NOTIFY_CLEARTEXT_NETWORK_MSG = 50; static final int POST_DUMP_HEAP_NOTIFICATION_MSG = 51; static final int DELETE_DUMPHEAP_MSG = 52; + static final int FOREGROUND_PROFILE_CHANGED_MSG = 53; static final int FIRST_ACTIVITY_STACK_MSG = 100; static final int FIRST_BROADCAST_QUEUE_MSG = 200; @@ -1915,6 +1916,9 @@ public final class ActivityManagerService extends ActivityManagerNative mMemWatchDumpUid = -1; } } break; + case FOREGROUND_PROFILE_CHANGED_MSG: { + dispatchForegroundProfileChanged(msg.arg1); + } break; } } }; @@ -2509,6 +2513,11 @@ public final class ActivityManagerService extends ActivityManagerNative mWindowManager.setFocusedApp(r.appToken, true); } applyUpdateLockStateLocked(r); + if (last != null && last.userId != mFocusedActivity.userId) { + mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG); + mHandler.sendMessage(mHandler.obtainMessage(FOREGROUND_PROFILE_CHANGED_MSG, + mFocusedActivity.userId, 0)); + } } EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY, mCurrentUserId, mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName); @@ -19032,6 +19041,18 @@ public final class ActivityManagerService extends ActivityManagerNative return true; } + void dispatchForegroundProfileChanged(int userId) { + final int N = mUserSwitchObservers.beginBroadcast(); + for (int i = 0; i < N; i++) { + try { + mUserSwitchObservers.getBroadcastItem(i).onForegroundProfileSwitch(userId); + } catch (RemoteException e) { + // Ignore + } + } + mUserSwitchObservers.finishBroadcast(); + } + void sendUserSwitchBroadcastsLocked(int oldUserId, int newUserId) { long ident = Binder.clearCallingIdentity(); try { diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 99cf8df..54be380 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -538,6 +538,11 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { } + + @Override + public void onForegroundProfileSwitch(int newProfileId) { + // Ignore. + } }); } catch (RemoteException e) { // TODO Auto-generated catch block |