Loading core/java/android/hardware/soundtrigger/SoundTriggerModule.java +21 −15 Original line number Diff line number Diff line Loading @@ -61,36 +61,42 @@ public class SoundTriggerModule { * This variant is intended for use when the caller is acting an originator, rather than on * behalf of a different entity, as far as authorization goes. */ SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper, @NonNull Identity originatorIdentity) throws RemoteException { @NonNull Identity originatorIdentity) { mId = moduleId; mEventHandlerDelegate = new EventHandlerDelegate(listener, looper); try { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { mService = service.attachAsOriginator(moduleId, originatorIdentity, mEventHandlerDelegate); } mService.asBinder().linkToDeath(mEventHandlerDelegate, 0); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * This variant is intended for use when the caller is acting as a middleman, i.e. on behalf of * a different entity, as far as authorization goes. */ SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper, @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) throws RemoteException { @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) { mId = moduleId; mEventHandlerDelegate = new EventHandlerDelegate(listener, looper); try { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { mService = service.attachAsMiddleman(moduleId, middlemanIdentity, originatorIdentity, mService = service.attachAsMiddleman(moduleId, middlemanIdentity, originatorIdentity, mEventHandlerDelegate); } mService.asBinder().linkToDeath(mEventHandlerDelegate, 0); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @Override Loading services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java +7 −1 Original line number Diff line number Diff line Loading @@ -1043,7 +1043,13 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { internalClearGlobalStateLocked(); if (mModule != null) { mModule.detach(); try { // This is best effort // TODO (b/279507851) mModule = mModuleProvider.apply(this); } catch (Exception e) { mModule = null; } } } } Loading services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +11 −8 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.hardware.soundtrigger.SoundTrigger.ModelParamRange; import android.hardware.soundtrigger.SoundTrigger.ModuleProperties; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; import android.hardware.soundtrigger.SoundTrigger.SoundModel; import android.hardware.soundtrigger.SoundTriggerModule; import android.media.AudioAttributes; import android.media.AudioFormat; import android.media.AudioRecord; Loading Loading @@ -134,6 +135,8 @@ public class SoundTriggerService extends SystemService { private Object mLock; private final SoundTriggerServiceStub mServiceStub; private final LocalSoundTriggerService mLocalSoundTriggerService; private ISoundTriggerMiddlewareService mMiddlewareService; private SoundTriggerDbHelper mDbHelper; private final EventLogger mServiceEventLogger = new EventLogger(256, "Service"); Loading Loading @@ -241,17 +244,18 @@ public class SoundTriggerService extends SystemService { if (PHASE_THIRD_PARTY_APPS_CAN_START == phase) { mDbHelper = new SoundTriggerDbHelper(mContext); } mMiddlewareService = ISoundTriggerMiddlewareService.Stub.asInterface( ServiceManager.waitForService(Context.SOUND_TRIGGER_MIDDLEWARE_SERVICE)); } // Must be called with cleared binder context. private static List<ModuleProperties> listUnderlyingModuleProperties( private List<ModuleProperties> listUnderlyingModuleProperties( Identity originatorIdentity) { Identity middlemanIdentity = new Identity(); middlemanIdentity.packageName = ActivityThread.currentOpPackageName(); var service = ISoundTriggerMiddlewareService.Stub.asInterface( ServiceManager.waitForService(Context.SOUND_TRIGGER_MIDDLEWARE_SERVICE)); try { return Arrays.stream(service.listModulesAsMiddleman(middlemanIdentity, return Arrays.stream(mMiddlewareService.listModulesAsMiddleman(middlemanIdentity, originatorIdentity)) .map(desc -> ConversionUtil.aidl2apiModuleDescriptor(desc)) .collect(Collectors.toList()); Loading Loading @@ -282,10 +286,9 @@ public class SoundTriggerService extends SystemService { return new SoundTriggerHelper( mContext, eventLogger, (SoundTrigger.StatusListener statusListener) -> SoundTrigger.attachModuleAsMiddleman( moduleId, statusListener, null /* handler */, middlemanIdentity, originatorIdentity), (SoundTrigger.StatusListener statusListener) -> new SoundTriggerModule( mMiddlewareService, moduleId, statusListener, Looper.getMainLooper(), middlemanIdentity, originatorIdentity), moduleId, () -> listUnderlyingModuleProperties(originatorIdentity) ); Loading Loading
core/java/android/hardware/soundtrigger/SoundTriggerModule.java +21 −15 Original line number Diff line number Diff line Loading @@ -61,36 +61,42 @@ public class SoundTriggerModule { * This variant is intended for use when the caller is acting an originator, rather than on * behalf of a different entity, as far as authorization goes. */ SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper, @NonNull Identity originatorIdentity) throws RemoteException { @NonNull Identity originatorIdentity) { mId = moduleId; mEventHandlerDelegate = new EventHandlerDelegate(listener, looper); try { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { mService = service.attachAsOriginator(moduleId, originatorIdentity, mEventHandlerDelegate); } mService.asBinder().linkToDeath(mEventHandlerDelegate, 0); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * This variant is intended for use when the caller is acting as a middleman, i.e. on behalf of * a different entity, as far as authorization goes. */ SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, public SoundTriggerModule(@NonNull ISoundTriggerMiddlewareService service, int moduleId, @NonNull SoundTrigger.StatusListener listener, @NonNull Looper looper, @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) throws RemoteException { @NonNull Identity middlemanIdentity, @NonNull Identity originatorIdentity) { mId = moduleId; mEventHandlerDelegate = new EventHandlerDelegate(listener, looper); try { try (SafeCloseable ignored = ClearCallingIdentityContext.create()) { mService = service.attachAsMiddleman(moduleId, middlemanIdentity, originatorIdentity, mService = service.attachAsMiddleman(moduleId, middlemanIdentity, originatorIdentity, mEventHandlerDelegate); } mService.asBinder().linkToDeath(mEventHandlerDelegate, 0); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } @Override Loading
services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java +7 −1 Original line number Diff line number Diff line Loading @@ -1043,7 +1043,13 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { internalClearGlobalStateLocked(); if (mModule != null) { mModule.detach(); try { // This is best effort // TODO (b/279507851) mModule = mModuleProvider.apply(this); } catch (Exception e) { mModule = null; } } } } Loading
services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +11 −8 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.hardware.soundtrigger.SoundTrigger.ModelParamRange; import android.hardware.soundtrigger.SoundTrigger.ModuleProperties; import android.hardware.soundtrigger.SoundTrigger.RecognitionConfig; import android.hardware.soundtrigger.SoundTrigger.SoundModel; import android.hardware.soundtrigger.SoundTriggerModule; import android.media.AudioAttributes; import android.media.AudioFormat; import android.media.AudioRecord; Loading Loading @@ -134,6 +135,8 @@ public class SoundTriggerService extends SystemService { private Object mLock; private final SoundTriggerServiceStub mServiceStub; private final LocalSoundTriggerService mLocalSoundTriggerService; private ISoundTriggerMiddlewareService mMiddlewareService; private SoundTriggerDbHelper mDbHelper; private final EventLogger mServiceEventLogger = new EventLogger(256, "Service"); Loading Loading @@ -241,17 +244,18 @@ public class SoundTriggerService extends SystemService { if (PHASE_THIRD_PARTY_APPS_CAN_START == phase) { mDbHelper = new SoundTriggerDbHelper(mContext); } mMiddlewareService = ISoundTriggerMiddlewareService.Stub.asInterface( ServiceManager.waitForService(Context.SOUND_TRIGGER_MIDDLEWARE_SERVICE)); } // Must be called with cleared binder context. private static List<ModuleProperties> listUnderlyingModuleProperties( private List<ModuleProperties> listUnderlyingModuleProperties( Identity originatorIdentity) { Identity middlemanIdentity = new Identity(); middlemanIdentity.packageName = ActivityThread.currentOpPackageName(); var service = ISoundTriggerMiddlewareService.Stub.asInterface( ServiceManager.waitForService(Context.SOUND_TRIGGER_MIDDLEWARE_SERVICE)); try { return Arrays.stream(service.listModulesAsMiddleman(middlemanIdentity, return Arrays.stream(mMiddlewareService.listModulesAsMiddleman(middlemanIdentity, originatorIdentity)) .map(desc -> ConversionUtil.aidl2apiModuleDescriptor(desc)) .collect(Collectors.toList()); Loading Loading @@ -282,10 +286,9 @@ public class SoundTriggerService extends SystemService { return new SoundTriggerHelper( mContext, eventLogger, (SoundTrigger.StatusListener statusListener) -> SoundTrigger.attachModuleAsMiddleman( moduleId, statusListener, null /* handler */, middlemanIdentity, originatorIdentity), (SoundTrigger.StatusListener statusListener) -> new SoundTriggerModule( mMiddlewareService, moduleId, statusListener, Looper.getMainLooper(), middlemanIdentity, originatorIdentity), moduleId, () -> listUnderlyingModuleProperties(originatorIdentity) ); Loading