Commit Graph

323 Commits

Author SHA1 Message Date
Ahaan Ugale
1537ad4281 VIMS: Don't set recognizer when assistant changes.
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
2021-02-20 04:30:22 +00:00
Ahaan Ugale
de203c37c3 VIMS: Decouple recognizer init from interactor in PackageMonitor.
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
2021-02-20 02:49:18 +00:00
Ahaan Ugale
50cabe923d VIMS: Decouple recognizer from interactor in initForUser().
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
2021-02-20 02:49:01 +00:00
TreeHugger Robot
f3421c57d4 Merge "VIMS: Helper method for InteractionService query." into sc-dev 2021-02-10 01:20:26 +00:00
Charles Chen
b80fdde45f Remove addWindowTokenWithOptions
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
2021-02-06 15:47:08 +08:00
lpeter
fd652d522c Get the HotwordDetectionService from the xml metadata
Bug: 178171920
Test: atest CtsVoiceInteractionTestCases
Merged-In: Ic19ae8b0ad8b646836fca7417e68b9b36429d5f0
Change-Id: I2a97491c7bbfd3a04ec3d9488beb158287d22e10
2021-02-05 23:28:13 +08:00
Ahaan Ugale
79593fb955 VIMS: Helper method for InteractionService query.
Code is duplicated in a couple of places.

Bug: 178410946
Test: atest
Change-Id: I1385a03a098ed7fdee7254c4752df6cbaae4a7a2
2021-02-03 11:16:20 -08:00
Ahaan Ugale
8b3b3b9403 VIMS: Clarify NonNullability of PackageMonitor#onPackageModified.
Bug: 178410946
Test: builds
Change-Id: I767e0f7f4ed1ae8c7f0a74afb5114a85a679d86a
2021-01-29 08:41:46 +00:00
lpeter
205ee1efed Create basic behavior of HotwordDetectionService
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
2021-01-26 00:58:37 +00:00
Ahaan Ugale
61732f5f69 VIMS: Simplify findAvailInteractor() by getting metadata in initial pm query.
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
2021-01-25 13:39:27 -08:00
Ahaan Ugale
ba37dbb352 VIMS cleanup: set package on pm query instead of filtering results.
Bug: 178410946
Test: atest CtsVoiceInteractionTestCases
Change-Id: I8ab1824aba534857e2978861d001a74837de281d
2021-01-25 13:39:21 -08:00
Ahaan Ugale
54a505d46f VoiceInteraction: Remove MATCH_DEBUG_TRIAGED_MISSING from PM queries.
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
2021-01-25 13:39:02 -08:00
Ahaan Ugale
cc6f2a78e4 VIMS: Remove useless field mCurUserUnlocked.
It's never set to true and is only used for logging anyway.

Bug: 178410946
Test: atest CtsVoiceInteractionTestCases
Change-Id: Ie4370c2e9ddd305daad90f1393897e30a2dee8ac
2021-01-25 13:38:53 -08:00
Nicholas Ambur
28cc6364d6 add API for ST clients run in battery saver mode
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
2021-01-22 18:24:39 -08:00
TreeHugger Robot
547308d671 Merge "Don't change the voice interactor setting if it's explicitly unset." 2020-12-16 18:37:56 +00:00
Ahaan Ugale
c962a1acd6 Don't change the voice interactor setting if it's explicitly unset.
Test: manual (currently requires hardcoding the assistant role due to b/175747251)
Test: atest CtsAssistTestCases CtsVoiceInteractionTestCases CtsVoiceSettingsTestCases
Bug: 167261484

Change-Id: Ibc2c1675f8b026f2915c3faf55e8ff3c52e1ee32
2020-12-16 16:58:35 +00:00
Treehugger Robot
93b8b32e8b Merge "Add ytai and elaurent to SoundTriggerService OWNERS" am: c1fca8e84e am: 619b06b95f am: 3133db8b96
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1527771

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: Iee1f63773d57627867156ab7704ce9a69a7aeabf
2020-12-14 22:55:09 +00:00
Ytai Ben-Tsvi
16ed896ea5 Add ytai and elaurent to SoundTriggerService OWNERS
Test: n/a
Change-Id: I5c0366f0be49e9d42860694af22550f026f75cbf
2020-12-14 11:33:51 -08:00
Ytai Ben-Tsvi
5bc8f0e178 Reset mServiceDisabled when service dies
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
2020-12-08 10:48:14 -08:00
Hai Zhang
2bad176fc2 Move DefaultPermissionGrantPolicy out of PermissionManagerService.
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
2020-12-04 23:22:38 -08:00
TreeHugger Robot
203346d3f5 Merge "fix issue with ST listModules check" 2020-11-19 01:34:16 +00:00
Nicholas Ambur
5b96c01506 fix issue with ST listModules check
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
2020-11-18 15:08:53 -08:00
Adam Bookatz
961f737505 Merge "Move UserManagerInternal out of android.os" 2020-11-18 17:38:06 +00:00
Adam Bookatz
e5140cc83b Move UserManagerInternal out of android.os
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
2020-11-17 20:43:46 +00:00
Nicholas Ambur
e835b9847e fix SoundTrigger overwriting session identity
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
2020-11-16 17:47:32 -08:00
Ytai Ben-Tsvi
3559e8693e Clean up on client death in SoundTriggerService
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
2020-11-11 10:12:59 -08:00
Nicholas Ambur
cf2c264736 fix return behavior of deleteKeyphraseSoundModel
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
2020-10-14 16:47:52 -07:00
Jeff Sharkey
b93712f623 Tighten up Binder.clearCallingIdentity() usage.
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
2020-10-07 21:24:05 -06:00
Jeff Sharkey
2d2e07e2ff Tighten up Binder.clearCallingIdentity() usage.
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
2020-10-06 11:18:09 -06:00
Ytai Ben-Tsvi
10c9b09f25 Sessionize VoiceInteractionManagerService
This change associates an identity with every
VoiceInteractionManagerService session.

