From d953ab6fdf788352f1524685ad8e608a87c299c0 Mon Sep 17 00:00:00 2001 From: Annie Chin Date: Thu, 7 Jul 2016 11:57:33 -0700 Subject: [PATCH] Move voice interaction callback list to VoiceInteractionManagerService Bug: 30005941 Change-Id: I23b3bba8b4525068b0f032d5ca908c0f1d181558 --- .../VoiceInteractionManagerService.java | 40 ++++++++++++- .../VoiceInteractionManagerServiceImpl.java | 58 ++++--------------- 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 6aa12decf573a..43d2a1f1156cd 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -86,6 +86,9 @@ public class VoiceInteractionManagerService extends SystemService { final TreeSet mLoadedKeyphraseIds; SoundTriggerInternal mSoundTriggerInternal; + private final RemoteCallbackList + mVoiceInteractionSessionListeners = new RemoteCallbackList<>(); + public VoiceInteractionManagerService(Context context) { super(context); mContext = context; @@ -1043,8 +1046,41 @@ public class VoiceInteractionManagerService extends SystemService { public void registerVoiceInteractionSessionListener( IVoiceInteractionSessionListener listener) { enforceCallingPermission(Manifest.permission.ACCESS_VOICE_INTERACTION_SERVICE); - if (mImpl != null) { - mImpl.registerVoiceInteractionSessionListener(listener); + synchronized (this) { + mVoiceInteractionSessionListeners.register(listener); + } + } + + public void onSessionShown() { + synchronized (this) { + final int size = mVoiceInteractionSessionListeners.beginBroadcast(); + for (int i = 0; i < size; ++i) { + final IVoiceInteractionSessionListener listener = + mVoiceInteractionSessionListeners.getBroadcastItem(i); + try { + listener.onVoiceSessionShown(); + } catch (RemoteException e) { + Slog.e(TAG, "Error delivering voice interaction open event.", e); + } + } + mVoiceInteractionSessionListeners.finishBroadcast(); + } + } + + public void onSessionHidden() { + synchronized (this) { + final int size = mVoiceInteractionSessionListeners.beginBroadcast(); + for (int i = 0; i < size; ++i) { + final IVoiceInteractionSessionListener listener = + mVoiceInteractionSessionListeners.getBroadcastItem(i); + try { + listener.onVoiceSessionHidden(); + + } catch (RemoteException e) { + Slog.e(TAG, "Error delivering voice interaction closed event.", e); + } + } + mVoiceInteractionSessionListeners.finishBroadcast(); } } diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java index 52e1a9b51c352..a46ccee0b96d3 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java @@ -30,7 +30,6 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; -import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; @@ -60,7 +59,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne final Context mContext; final Handler mHandler; - final Object mLock; + final VoiceInteractionManagerService.VoiceInteractionManagerServiceStub mServiceStub; final int mUser; final ComponentName mComponent; final IActivityManager mAm; @@ -73,16 +72,13 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne VoiceInteractionSessionConnection mActiveSession; int mDisabledShowContext; - private final RemoteCallbackList - mVoiceInteractionSessionListeners = new RemoteCallbackList<>(); - final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(intent.getAction())) { String reason = intent.getStringExtra("reason"); if (!CLOSE_REASON_VOICE_INTERACTION.equals(reason) && !"dream".equals(reason)) { - synchronized (mLock) { + synchronized (mServiceStub) { if (mActiveSession != null && mActiveSession.mSession != null) { try { mActiveSession.mSession.closeSystemDialogs(); @@ -98,7 +94,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne final ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { - synchronized (mLock) { + synchronized (mServiceStub) { mService = IVoiceInteractionService.Stub.asInterface(service); try { mService.ready(); @@ -113,11 +109,12 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne } }; - VoiceInteractionManagerServiceImpl(Context context, Handler handler, Object lock, + VoiceInteractionManagerServiceImpl(Context context, Handler handler, + VoiceInteractionManagerService.VoiceInteractionManagerServiceStub stub, int userHandle, ComponentName service) { mContext = context; mHandler = handler; - mLock = lock; + mServiceStub = stub; mUser = userHandle; mComponent = service; mAm = ActivityManagerNative.getDefault(); @@ -153,8 +150,9 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne public boolean showSessionLocked(Bundle args, int flags, IVoiceInteractionSessionShowCallback showCallback, IBinder activityToken) { if (mActiveSession == null) { - mActiveSession = new VoiceInteractionSessionConnection(mLock, mSessionComponentName, - mUser, mContext, this, mInfo.getServiceInfo().applicationInfo.uid, mHandler); + mActiveSession = new VoiceInteractionSessionConnection(mServiceStub, + mSessionComponentName, mUser, mContext, this, + mInfo.getServiceInfo().applicationInfo.uid, mHandler); } List activityTokens = null; if (activityToken == null) { @@ -358,52 +356,20 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne } } - public void registerVoiceInteractionSessionListener( - IVoiceInteractionSessionListener listener) { - synchronized (mLock) { - mVoiceInteractionSessionListeners.register(listener); - } - } - @Override public void sessionConnectionGone(VoiceInteractionSessionConnection connection) { - synchronized (mLock) { + synchronized (mServiceStub) { finishLocked(connection.mToken, false); } } @Override public void onSessionShown(VoiceInteractionSessionConnection connection) { - synchronized (mLock) { - final int size = mVoiceInteractionSessionListeners.beginBroadcast(); - for (int i = 0; i < size; ++i) { - final IVoiceInteractionSessionListener listener = - mVoiceInteractionSessionListeners.getBroadcastItem(i); - try { - listener.onVoiceSessionShown(); - } catch (RemoteException e) { - Slog.e(TAG, "Error delivering voice interaction open event.", e); - } - } - mVoiceInteractionSessionListeners.finishBroadcast(); - } + mServiceStub.onSessionShown(); } @Override public void onSessionHidden(VoiceInteractionSessionConnection connection) { - synchronized (mLock) { - final int size = mVoiceInteractionSessionListeners.beginBroadcast(); - for (int i = 0; i < size; ++i) { - final IVoiceInteractionSessionListener listener = - mVoiceInteractionSessionListeners.getBroadcastItem(i); - try { - listener.onVoiceSessionHidden(); - - } catch (RemoteException e) { - Slog.e(TAG, "Error delivering voice interaction closed event.", e); - } - } - mVoiceInteractionSessionListeners.finishBroadcast(); - } + mServiceStub.onSessionHidden(); } }