Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6155d1cc authored by Atneya Nair's avatar Atneya Nair Committed by Automerger Merge Worker
Browse files

Merge "Ensure ST attach propagates exceptions" into udc-dev am: 723b8975

parents 988f1d73 723b8975
Loading
Loading
Loading
Loading
+21 −15
Original line number Diff line number Diff line
@@ -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
+7 −1
Original line number Diff line number Diff line
@@ -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;
                }
            }
        }
    }
+11 −8
Original line number Diff line number Diff line
@@ -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;
@@ -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");
@@ -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());
@@ -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)
                );