Decoupling recognizer from assistant allows it to be provided by a
different package.
The recognizer is now set only on initializing the user or when
packages are modified.
There should be no change to how the assistant or interactor is set.
Bug: 167597525
Test: manual - set/unset assistant, reboot.
Test: atest CtsVoiceInteractionTestCases
Change-Id: I42bd1ab768070d444a1f6e3e78571cae8288a8ba
On package modification, set the recognizer independently of the
interactor.
This will allow keeping the default recognizer provider a different
package from the interactor.
There should be no change to how the interactor is set.
Bug: 167597525
Test: manual
Test: atest CtsVoiceInteractionTestCases
Change-Id: Ib24f077365cbb0850c61196c2825737db1c1c090
When initializing settings for a user, set the recognizer independently
of the interactor.
This will allow the default recognizer to be provided by a different
package from the interactor.
There should be no change to how the interactor is set.
Bug: 167597525
Test: manual
Test: atest CtsVoiceInteractionTestCases
Change-Id: I2da8f72c768b27df21534e265a3d1fb6919c7140
Since WindowContext won't add WindowToken from the client side,
addWindowTokenWithOption is no more needed. Also remove the logic
to invoke removeWindowToken from the client side.
Bug: 159767464
Bug: 153369119
Test: atest WindowManagerServiceTests WindowManagerPermissionTests
Change-Id: Ib0c948dca223cf8d056865ce3a0d4adaef07d247
Create the HotwordDetectionService to help to verify the audio data.
The VoiceInteractor app will implement the HotwordDetectionService
and create the validation algorithm to increase the hotword accuracy.
The HotwordDetectionService will be triggered by VoiceInteractor app
from the VoiceInteractionService after the VoiceInteractionService
is ready.
The VoiceInteractionManagerService will check if we need to bind the
HotwordDetectionService.
After receiving the audio data from the DSP, the
VoiceInteractionManagerService will pass the audio data to the
HotwordDetectionService, then the HotwordDetectionService will verify
the audio data and send the result back.
If the hotword is valid, then the VoiceInteractionManagerService will
inform the VoiceInteractionService. The VoiceInteractor app will show
the UI.
Local test:
1.Make sure the original hotword function to work well manually.
2.Add the additional test code and check the log to make sure the
basic flow of hotword detection service runs well manually.
Bug: 175738546
Test: Manually
Test: atest CtsVoiceInteractionTestCases
Change-Id: Idb662bab37bb9691da24c9c2910a2c3dafedcadd
Also reorders the conditional blocks for readability.
Currently, available interactors are queried and one of them is selected, then the
metadata for it is retrieved through the VoiceInteractionServiceInfo constructor.
With this change, both things are done in a single step. That might mean we retrieve some
unneeded data (the metadata for the packages that aren't selected), but optimizing it
isn't important since there's usually just one interactor.
Bug: 178410946
Test: atest CtsVoiceInteractionTestCases
Change-Id: I9a0d859f12d043f47f33a307609dbcf9de759e7e
MATCH_DEBUG_TRIAGED_MISSING is the deprecated equivalent to MATCH_DIRECT_BOOT_AUTO.
Not needed since we use MATCH_DIRECT_BOOT_AWARE and MATCH_DIRECT_BOOT_UNAWARE (see
comments on ag/1101955).
Bug: 178410946
Test: atest CtsVoiceInteractionTestCases
Change-Id: I2093b163bb18e43c4f868715d60bc4b637fced6c
It's never set to true and is only used for logging anyway.
Bug: 178410946
Test: atest CtsVoiceInteractionTestCases
Change-Id: Ie4370c2e9ddd305daad90f1393897e30a2dee8ac
New system API interface for both SoundTriggerManager and
AlwaysOnHotwordDetector to indicate if a recognition should run in
battery saver mode or not.
Clients supply this information through the existing startRecognition
calls, and the client must hold a new privledged permission,
SOUND_TRIGGER_RUN_IN_BATTERY_SAVER, to indicate this intention.
As a prerequisite, the device PowerManagerService must have the
SoundTrigger service enabled in the battery saver mode battery policy.
If not enabled, recognition will be paused as if the client did not
provide the indication to run in battery saver mode.
Bug: 172294448
Test: build with Google search apk using this feature and verify
recognition keeps running in battery saver mode
Change-Id: Ia43be99290e6fd7c50ff8e4908d6c60ea513b19a
Test: manual (currently requires hardcoding the assistant role due to b/175747251)
Test: atest CtsAssistTestCases CtsVoiceInteractionTestCases CtsVoiceSettingsTestCases
Bug: 167261484
Change-Id: Ibc2c1675f8b026f2915c3faf55e8ff3c52e1ee32
When we don't reset the state, if the service died while it was
disabled, future attempts to load models would fail.
Fixes: 171953855
Test: Verified basic sound trigger cases as well as recovery from
STHAL and audioserver crashes.
Change-Id: I32929123aa936cbee3101ec0ef65c52dd28b240b
DefaultPermissionGrantPolicy should be migrated to role in the future,
however it requires exposing a lot of APIs, including
set*PackagesProvider() and grantPermissionsTo*(), which would soon be
deprecated once we finish migration to role. On the other hand, the
benefits of making DefaultPermissionGrantPolicy updatable is
negligible. So we should keep DefaultPermissionGrantPolicy in the
platform.
Since we are making permission updatable, and package is a different
thing from permission, we are creating a new internal service call
LegacyPermissionManagerService to host it. We need this new internal
service instead of directly exposing DefaultPermissionGrantPolicy,
because there are system APIs on the framework PermissionManager class
that needs an AIDL interface, and a small amount of the AIDL methods
there are not DefaultPermissionGrantPolicy but still should remain in
platform. For now, the AIDL methods are delegated to
LegacyPermissionManagerInternal via PermissionManagerService, but
later we will create its own AIDL for LegacyPermissionManagerService
and make the AIDL calls directly, without involving
PermissionManagerService.
So we are exposing a new LegacyPermissionManagerInternal on
LocalServices, and replacing the usages of the previous
PermissionManagerServiceInternal.
LegacyPermissionManagerInternal is also made available in
PackageManagerService to facilitate calling
DefaultPermissionGrantPolicy grantDefaultPermissions().
The system browser permission granting is moved into the browser
role's behavior, to avoid exposing it to RoleManagerService.
Bug: 158736025
Test: presubmit
Change-Id: Ic78f7775eaf0b1d7b5b940ccb03f7afc38437ef4
SoundTrigger.listModules call was being passed to the SoundTrigger HAL
without SoundTriggerMiddleware checking permissions against the client.
Instead, client was checking permissions against the system service UID.
Bug: 171342256
Test: verify `dumpsys soundtrigger_middleware` logs listmodules as being
called by the SoundTrigger client session
Change-Id: Ic4bef05f59ef3d13ab0eed16017275070513ec84
Moving this class out of android.os will reportedly
greatly reduce ART overhead.
Test: compiles
Test: atest FrameworksServicesTests FrameworksCoreTests
Bug: 165817914
Exempt-From-Owner-Approval: no-op refactoring
Change-Id: I1f3e77120979e2f336e5f42e4ec6e459d6492083
SoundTrigger tracks client UID for every session. This CL fixes an issue
with client UID being saved twice causing the incorrect client UID to be
saved.
Bug: 171342256
Test: boot and verify hotword is functional
Change-Id: I68bba238293ed5a74f5a3677f21e5122cc444f82
This change adds tracking of SoundTriggerService client death
and frees up resources whenever that happens.
Test: Kill Now Playing process and observer recovery.
Bug: 171026874
Change-Id: Ie31d0a3ed392b1513b4e81ec3c344f4e79adcf52
When deleting an enrolled keyphrase sound model that is not actively
started, the model is never removed from the framework database, and an
incorrect value is returned.
Test: gts-tradefed run gts -m GtsAssistIntentTestCases \
-t com.google.android.assist.gts.KeyphraseModelManagerTest \
\#testUpdateAndRemoveKeyphraseSoundModel
Bug: 169628490
Change-Id: I469fe1fd05e386095ec646e1506fcb191b93c46f
This is a third CL in a chain that adjusts existing malformed code
to follow AndroidFrameworkBinderIdentity best-practices.
Specifically, if a thread clears an identity they need to restore it
to avoid obscure security vulnerabilities. In addition, the relevant
"try" block must start immediately after the identity is cleared to
ensure that its restored if/when any exceptions are thrown.
Bug: 155703208
Test: make
Exempt-From-Owner-Approval: trivial refactoring
Change-Id: I74cb958b68d55a647547aae21baff6ddc364859b
The recently added AndroidFrameworkBinderIdentity Error Prone checker
examines code to ensure that any cleared identities are restored to
avoid obscure security vulnerabilities.
This change is a purely mechanical refactoring that adds the "final"
keyword to the cleared identity to ensure that it's not accidentally
modified before eventually being cleared. Here's the exact command
used to generate this CL:
$ find . -name "*.java" -exec sed -Ei \
's/ (long \w+ = .+?clearCallingIdentity)/ final \1/' \
{} \;
Bug: 155703208
Test: make
Exempt-From-Owner-Approval: trivial refactoring
Change-Id: I832c9d70c3dfcd8d669cf71939d97837becc973a
This change associates an identity with every
VoiceInteractionManagerService session.
Change-Id: I6c87c2976a4409b8dda4480234d794db91cee374
Bug: 163865561
This changes associates identity information with every
SoundTrigerService session.
Change-Id: I30c9177f21203c8f3d03d4ff31523137497e760b
Bug: 163865561
Deprecate the way to attach to SoundTrigger that doesn't include
identity information. Plumb that up to the SoundTriggerService layer,
where it is temporarily provided in a backward-compatible way instead
of with the actual identity.
Change-Id: Icc2bf3b80300bd2b75c81d253986b4e1582737ca
Bug: 163865561
Make sure exceptions that can occur when creating the fake AudioRecord
instance in SoundTriggerService.createAudioRecordForEvent() are caught.
Bug: 161375011
Test: Manual sound trigger regression with OK Google and Now Playing
Squashed commit of:
a82281f6e71a6689766a
Change-Id: Ib973e22a5f1bd43facca1ed8c282fe444a739249
Merged-In: Ie367b9dda6f9e4f3079f5afe2ac92fc98cf8bced
UserController calls SystemServiceManager on some stages of the user
switch lifecycle, and SystemServiceManager calls the respective
callbacks in the SystemService objects it manage.
Prior to Android 11, these callbacks would take a @UserIdInt userid,
but now they take a TargetUser (which in turns contains a Userinfo).
So, currently, UserController calls SystemServiceManager passing the
userid, and SystemServiceManager gets the UserInfo from
UserManagerService. That works fine most of the time, but there might
be some race conditions when a user is removed that can crash the
system when such user is stopped (because UserManagerService doesn't
have its UserInfo anymore).
This CL fixes this issue by refactoring the user switch workflow so:
- TargetUser doesn't hold a reference to the UserInfo anymore, but
offer the methods needed by SystemService implementations.
- SystemServiceManager keeps track of the TargetUser objects used in
the callbacks.
Test: manual verification
Fixes: 159831354
Change-Id: If68ab1b5e247c7389c8cac16432d8b8809507e86
Follow up fix after commit a82281f6:
Let SoundTriggerService.createAudioRecordForEvent() throw exceptions
and let the caller act accordingly.
Bug: 161375011
Test: Manual sound trigger regression with OK Google and Now Playing
Change-Id: I9a3c9085a15248a87f76b682a21d785ac73c9d11
A variable that (correctly) refers to a userId was
misnamed uid. Note that the function does return
a userId, and that the DBManager to which this
variable is passed requests a userHandle (which
is a synonym for userId). So it appears to have
just been a simple nisnaming of the variable.
Bug: 163626967
Test: compiles
Change-Id: I78b42ee3c3b79bb9a4a23219e9243201d0c0d440
This is just a plain refactoring: the removed methods in the changed
classes were called by default by the new methods in the superclass
(SystemService).
Test: m
Test: atest NotificationManagerServiceTest BackupManagerServiceRoboTest
Fixes: 161943081
Exempt-From-Owner-Approval: refactoring without side-effects
Change-Id: Ifd8df592eb4494cc0922b7e0b2ff20187b8a8b3e
When `properties` is null, this propagates a NullPointerException back
to the caller instead of cleanly reporting null like it's supposed to.
Issue introduced in Iec7ba6fc59912f44341fbe8d7f99193b9ead52f0 from the
start of this function and is fixed by just printing `object` instead
of `object.toString()`.
Test: atest AssistIntentConditionalTest
Bug: 158682298
Change-Id: Ic64f6fba65895e9facc9994f5d1a353081ab3253
(cherry picked from commit 935906e180)
When `properties` is null, this propagates a NullPointerException back
to the caller instead of cleanly reporting null like it's supposed to.
Issue introduced in Iec7ba6fc59912f44341fbe8d7f99193b9ead52f0 from the
start of this function and is fixed by just printing `object` instead
of `object.toString()`.
Test: atest AssistIntentConditionalTest
Bug: 158682298
Change-Id: Ic64f6fba65895e9facc9994f5d1a353081ab3253
Make sure exceptions that can occur when creating the fake AudioRecord
instance in SoundTriggerService.createAudioRecordForEvent() are caught.
Bug: 161375011
Test: Manual sound trigger regression with OK Google and Now Playing
Change-Id: Ie367b9dda6f9e4f3079f5afe2ac92fc98cf8bced
It will be used by Automotive when the display is off.
Test: adb shell cmd voiceinteraction disable true && \
adb shell cmd voiceinteraction show
Test: atest CtsVoiceInteractionTestCases CtsAssistTestCases
Bug: 154011437
Change-Id: Ia87b0544b242c356c4f9180e250e2df54279803f
deleteSoundModel is calling into the SoundTriggerModdleware when safe
mode is enabled. Middleware should not be called in this case.
Bug: 152354427
Test: atest SoundTriggerServiceTest#testServiceDisabledInSafeMode
Change-Id: I1fa13fd32a384b59928a5deb9505dc4a1e757efa
The app which gets bound to use microphone in the background should be
holding the CAPTURE_AUDIO_HOTWORD permission.
Test: Verify current services still work
Verify that app without permission can't be registered
Bug: 155438570
Change-Id: I4b53c45bc74df4e91026e13c7e2bfa0f5461df52
Fix 3 issues in SoundTriggerHelper when a call is active:
1) Do not actually load a sound model when recognition start is requested
but disabled because of and active call or any other reason. Previously
we were loading the sound model even if actual start was deferred until
enabled.
2) Allow to start recognition while disabled: the recognition start
request is stored as pending and will be executed when enabled again.
3) Process call state change with enough delay when call ends to allow
time for the HAL to process the call disconnect notification before re
enabling pending recognitions.
Also remove assumption on valid model handle values.
Test: repro steps in b/152723355
Bug: 152723355
Change-Id: Id46ae8c285426ed2ace8a6d80478fecb98f4ec33