Loading services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java +51 −34 Original line number Diff line number Diff line Loading @@ -268,7 +268,8 @@ final class HotwordDetectionConnection { synchronized (mLock) { restartProcessLocked(); HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType, HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE); HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE, mVoiceInteractionServiceUid); } }, mReStartPeriodSeconds, mReStartPeriodSeconds, TimeUnit.SECONDS); } Loading Loading @@ -303,7 +304,8 @@ final class HotwordDetectionConnection { // conditions with audio reading in the service. restartProcessLocked(); HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType, HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED); HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED, mVoiceInteractionServiceUid); } } Loading Loading @@ -334,13 +336,14 @@ final class HotwordDetectionConnection { try { mCallback.onStatusReported(status); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, initResultMetricsResult); initResultMetricsResult, mVoiceInteractionServiceUid); } catch (RemoteException e) { // TODO: Add a new atom for RemoteException case, the error doesn't very // correct here Slog.w(TAG, "Failed to report initialization status: " + e); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_CALLBACK_STATE_ERROR); METRICS_INIT_CALLBACK_STATE_ERROR, mVoiceInteractionServiceUid); } } }; Loading @@ -363,11 +366,12 @@ final class HotwordDetectionConnection { try { mCallback.onStatusReported(INITIALIZATION_STATUS_UNKNOWN); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_UNKNOWN_TIMEOUT); METRICS_INIT_UNKNOWN_TIMEOUT, mVoiceInteractionServiceUid); } catch (RemoteException e) { Slog.w(TAG, "Failed to report initialization status UNKNOWN", e); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_CALLBACK_STATE_ERROR); METRICS_INIT_CALLBACK_STATE_ERROR, mVoiceInteractionServiceUid); } } else if (err != null) { Slog.w(TAG, "Failed to update state: " + err); Loading Loading @@ -470,12 +474,14 @@ final class HotwordDetectionConnection { synchronized (mLock) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED, mVoiceInteractionServiceUid); if (!mPerformingSoftwareHotwordDetection) { Slog.i(TAG, "Hotword detection has already completed"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mPerformingSoftwareHotwordDetection = false; Loading @@ -484,7 +490,8 @@ final class HotwordDetectionConnection { } catch (SecurityException e) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION); METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION, mVoiceInteractionServiceUid); mSoftwareCallback.onError(); return; } Loading Loading @@ -513,7 +520,8 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED, mVoiceInteractionServiceUid); // onRejected isn't allowed here, and we are not expecting it. } }; Loading Loading @@ -661,12 +669,14 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED, mVoiceInteractionServiceUid); if (!mValidatingDspTrigger) { Slog.i(TAG, "Ignoring #onDetected due to a process restart"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mValidatingDspTrigger = false; Loading @@ -676,7 +686,8 @@ final class HotwordDetectionConnection { Slog.i(TAG, "Ignoring #onDetected due to a SecurityException", e); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION); METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION, mVoiceInteractionServiceUid); externalCallback.onError(CALLBACK_ONDETECTED_GOT_SECURITY_EXCEPTION); return; } Loading Loading @@ -709,12 +720,14 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED, mVoiceInteractionServiceUid); if (!mValidatingDspTrigger) { Slog.i(TAG, "Ignoring #onRejected due to a process restart"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mValidatingDspTrigger = false; Loading @@ -728,13 +741,12 @@ final class HotwordDetectionConnection { synchronized (mLock) { mValidatingDspTrigger = true; mRemoteHotwordDetectionService.run( service -> { mRemoteHotwordDetectionService.run(service -> { // TODO: avoid allocate every time mCancellationKeyPhraseDetectionFuture = mScheduledExecutorService.schedule( () -> HotwordMetricsLogger .writeKeyphraseTriggerEvent(mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT), () -> HotwordMetricsLogger.writeKeyphraseTriggerEvent(mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT, mVoiceInteractionServiceUid), VALIDATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); service.detectFromDspSource( Loading Loading @@ -790,7 +802,8 @@ final class HotwordDetectionConnection { mCallback.onRejected(new HotwordRejectedResult.Builder().build()); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART, mVoiceInteractionServiceUid); } catch (RemoteException e) { Slog.w(TAG, "Failed to call #rejected"); } Loading Loading @@ -836,11 +849,13 @@ final class HotwordDetectionConnection { private SoundTrigger.KeyphraseRecognitionEvent mRecognitionEvent; private final HotwordDetectionConnection mHotwordDetectionConnection; private final IHotwordRecognitionStatusCallback mExternalCallback; private final int mVoiceInteractionServiceUid; SoundTriggerCallback(IHotwordRecognitionStatusCallback callback, HotwordDetectionConnection connection) { HotwordDetectionConnection connection, int uid) { mHotwordDetectionConnection = connection; mExternalCallback = callback; mVoiceInteractionServiceUid = uid; } @Override Loading @@ -853,14 +868,16 @@ final class HotwordDetectionConnection { if (useHotwordDetectionService) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__TRUSTED_DETECTOR_DSP, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER, mVoiceInteractionServiceUid); mRecognitionEvent = recognitionEvent; mHotwordDetectionConnection.detectFromDspSource( recognitionEvent, mExternalCallback); } else { HotwordMetricsLogger.writeKeyphraseTriggerEvent( HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__NORMAL_DETECTOR, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER, mVoiceInteractionServiceUid); mExternalCallback.onKeyphraseDetected(recognitionEvent, null); } } Loading services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordMetricsLogger.java +6 −6 Original line number Diff line number Diff line Loading @@ -64,28 +64,28 @@ public final class HotwordMetricsLogger { /** * Logs information related to hotword detection service init result. */ public static void writeServiceInitResultEvent(int detectorType, int result) { public static void writeServiceInitResultEvent(int detectorType, int result, int uid) { int metricsDetectorType = getInitMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_INIT_RESULT_REPORTED, metricsDetectorType, result); metricsDetectorType, result, uid); } /** * Logs information related to hotword detection service restarting. */ public static void writeServiceRestartEvent(int detectorType, int reason) { public static void writeServiceRestartEvent(int detectorType, int reason, int uid) { int metricsDetectorType = getRestartMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_RESTARTED, metricsDetectorType, reason); metricsDetectorType, reason, uid); } /** * Logs information related to keyphrase trigger. */ public static void writeKeyphraseTriggerEvent(int detectorType, int result) { public static void writeKeyphraseTriggerEvent(int detectorType, int result, int uid) { int metricsDetectorType = getKeyphraseMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED, metricsDetectorType, result); metricsDetectorType, result, uid); } /** Loading services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -711,7 +711,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne Slog.d(TAG, "createSoundTriggerCallbackLocked"); } return new HotwordDetectionConnection.SoundTriggerCallback(callback, mHotwordDetectionConnection); mHotwordDetectionConnection, mInfo.getServiceInfo().applicationInfo.uid); } private static ServiceInfo getServiceInfoLocked(@NonNull ComponentName componentName, Loading Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordDetectionConnection.java +51 −34 Original line number Diff line number Diff line Loading @@ -268,7 +268,8 @@ final class HotwordDetectionConnection { synchronized (mLock) { restartProcessLocked(); HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType, HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE); HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE, mVoiceInteractionServiceUid); } }, mReStartPeriodSeconds, mReStartPeriodSeconds, TimeUnit.SECONDS); } Loading Loading @@ -303,7 +304,8 @@ final class HotwordDetectionConnection { // conditions with audio reading in the service. restartProcessLocked(); HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType, HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED); HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED, mVoiceInteractionServiceUid); } } Loading Loading @@ -334,13 +336,14 @@ final class HotwordDetectionConnection { try { mCallback.onStatusReported(status); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, initResultMetricsResult); initResultMetricsResult, mVoiceInteractionServiceUid); } catch (RemoteException e) { // TODO: Add a new atom for RemoteException case, the error doesn't very // correct here Slog.w(TAG, "Failed to report initialization status: " + e); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_CALLBACK_STATE_ERROR); METRICS_INIT_CALLBACK_STATE_ERROR, mVoiceInteractionServiceUid); } } }; Loading @@ -363,11 +366,12 @@ final class HotwordDetectionConnection { try { mCallback.onStatusReported(INITIALIZATION_STATUS_UNKNOWN); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_UNKNOWN_TIMEOUT); METRICS_INIT_UNKNOWN_TIMEOUT, mVoiceInteractionServiceUid); } catch (RemoteException e) { Slog.w(TAG, "Failed to report initialization status UNKNOWN", e); HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType, METRICS_INIT_CALLBACK_STATE_ERROR); METRICS_INIT_CALLBACK_STATE_ERROR, mVoiceInteractionServiceUid); } } else if (err != null) { Slog.w(TAG, "Failed to update state: " + err); Loading Loading @@ -470,12 +474,14 @@ final class HotwordDetectionConnection { synchronized (mLock) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED, mVoiceInteractionServiceUid); if (!mPerformingSoftwareHotwordDetection) { Slog.i(TAG, "Hotword detection has already completed"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mPerformingSoftwareHotwordDetection = false; Loading @@ -484,7 +490,8 @@ final class HotwordDetectionConnection { } catch (SecurityException e) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION); METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION, mVoiceInteractionServiceUid); mSoftwareCallback.onError(); return; } Loading Loading @@ -513,7 +520,8 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED, mVoiceInteractionServiceUid); // onRejected isn't allowed here, and we are not expecting it. } }; Loading Loading @@ -661,12 +669,14 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED, mVoiceInteractionServiceUid); if (!mValidatingDspTrigger) { Slog.i(TAG, "Ignoring #onDetected due to a process restart"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mValidatingDspTrigger = false; Loading @@ -676,7 +686,8 @@ final class HotwordDetectionConnection { Slog.i(TAG, "Ignoring #onDetected due to a SecurityException", e); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION); METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION, mVoiceInteractionServiceUid); externalCallback.onError(CALLBACK_ONDETECTED_GOT_SECURITY_EXCEPTION); return; } Loading Loading @@ -709,12 +720,14 @@ final class HotwordDetectionConnection { } HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED, mVoiceInteractionServiceUid); if (!mValidatingDspTrigger) { Slog.i(TAG, "Ignoring #onRejected due to a process restart"); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK); METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK, mVoiceInteractionServiceUid); return; } mValidatingDspTrigger = false; Loading @@ -728,13 +741,12 @@ final class HotwordDetectionConnection { synchronized (mLock) { mValidatingDspTrigger = true; mRemoteHotwordDetectionService.run( service -> { mRemoteHotwordDetectionService.run(service -> { // TODO: avoid allocate every time mCancellationKeyPhraseDetectionFuture = mScheduledExecutorService.schedule( () -> HotwordMetricsLogger .writeKeyphraseTriggerEvent(mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT), () -> HotwordMetricsLogger.writeKeyphraseTriggerEvent(mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT, mVoiceInteractionServiceUid), VALIDATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); service.detectFromDspSource( Loading Loading @@ -790,7 +802,8 @@ final class HotwordDetectionConnection { mCallback.onRejected(new HotwordRejectedResult.Builder().build()); HotwordMetricsLogger.writeKeyphraseTriggerEvent( mDetectorType, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART, mVoiceInteractionServiceUid); } catch (RemoteException e) { Slog.w(TAG, "Failed to call #rejected"); } Loading Loading @@ -836,11 +849,13 @@ final class HotwordDetectionConnection { private SoundTrigger.KeyphraseRecognitionEvent mRecognitionEvent; private final HotwordDetectionConnection mHotwordDetectionConnection; private final IHotwordRecognitionStatusCallback mExternalCallback; private final int mVoiceInteractionServiceUid; SoundTriggerCallback(IHotwordRecognitionStatusCallback callback, HotwordDetectionConnection connection) { HotwordDetectionConnection connection, int uid) { mHotwordDetectionConnection = connection; mExternalCallback = callback; mVoiceInteractionServiceUid = uid; } @Override Loading @@ -853,14 +868,16 @@ final class HotwordDetectionConnection { if (useHotwordDetectionService) { HotwordMetricsLogger.writeKeyphraseTriggerEvent( HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__TRUSTED_DETECTOR_DSP, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER, mVoiceInteractionServiceUid); mRecognitionEvent = recognitionEvent; mHotwordDetectionConnection.detectFromDspSource( recognitionEvent, mExternalCallback); } else { HotwordMetricsLogger.writeKeyphraseTriggerEvent( HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__NORMAL_DETECTOR, HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER); HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER, mVoiceInteractionServiceUid); mExternalCallback.onKeyphraseDetected(recognitionEvent, null); } } Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/HotwordMetricsLogger.java +6 −6 Original line number Diff line number Diff line Loading @@ -64,28 +64,28 @@ public final class HotwordMetricsLogger { /** * Logs information related to hotword detection service init result. */ public static void writeServiceInitResultEvent(int detectorType, int result) { public static void writeServiceInitResultEvent(int detectorType, int result, int uid) { int metricsDetectorType = getInitMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_INIT_RESULT_REPORTED, metricsDetectorType, result); metricsDetectorType, result, uid); } /** * Logs information related to hotword detection service restarting. */ public static void writeServiceRestartEvent(int detectorType, int reason) { public static void writeServiceRestartEvent(int detectorType, int reason, int uid) { int metricsDetectorType = getRestartMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_RESTARTED, metricsDetectorType, reason); metricsDetectorType, reason, uid); } /** * Logs information related to keyphrase trigger. */ public static void writeKeyphraseTriggerEvent(int detectorType, int result) { public static void writeKeyphraseTriggerEvent(int detectorType, int result, int uid) { int metricsDetectorType = getKeyphraseMetricsDetectorType(detectorType); FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED, metricsDetectorType, result); metricsDetectorType, result, uid); } /** Loading
services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -711,7 +711,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne Slog.d(TAG, "createSoundTriggerCallbackLocked"); } return new HotwordDetectionConnection.SoundTriggerCallback(callback, mHotwordDetectionConnection); mHotwordDetectionConnection, mInfo.getServiceInfo().applicationInfo.uid); } private static ServiceInfo getServiceInfoLocked(@NonNull ComponentName componentName, Loading