Change-Id: I6c87c2976a4409b8dda4480234d794db91cee374
Bug: 163865561
2020-09-10 13:27:08 -07:00
Ytai Ben-Tsvi
7558017301 Sessionize the SoundTriggerService layer.
This changes associates identity information with every
SoundTrigerService session.

Change-Id: I30c9177f21203c8f3d03d4ff31523137497e760b
Bug: 163865561
2020-09-10 13:27:08 -07:00
Ytai Ben-Tsvi
c79176dc64 Require identity information in SoundTrigger.java
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
2020-09-10 13:27:08 -07:00
Eric Laurent
4db6ccaaa3 Merge "VIS : SoundTriggerService: fix fake AudioRecord creation" into rvc-qpr-dev 2020-09-10 15:04:47 +00:00
Eric Laurent
cbc302a86e VIS : SoundTriggerService: fix fake AudioRecord creation
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:
  a82281f6e7
  1a6689766a

Change-Id: Ib973e22a5f1bd43facca1ed8c282fe444a739249
Merged-In: Ie367b9dda6f9e4f3079f5afe2ac92fc98cf8bced
2020-08-14 18:41:08 +00:00
TreeHugger Robot
5c723d25b0 Merge "VIS : SoundTriggerService: follow up fix in createAudioRecordForEvent()" 2020-08-14 18:24:22 +00:00
Felipe Leme
7a907dbe46 Refactored user switch workflow to decouple UserInfo from TargetUser.
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
2020-08-13 16:56:34 -07:00
Eric Laurent
1a6689766a VIS : SoundTriggerService: follow up fix in createAudioRecordForEvent()
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
2020-08-13 15:58:42 -07:00
Adam Bookatz
80209cfcfc VoiceInteractionManagerService: userId vs. uid
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
2020-08-11 16:20:08 -07:00
Eric Laurent
e14b11bef2 Merge "VIS : SoundTriggerService: fix fake AudioRecord creation" 2020-08-03 23:55:49 +00:00
Felipe Leme
46a0354076 Merge "Removed @Deprecated SystemService callback methods that take a userId." 2020-08-03 15:23:25 +00:00
Felipe Leme
837f8c1e8a Removed @Deprecated SystemService callback methods that take a userId.
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
2020-08-03 07:24:26 +00:00
Robin Lee
f6ef97cd1d Fix NullPointerException thrown by logging
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)
2020-07-28 19:42:55 +00:00
Robin Lee
935906e180 Fix NullPointerException thrown by logging
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
2020-07-28 03:03:41 +02:00
Eric Laurent
a82281f6e7 VIS : SoundTriggerService: fix fake AudioRecord creation
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
2020-07-23 15:21:35 -07:00
felipeal
755578ac28 Added command / binder method to temporarily disable VoiceInteraction.
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
2020-06-04 23:05:14 +00:00
felipeal
b6ebc24b86 Initial implementation of 'cmd voiceinteraction'.
Test: adb shell cmd voiceinteraction help
Test: adb shell cmd voiceinteraction show

Bug: 154011437

Change-Id: I671fca55c050370e04bdae5604f0f7ae705ccadc
2020-05-27 13:05:37 -07:00
Nicholas Ambur
dc1ea7ce04 fix calling SoundTriggerMiddleware in safeMode
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
2020-05-18 10:11:02 -07:00
Evan Severson
b07f0599bb Check permission for soundtrigger detection service
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
2020-05-01 11:04:12 -07:00
Eric Laurent
a9fd7bc05c SoundTriggerHelper: improve in call behavior
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
2020-04-06 13:58:50 -07:00
Nicholas Ambur
95ee3d7ad5 Merge "remove SoundTrigger public member variables" into rvc-dev 2020-03-27 20:54:22 +00:00