Currently, spell checker component can process requests only from the
foreground user's account and requests from background users are always
ignored. However, in order to fully realize the multi-user nature of
Android, most system services will need to truly support multiple users
simultaneously. With multi-user aware TSMS implemented, apps from
background users (other accounts and their work profiles) can also run
their spell checking jobs in batch, without the external device user
having to switch accounts for the spell checker to be enabled in that
account.
Bug: 63041121
Test: Manually as follows
Setup: Create a work profile and a secondary user
1. adb shell pm create-user --profileOf 0 --managed workprofile (userId 10)
2. adb shell am create-user seconrdaryuser1 (userId 11)
3. Build SampleSpellCheckerService, which is by default
direct-boot unaware.
package name: com.example.android.samplespellcheckerservice
APK name: SampleSpellCheckerService_DBUnaware.apk
4. Also build a custom SampleSpellCheckerService by explicitly
making '.SampleSpellCheckerService' direct-boot aware.
package name: com.example.android.samplespellcheckerservice2
APK name: SampleSpellCheckerService_DBAware.apk
5. adb install --user 0 -r SampleSpellCheckerService_DBUnaware.apk
6. adb install --user 10 -r SampleSpellCheckerService_DBUnaware.apk
7. adb install --user 11 -r SampleSpellCheckerService_DBUnaware.apk
8. adb install --user 0 -r SampleSpellCheckerService_DBAware.apk
9. adb install --user 10 -r SampleSpellCheckerService_DBAware.apk
10. adb install --user 11 -r SampleSpellCheckerService_DBAware.apk
11. make -j ApiDemos
12. adb install --user 0 -r $ANDROID_PRODUCT_OUT/data/app/ApiDemos/ApiDemos.apk
13. adb install --user 10 -r $ANDROID_PRODUCT_OUT/data/app/ApiDemos/ApiDemos.apk
14. adb install --user 11 -r $ANDROID_PRODUCT_OUT/data/app/ApiDemos/ApiDemos.apk
15. Make sure AOSP Keyboard (com.android.inputmethod.latin) is installed
for all users.
Test 1: Settings correctly updated for each user (Work profile's SC is
not bound to account and can be individually updated)
0. Complete Setup
1. adb shell am start-user 0
2. adb shell am start-user 10
3. adb shell am start-user 11
4. adb shell settings put --user 0 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
5. adb shell settings put --user 10 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
6. adb shell settings put --user 11 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
7. adb shell settings get --user 0 secure selected_spell_checker
-> com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
8. adb shell settings get --user 10 secure selected_spell_checker
-> com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
9. adb shell settings get --user 11 secure selected_spell_checker
-> com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
10. adb shell settings put --user 0 secure selected_spell_checker com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
11. adb shell settings get --user 0 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
12. Repeat 8 & 9. Results should be the same.
13. adb shell settings put --user 10 secure selected_spell_checker com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
14. adb shell settings get --user 10 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
15. adb shell settings get --user 0 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
16. adb shell settings get --user 11 secure selected_spell_checker
-> com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
17. adb shell settings put --user 11 secure selected_spell_checker com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
14. adb shell settings get --user 11 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
14. adb shell settings get --user 0 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
15. adb shell settings get --user 10 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
16. adb shell am start-user 0
17. adb shell am start-user 10
18. adb shell am start-user 11
19. adb shell settings put --user 0 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
20. adb shell settings put --user 10 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
21. adb shell settings put --user 11 secure selected_spell_checker com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
Test 2: Basic functionality works (each user can use SC when they're at
the foreground) & background connections aren't broken
0. Complete Setup
1. Open "Api Demos" app for user 0
2. Go to Views/Text/EditText
3. Focus into the first EditText then type "aaa"
4. Focus into the second EditText then type "aaa"
5. adb shell dumpsys textservices --user 0
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
6. adb shell dumpsys textservices --user 10
-> make sure there are no active spell checker sessions.
7. adb shell dumpsys textservices --user 10
-> make sure there are no active spell checker sessions.
8. Repeat 7-10 for the work profile (userId 10)
9. adb shell dumpsys textservices --user 10
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
10. adb shell am switch-user 11
11. Repeat 7-10 (userId 11)
12. adb shell dumpsys textservices --user 11
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
13. adb shell dumpsys textservices --user 0
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
14. adb shell dumpsys textservices --user 10
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
Test 3: Background user can also call spell checker APIs
0. Complete Setup
1. adb shell pm install -r TestApp.apk
2. adb shell am switch-user 11
3. adb shell am start --user 11 -n com.example.gulizseray.testapp/com.example.gulizseray.testapp.MainActivity
4. adb logcat | grep spellcheckerclient
-> Periodically calls spell checker APIs and prints results
5. adb shell dumpsys textservices --user 11
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
6. Adb shell am switch-user 0
7. adb logcat | grep spellcheckerclient
-> Continues to periodically call SC APIs and print results
8. Open "Api Demos" app for user 0
9. Go to Views/Text/EditText
10. Focus into the first EditText then type "aaa"
11. Focus into the second EditText then type "aaa"
12. adb shell dumpsys textservices --user 0
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
13. adb shell dumpsys textservices --user 11
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
Test 4: Package updates for all unlocked users (not just foreground user) are tracked properly (New package added/removed from owner, profile, secondary users)
0. Complete Setup
1. adb uninstall --user 0 com.example.android.samplespellcheckerservice
2. adb shell dumpsys textservices --user 0
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
does not exist in the list
3. adb shell settings get --user 0 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
4. adb uninstall --user 10 com.example.android.samplespellcheckerservice
5. adb shell dumpsys textservices --user 10
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
does not exist in the list
6. adb shell settings get --user 10 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
7. adb uninstall --user 11 com.example.android.samplespellcheckerservice
8. adb shell dumpsys textservices --user 11
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
does not exist in the list
9. adb shell settings get --user 11 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
10. adb install --user 0 -r out/target/product/generic/system/app/SampleSpellCheckerService/SampleSpellCheckerService.apk
11. adb shell dumpsys textservices --user 0
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
is in the list
12. adb shell settings get --user 0 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
13. adb install --user 10 -r out/target/product/generic/system/app/SampleSpellCheckerService/SampleSpellCheckerService.apk
14. adb shell dumpsys textservices --user 10
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
is in the list
15. adb shell settings get --user 10 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
16. adb install --user 11 -r out/target/product/generic/system/app/SampleSpellCheckerService/SampleSpellCheckerService.apk
17. adb shell dumpsys textservices --user 11
-> Make sure com.example.android.samplespellcheckerservice/.SampleSpellCheckerService
is in the list
18. adb shell settings get --user 11 secure selected_spell_checker
-> com.android.inputmethod.latin/.spellcheck.AndroidSpellCheckerService
Test 5: SpellCheckerBindGroups will be cleared when the corresponding
app is killed.
0. Complete Setup
1. Open "Api Demos" app for user 0
2. Go to Views/Text/EditText
3. Focus into the first EditText then type "aaa"
4. Focus into the second EditText then type "aaa"
5. adb shell dumpsys textservices --user 0
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
6. Kill Api Demos
7. adb shell dumpsys textservices --user 0
-> make sure there are no active spell checker sessions.
8. Repeat 1-7 for work profile (user 10)
9. adb shell am switch-user 11
10. Repeat 1-7 for secondary user (user 11)
12. adb shell pm install -r TestApp.apk
13. adb shell am start --user 11 -n com.example.gulizseray.testapp/com.example.gulizseray.testapp.MainActivity
14. adb shell dumpsys textservices --user 11
-> make sure 'com.example.android.samplespellcheckerservice'
is serving spell checker sessions.
15. adb shell am switch-user 0
16. adb shell am force-stop com.example.gulizseray.testapp
17. adb shell dumpsys textservices --user 11
-> make sure there are no active spell checker sessions.
Change-Id: I06c27ef834203a21cc445dc126602c799384527b
API council have requested a manifest constant be added
to the SystemApi directly in preference to an indirect
SystemApi constant here:
android.provider.TimeZoneRulesDataContract.READER_PERMISSION.
This is the third of three changes to (1) add the new constant,
(2) switch over code using the constant, (3) remove the old
constant.
Bug: 64568899
Test: None, build only
Change-Id: I75731b13ce2046556d6148aa5707cab6ed9cf9bf
The @removed docs tag means that a particular API should be considered
as removed from the API surface area that it otherwise would have been
exposed through.
This set of CLs is fixing a bug where we @removed had been treated as
always removing from the public API.
Bug: 62341924
Test: make -j32 update-api
Change-Id: I336b2df4804e947a0b93a12269d6e7c5594eef7e
The TIME_12_24 setting internally has 3 possible values: "12" to force a
12 hour clock, "24" to force a 24 hour clock and null to use the current
locales default (which also happens to be the default value).
The change makes it possible to explicitly set null. Without this it's
impossible to "undo" setting it to one of the two explicit values.
Bug: 32761619
Test: bit CtsProviderTestCases
Change-Id: Ib7e040176860b8db83702ebec88cdf2d347680b3
All references to
android.provider.Settings.ACTION_SHOW_INPUT_METHOD_PICKER have been
removed by the following CLs.
Id36c8c34159bea8b72557b40bcf024d401f580b6 frameworks/base
Id990c66516c9b3ed7ada6891746ec0e0eecbe545 packages/apps/Settings
I915231678b94f97c1b5105cb607d6631e3df6b6a vendor/google_clockworks
I3e26ed807445725262485ac1065fdfa299d1b624 cts
Test: make checkbuild
Fixes: 64008672
Bug: 6364455
Change-Id: I4210a5b5662be497d395a454f7f1cc395637683e
In this CL, I add 2 new tags to the defaults in Metadata Reader so that
Files App can get the data and display it to the user.
Bug: 64267283
Test: MetadataReaderTest.java
Change-Id: Ibb8607f001a390e38e87416ad2fb61ee81a5c7ee
Remove convenience method from DocumentsProvider, clients to use MetadataReader directly.
Concentrate mimetype checking in MetadataReader.isSupportedType.
Update FileSystemProvider to use MetadataReader directly.
Test: Updated mtp tests. Other functioanlity manually verified.
Change-Id: Ie1e3d3092b53107f6c980c18b1451290dd2a9653
This enables time zone data app code (provided by Google)
to check the manifest (provided by the OEM) uses the right permission
without referencing internal manifest permission Strings directly.
Bug: 64139059
Test: Ran internal xTS tests
Change-Id: I4b1a8608beff3b5218ecf5162cfe8e31027e2007
(cherry picked from commit 8e2a85752b)
This enables time zone data app code (provided by Google)
to check the manifest (provided by the OEM) uses the right permission
without referencing internal manifest permission Strings directly.
Bug: 64139059
Test: Ran internal xTS tests
Change-Id: I4b1a8608beff3b5218ecf5162cfe8e31027e2007
It didn't lend it self naturally to the multi-metadata return type and was complicating further adoption of the feature in system providers.
Test: manual
Change-Id: I2dde59c7e9609a205614f715c7383b653fa83111
In this CL, we add two public static final Strings to MetadataReader. I
use these to put in an "extras" bundle into our highest level bundle.
Within that extras bundle is the Latitude and Longitude values, if
available.
Bug: 63906073
Test: In Place
Change-Id: I1feccb4444d6525f9bc8bddfe8cc73b098e0b90e
@hide for now. Basically any client with stream for a file (advised to be local resource) can get standard metadata.
In FileSystemProvider, include METADATA SUPPORTED flag for image files.
Bug: 63893154
Test: build and test interactively.
Change-Id: Idc6fecd53625b108647d66a45ac115a945a1083c
In this CL, I'm adding ability to retrieve image metadata. I've added
the class MetadataRetriever that can currently retrieve Exif data from
an image. This class is used withing FileSystemProvider in order to
return a given image's exif data.
Test: Hidden API
Bug: 62621970
Change-Id: Ibb329492df4db1a65f65722c6a52582c43de8fe5
This value is read from the global settings provider, and can be
configured via an overlay.
Bug: 63112872
Test: NetworkPolicyManagerServiceTest
Change-Id: If55ea08df1dd8440189f9b46a5606118de99c930
Remove TODOs to add classes to the system API that are not needed
(since they are used by a platform-only app).
Bug: 31008728
Test: make droid
Change-Id: I0d75686ddeae929e9d87c5ca8703a609a1450d76
Merged-In: I600e7b08853b86b27463193411cf85207ae09ce8
SM.allocateBytes() doesn't offer a clear way to detect if a failed
request could ever succeed. (For example, we can never work with
pipes, or files on an unsupported storage device.) So give
developers a first-class API to test if allocation is supported.
If the underlying filesystem doesn't support fallocate(), fall back
to ftruncate() instead of failing completely.
Clean up @removed APIs that were refactoring during API 26 review
process.
Remove support for storing downloads on the /cache partition, which
doesn't exist on many devices.
Bug: 63057877
Test: bit DownloadProviderTests:*
Test: bit DocumentsUITests:com.android.documentsui.services.CopyJobTest
Test: bit DocumentsUITests:com.android.documentsui.services.MoveJobTest
Change-Id: I85d42a1a7240034b4f2a6f359011ac182bdce36e
Add TimeZoneRulesDataContract to system API and remove
TODOs to add other classes that should not now be needed
in the system API (since they are used by a platform-only
app).
Bug: 31008728
Test: make droid
Change-Id: I600e7b08853b86b27463193411cf85207ae09ce8
This CL reverts the implementation of eSIM factory reset in
MasterClearReceiver and uses RecoverySystem#rebootWipeUserData to erase
eSIM data. Besides this, when the eSIM data isn't erased, we should call
EuiccManager#retainSubscriptionsForFactoryReset to let the fastboot know
that.
Bug: 62957212
Test: TreeHugger
Merged-In: I08ab9d53ec4fc73a65e8e7d0c39ac95b2d44d012
Change-Id: I08ab9d53ec4fc73a65e8e7d0c39ac95b2d44d012
This CL reverts the implementation of eSIM factory reset in
MasterClearReceiver and uses RecoverySystem#rebootWipeUserData to erase
eSIM data. Besides this, when the eSIM data isn't erased, we should call
EuiccManager#retainSubscriptionsForFactoryReset to let the fastboot know
that.
Bug: 62957212
Test: TreeHugger
Change-Id: I08ab9d53ec4fc73a65e8e7d0c39ac95b2d44d012