Merge "Added logic to reset assistant UIDs on audio crash" into tm-dev am: cb7a1fe954
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17078332 Change-Id: I466c8a8a252036fa625d2fc6973fc1530068335b
This commit is contained in:
@@ -8402,6 +8402,12 @@ public class AudioManager {
|
||||
* {@link #addAssistantServicesUids(int[])} and not yet removed with
|
||||
* {@link #removeAssistantServicesUids(int[])}
|
||||
*
|
||||
* <p> Note that during native audioserver crash and after boot up the list of assistant
|
||||
* UIDs will be reset to an empty list (i.e. no UID will be considered as assistant)
|
||||
* Just after user switch, the list of assistant will also reset to empty.
|
||||
* In both cases,The component's UID of the assistiant role or assistant setting will be
|
||||
* automitically added to the list by the audio service.
|
||||
*
|
||||
* @return array of assistants UIDs
|
||||
*
|
||||
* @hide
|
||||
|
||||
@@ -1368,14 +1368,18 @@ public class AudioService extends IAudioService.Stub
|
||||
mRm = (RoleManager) mContext.getSystemService(Context.ROLE_SERVICE);
|
||||
if (mRm != null) {
|
||||
mRm.addOnRoleHoldersChangedListenerAsUser(mExecutor, this, UserHandle.ALL);
|
||||
updateAssistantUId(true);
|
||||
synchronized (mSettingsLock) {
|
||||
updateAssistantUIdLocked(/* forceUpdate= */ true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRoleHoldersChanged(@NonNull String roleName, @NonNull UserHandle user) {
|
||||
if (RoleManager.ROLE_ASSISTANT.equals(roleName)) {
|
||||
updateAssistantUId(false);
|
||||
synchronized (mSettingsLock) {
|
||||
updateAssistantUIdLocked(/* forceUpdate= */ false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1474,7 +1478,7 @@ public class AudioService extends IAudioService.Stub
|
||||
sendEncodedSurroundMode(mContentResolver, "onAudioServerDied");
|
||||
sendEnabledSurroundFormats(mContentResolver, true);
|
||||
AudioSystem.setRttEnabled(mRttEnabled);
|
||||
updateAssistantServicesUidsLocked();
|
||||
resetAssistantServicesUidsLocked();
|
||||
}
|
||||
|
||||
synchronized (mAccessibilityServiceUidsLock) {
|
||||
@@ -1602,6 +1606,12 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
}
|
||||
|
||||
@GuardedBy("mSettingsLock")
|
||||
private void resetAssistantServicesUidsLocked() {
|
||||
mAssistantUids.clear();
|
||||
updateAssistantUIdLocked(/* forceUpdate= */ true);
|
||||
}
|
||||
|
||||
@GuardedBy("mSettingsLock")
|
||||
private void updateAssistantServicesUidsLocked() {
|
||||
int[] assistantUids = mAssistantUids.stream().mapToInt(Integer::intValue).toArray();
|
||||
@@ -2386,7 +2396,7 @@ public class AudioService extends IAudioService.Stub
|
||||
}
|
||||
|
||||
@GuardedBy("mSettingsLock")
|
||||
private void updateAssistantUId(boolean forceUpdate) {
|
||||
private void updateAssistantUIdLocked(boolean forceUpdate) {
|
||||
int assistantUid = INVALID_UID;
|
||||
// Consider assistants in the following order of priority:
|
||||
// 1) apk in assistant role
|
||||
@@ -2484,7 +2494,7 @@ public class AudioService extends IAudioService.Stub
|
||||
readDockAudioSettings(cr);
|
||||
sendEncodedSurroundMode(cr, "readPersistedSettings");
|
||||
sendEnabledSurroundFormats(cr, true);
|
||||
updateAssistantUId(true);
|
||||
updateAssistantUIdLocked(/* forceUpdate= */ true);
|
||||
resetActiveAssistantUidsLocked();
|
||||
AudioSystem.setRttEnabled(mRttEnabled);
|
||||
}
|
||||
@@ -8317,7 +8327,7 @@ public class AudioService extends IAudioService.Stub
|
||||
updateMasterBalance(mContentResolver);
|
||||
updateEncodedSurroundOutput();
|
||||
sendEnabledSurroundFormats(mContentResolver, mSurroundModeChanged);
|
||||
updateAssistantUId(false);
|
||||
updateAssistantUIdLocked(/* forceUpdate= */ false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -679,6 +679,7 @@ final class HotwordDetectionConnection {
|
||||
private void restartProcessLocked() {
|
||||
Slog.v(TAG, "Restarting hotword detection process");
|
||||
ServiceConnection oldConnection = mRemoteHotwordDetectionService;
|
||||
HotwordDetectionServiceIdentity previousIdentity = mIdentity;
|
||||
|
||||
// TODO(volnov): this can be done after connect() has been successful.
|
||||
if (mValidatingDspTrigger) {
|
||||
@@ -722,6 +723,9 @@ final class HotwordDetectionConnection {
|
||||
}
|
||||
oldConnection.ignoreConnectionStatusEvents();
|
||||
oldConnection.unbind();
|
||||
if (previousIdentity != null) {
|
||||
removeServiceUidForAudioPolicy(previousIdentity.getIsolatedUid());
|
||||
}
|
||||
}
|
||||
|
||||
static final class SoundTriggerCallback extends IRecognitionStatusCallback.Stub {
|
||||
|
||||
Reference in New Issue
Block a user