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

Commit e44acbc1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Init HotwordDetectionSrvc identity earlier" into sc-dev am: aa2c737e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15187288

Change-Id: I80c73f984508716df6471f105aa534c8df3232a2
parents c0ed9af2 aa2c737e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -200,6 +200,11 @@ public abstract class HotwordDetectionService extends Service {
                    HotwordDetectionService.this, manager, options);
        }

        @Override
        public void ping(IRemoteCallback callback) throws RemoteException {
            callback.sendResult(null);
        }

        @Override
        public void stopDetection() {
            HotwordDetectionService.this.onStopDetection();
+6 −0
Original line number Diff line number Diff line
@@ -57,5 +57,11 @@ oneway interface IHotwordDetectionService {
        in IContentCaptureManager contentCaptureManager,
        in ContentCaptureOptions options);

    /**
     * Simply requests the service to trigger the callback, so that the system can check its
     * identity.
     */
    void ping(in IRemoteCallback callback);

    void stopDetection();
}
+20 −10
Original line number Diff line number Diff line
@@ -164,15 +164,7 @@ final class HotwordDetectionConnection {
                public void sendResult(Bundle bundle) throws RemoteException {
                    if (DEBUG) {
                        Slog.d(TAG, "updateState finish");
                        Slog.d(TAG, "updating hotword UID " + Binder.getCallingUid());
                    }
                    // TODO: Do this earlier than this callback and have the provider point to the
                    // current state stored in VoiceInteractionManagerServiceImpl.
                    final int uid = Binder.getCallingUid();
                    LocalServices.getService(PermissionManagerServiceInternal.class)
                            .setHotwordDetectionServiceProvider(() -> uid);
                    mIdentity =
                            new HotwordDetectionServiceIdentity(uid, mVoiceInteractionServiceUid);
                    future.complete(null);
                    if (mUpdateStateAfterStartFinished.getAndSet(true)) {
                        Slog.w(TAG, "call callback after timeout");
@@ -695,6 +687,7 @@ final class HotwordDetectionConnection {

            updateAudioFlinger(connection);
            updateContentCaptureManager(connection);
            updateServiceIdentity(connection);
            return connection;
        }
    }
@@ -808,18 +801,35 @@ final class HotwordDetectionConnection {
        if (audioFlinger == null) {
            throw new IllegalStateException("Service media.audio_flinger wasn't found.");
        }
        connection.post(service -> service.updateAudioFlinger(audioFlinger));
        connection.run(service -> service.updateAudioFlinger(audioFlinger));
    }

    private static void updateContentCaptureManager(ServiceConnection connection) {
        IBinder b = ServiceManager
                .getService(Context.CONTENT_CAPTURE_MANAGER_SERVICE);
        IContentCaptureManager binderService = IContentCaptureManager.Stub.asInterface(b);
        connection.post(
        connection.run(
                service -> service.updateContentCaptureManager(binderService,
                        new ContentCaptureOptions(null)));
    }

    private void updateServiceIdentity(ServiceConnection connection) {
        connection.run(service -> service.ping(new IRemoteCallback.Stub() {
            @Override
            public void sendResult(Bundle bundle) throws RemoteException {
                if (DEBUG) {
                    Slog.d(TAG, "updating hotword UID " + Binder.getCallingUid());
                }
                // TODO: Have the provider point to the current state stored in
                // VoiceInteractionManagerServiceImpl.
                final int uid = Binder.getCallingUid();
                LocalServices.getService(PermissionManagerServiceInternal.class)
                        .setHotwordDetectionServiceProvider(() -> uid);
                mIdentity = new HotwordDetectionServiceIdentity(uid, mVoiceInteractionServiceUid);
            }
        }));
    }

    private static void bestEffortClose(Closeable closeable) {
        try {
            closeable.close();