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

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

Change-Id: I80c73f984508716df6471f105aa534c8df3232a2
This commit is contained in:
TreeHugger Robot
2021-07-03 04:57:21 +00:00
committed by Automerger Merge Worker
3 changed files with 31 additions and 10 deletions

View File

@@ -200,6 +200,11 @@ public abstract class HotwordDetectionService extends Service {
HotwordDetectionService.this, manager, options); HotwordDetectionService.this, manager, options);
} }
@Override
public void ping(IRemoteCallback callback) throws RemoteException {
callback.sendResult(null);
}
@Override @Override
public void stopDetection() { public void stopDetection() {
HotwordDetectionService.this.onStopDetection(); HotwordDetectionService.this.onStopDetection();

View File

@@ -57,5 +57,11 @@ oneway interface IHotwordDetectionService {
in IContentCaptureManager contentCaptureManager, in IContentCaptureManager contentCaptureManager,
in ContentCaptureOptions options); 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(); void stopDetection();
} }

View File

@@ -164,15 +164,7 @@ final class HotwordDetectionConnection {
public void sendResult(Bundle bundle) throws RemoteException { public void sendResult(Bundle bundle) throws RemoteException {
if (DEBUG) { if (DEBUG) {
Slog.d(TAG, "updateState finish"); 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); future.complete(null);
if (mUpdateStateAfterStartFinished.getAndSet(true)) { if (mUpdateStateAfterStartFinished.getAndSet(true)) {
Slog.w(TAG, "call callback after timeout"); Slog.w(TAG, "call callback after timeout");
@@ -695,6 +687,7 @@ final class HotwordDetectionConnection {
updateAudioFlinger(connection); updateAudioFlinger(connection);
updateContentCaptureManager(connection); updateContentCaptureManager(connection);
updateServiceIdentity(connection);
return connection; return connection;
} }
} }
@@ -808,18 +801,35 @@ final class HotwordDetectionConnection {
if (audioFlinger == null) { if (audioFlinger == null) {
throw new IllegalStateException("Service media.audio_flinger wasn't found."); 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) { private static void updateContentCaptureManager(ServiceConnection connection) {
IBinder b = ServiceManager IBinder b = ServiceManager
.getService(Context.CONTENT_CAPTURE_MANAGER_SERVICE); .getService(Context.CONTENT_CAPTURE_MANAGER_SERVICE);
IContentCaptureManager binderService = IContentCaptureManager.Stub.asInterface(b); IContentCaptureManager binderService = IContentCaptureManager.Stub.asInterface(b);
connection.post( connection.run(
service -> service.updateContentCaptureManager(binderService, service -> service.updateContentCaptureManager(binderService,
new ContentCaptureOptions(null))); 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) { private static void bestEffortClose(Closeable closeable) {
try { try {
closeable.close(); closeable.close();