summaryrefslogtreecommitdiff
path: root/tools
AgeCommit message (Collapse)Author
2022-03-15Merge SP2A.220305.013Haamed Gheibi
Bug: 220074017 Change-Id: Idfdd94e902f656ac65a2a75dfdd199f6f85ba472
2021-06-24Extract flag font from NotoColorEmojiSeigo Nonaka
Bug: 188926991 Bug: 188779144 Test: m fontchain_lint Change-Id: Ie807e31abb407f5b58665d4d2941bc75186d5c42 Merged-In: Ie807e31abb407f5b58665d4d2941bc75186d5c42
2021-06-04Merge "Emit "usesPermissionFlags" in "dump badging"." into sc-devJeff Sharkey
2021-06-01Finalize resource IDs; script to help in future.Jeff Sharkey
Bug: 171506470 Test: Build Change-Id: I7b7360475ff0f6f4d4c8b8872eefc4e80fd9640e
2021-06-01platform/frameworks/base/ - S is now 31Jeff Sharkey
Bug: 171506470 Test: Build Change-Id: I46d4df5f27783a96a58c966b113391ea3bc112cb
2021-05-26Reintroduce "Deprecated at Birth" linter.Jeff Sharkey
Earlier this year the "apilint.py" script was removed from the build, since it's been replaced by Metalava. However, several features haven't been ported yet, so this change revives them to support the SDK finalization process. This change also updates the script to handle "Signature format: 2.0" files, and reads the API surface from a directory which contains several ".txt" files to support the new Mainline API structuring. Bug: 189224267 Test: manual Change-Id: Ifc4c24a7e159db6725897800d67947d1fd8b9880
2021-05-26Merge "Check for Ignore-AOSP-First commit tag" into sc-devSeth Moore
2021-05-24Check for Ignore-AOSP-First commit tagSeth Moore
If the Ignore-AOSP-First tag is in a commit message, it means the committer is intentionally bypassing the AOSP source of truth. Check for this tag in the AOSP-first presubmit hook so that devs don't have to turn off hooks to get past the AOSP-first policy in exceptional cases. Bug: 189139990 Change-Id: I18231b93d7f213c13ace0a0af24bb20a394cc50f Test: Manual testing with various commit messages
2021-05-24Merge "Updates OWNERS files" into sc-devPatrick Baumann
2021-05-21Updates OWNERS filesPatrick Baumann
Bug: 186864416 Test: Builds Change-Id: I04dfc5c2c7143825334ebc62742e335b8c889492
2021-05-20Do not call pop_back when app has no uses-sdkRyan Mitchell
Calling pop_back on an empty container results in undefined behavior. aapt2 dump badging seg faults when used on an APK with no uses-sdk. Bug: 188461703 Test: aapt2 dump badging HelloAppTest.apk Change-Id: I8d8308a06d542f003ae399629bdbfb5b845674fc
2021-05-13Merge "Remove a use of String16::remove." am: 0529640cc0 am: c881ac71b5 am: ↵Elliott Hughes
9853e8a94e Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1704170 Change-Id: I31b89ce8b8504388deab49d9af7410f8d64b78fd
2021-05-12Merge "Revert "Fix incompatibilities with Kotlin 1.5.0"" am: f1e2bb9a81 am: ↵Aurimas Liutikas
c2db9c85cc am: 51a1b7d082 Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1705633 Change-Id: I20f9e94bb3241e07052edbe8c042162c2ad6f118
2021-05-12Revert "Fix incompatibilities with Kotlin 1.5.0"Aurimas Liutikas
This reverts commit b8ca1157ab6d463a19f6a7bbfeb25d1f9f1be911. Reason for revert: b/187908823 Change-Id: I9606c5730f4e8697a9319939acda0a9b7a74634d
2021-05-11Remove a use of String16::remove.Elliott Hughes
This function, ironically, is being removed. This is one of only two users, and it's pretty hard to use correctly. In this case, using one of the existing constructors to keep a prefix seems clearer even in a world where remove() was better implemented. Test: treehugger Change-Id: Icdf02d9fcc059c396c13787d9bb4e8bda5658656
2021-05-11Merge "Fix incompatibilities with Kotlin 1.5.0" am: 600dcaf908 am: ↵Aurimas Liutikas
70ba49b0e5 am: c61fdfd2d1 Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1697314 Change-Id: I4c76908e0cf9a1ba0493322c1f8dedb4fa925e80
2021-05-11Merge "Fix segmentation fault in aapt2" into sc-devTreeHugger Robot
2021-05-11Merge "Add <staging-public-group-final> to aapt2 (2/2)" into sc-devTreeHugger Robot
2021-05-11Fix segmentation fault in aapt2Kelvin Zhang
When passing a single iterator to std::vector::eraase, only element at that iterator is removed. If no elements are filtered, std::remove_if() returns the end iterator, attempting to erase() the end iterator can cause segmentation fault. This bug causes signing test to fail. https://atp.googleplex.com/tests/asit/ota/signing?tabId=test_run Test: aapt2 PRODUCT/app/CalculatorGooglePrebuilt/CalculatorGooglePrebuilt.apk Bug: 175789289 Bug: 178554651 Change-Id: I813055238bef2dcbdf76172a00b3f44ae940b759 (cherry picked from commit b88ccf80aa884df039cd13c5a31f3e08065d487e)
2021-05-11Merge "Fix aapt badging segmentation fault" into sc-devTreeHugger Robot
2021-05-11Add <staging-public-group-final> to aapt2 (2/2)Ryan Mitchell
Fixes BinaryResourceParser loading of alias chunk and makes changes that did not get committed in 2fedba9a32d9e92344eaf6e9faf5b43e1bc2ae70. Bug: 183411356 Test: aapt2_test Change-Id: Ieff9166100019f38ddcfe900014709b15db24e43
2021-05-10Add <staging-public-group-final> to aapt2Ryan Mitchell
To allow apps that compiled against a pre-release SDK to continue working for a period of time after API finalization, a new tag, <staging-public-group-final>, has been added to aapt2. When finalizing the framework resource API, converting <staging-public-group> tags to <staging-public-group-final> will cause aapt2 to generate the resource table so that there is a resource entry for the old non-finalized (staged) resource ID and another entry for the finalized resource ID of newly finalized resources. This allows an application that compiled against the pre-release SDK to continue resolving resources using pre-release resource IDs. All references to pre-release resource IDs will be rewritten to their finalized resource IDs through the information stored in the new staged alias chunk. This allows applications compiled against <staging-public-group> resources to use the newly finalized resource ID without re-compilation. When an application is re-compiled against the SDK with <staging-public-group-final> tags, the application will use the finalized resource IDs. This change limits the use of the alias chunk to the framework for S. Bug: 183411356 Test: aapt2_test Change-Id: Iba1c3033c3c2f32de8e4a19b58d3921c971092c4
2021-05-10Fix aapt badging segmentation faultRyan Mitchell
Unsigned subtraction lead to arithmetic overflow which caused aapt to reference the vector out of its bounds. Bug: 175789289 Test: dump badging on a manifest with no uses-sdk tag Change-Id: Id1b96376a8bfe13c0c195bb6f62b681c3d686034
2021-05-07Fix incompatibilities with Kotlin 1.5.0Aurimas Liutikas
Test: make Change-Id: I9bc49c759d0b2527b6419f5d711e394402a7e781
2021-05-07Merge "Update fontchain_linter.py to be compatible with Compat font" into sc-devTreeHugger Robot
2021-05-04Update fontchain_linter.py to be compatible with Compat fontSeigo Nonaka
Bug: 186700756 Test: m fontchain_lint Change-Id: Ibfe33f29f3db998fdc0db1bbf35851841ca73d9a
2021-05-04Merge "Fix uninitialized macro reference member" into sc-devRyan Mitchell
2021-05-04Merge "AAPT2: Only print last uses-sdk tag" into sc-devRyan Mitchell
2021-05-04Merge "Add aapt to aapt2_artifacts" into sc-devRyan Mitchell
2021-05-04Add aapt to aapt2_artifactsRyan Mitchell
Adds aapt to aapt2_artifacts dist target so the binary will appear in the ub-aapt2-release branch. Bug: 175789289 Test: none Change-Id: I8963eecfd7667196fc3651a00d9a744cddd2c24b
2021-05-03Fix uninitialized macro reference memberRyan Mitchell
Reference::allow_raw was left uninitialized. Bug: 175616308 Test: aapt2_tests Change-Id: I58a560c7fb278c1aa2b415e456f849999c835155
2021-05-03Merge "AAPT: Only print last uses-sdk tag" into sc-devRyan Mitchell
2021-05-03AAPT2: Only print last uses-sdk tagRyan Mitchell
When an APK defines multiple "uses-sdk" tags, the Android runtime only uses the minSdkVersion and targetSdkVersion values from the last occurrence of the "uses-sdk" tag. For example an application with the following tags: <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/> <uses-sdk android:maxSdkVersion="28"/> Will have the following version codes at runtime: minSdk=1 targetSdk=1 Another example: <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/> <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/> Will have the following version codes at runtime: minSdk=5 targetSdk=19 AAPT2 must print the version data from only the last tag, skipping other occurrences of the tag. Bug: 175789289 Test: manual Change-Id: If0fece7de1d96046221c89d1b12515bc5c15c301
2021-05-03AAPT: Only print last uses-sdk tagRyan Mitchell
When an APK defines multiple "uses-sdk" tags, the Android runtime only uses the minSdkVersion and targetSdkVersion values from the last occurrence of the "uses-sdk" tag. For example an application with the following tags: <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/> <uses-sdk android:maxSdkVersion="28"/> Will have the following version codes at runtime: minSdk=1 targetSdk=1 Another example: <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/> <uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/> Will have the following version codes at runtime: minSdk=5 targetSdk=19 AAPT must print the version data from only the last tag, skipping other occurrences of the tag. Bug: 175789289 Test: manual Change-Id: Ic855ff920d0b7abedd250d977bfa55189f4c8946
2021-04-28Add <macro> tag to aapt2Ryan Mitchell
AAPT2 Macros are compile-time resources definitions that are expanded when referenced during the link phase. A macro must be defined in the res/values.xml directory. A macro definition for a macro named "foo" looks like the following: <macro name="foo">contents</macro> When "@macro/foo" is used in the res/values directory or in a compiled XML file, the contents of the macro replace the macro reference and then the substituted contents are compiled and linked. If the macro contents reference xml namespaces from its original definition, the namespaces of the original macro definition will be used to determine which package is being referenced. Macros can be used anywhere resources can be referenced using the @package:type/entry syntax. Macros are not included in the final resource table or the R.java since they are not actual resources. Bug: 175616308 Test: aapt2_tests Change-Id: I48b29ab6564357b32b4b4e32bff7ef06036382bc
2021-04-21[LSC] Add LOCAL_LICENSE_KINDS to frameworks/baseBob Badour
Added SPDX-license-identifier-Apache-2.0 to: core/tests/hosttests/test-apps/DownloadManagerTestApp/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk core/tests/overlaytests/host/test-apps/SignatureOverlay/Android.mk core/tests/overlaytests/host/test-apps/UpdateOverlay/Android.mk packages/Android.bp packages/SystemUI/tests/Android.mk services/tests/servicestests/test-apps/PackageParsingTestManifests/Android.bp tests/Camera2Tests/CameraToo/Android.mk tests/Camera2Tests/CameraToo/tests/Android.mk tests/Camera2Tests/SmartCamera/SimpleCamera/Android.mk tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk tests/CanvasCompare/Android.mk tests/FlickerTests/test-apps/Android.bp tests/LockTaskTests/Android.mk tests/SoundTriggerTests/Android.mk tools/aapt2/integration-tests/MergeOnlyTest/App/Android.mk tools/aapt2/integration-tests/NamespaceTest/App/Android.mk tools/aapt2/integration-tests/NamespaceTest/Split/Android.mk tools/fonts/Android.bp Bug: 68860345 Bug: 151177513 Bug: 151953481 Test: m all Exempt-From-Owner-Approval: janitorial work Change-Id: Ic480b653df5da840f5e65b818af3de5c8417ab4a
2021-04-21DO NOT MERGE Add LOCAL_LICENSE_KINDS to frameworks/baseBob Badour
Added SPDX-license-identifier-Apache-2.0 to: core/tests/hosttests/test-apps/DownloadManagerTestApp/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppTests2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestAppWithCorruptedDex/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk core/tests/overlaytests/host/test-apps/SignatureOverlay/Android.mk core/tests/overlaytests/host/test-apps/UpdateOverlay/Android.mk location/tests/Android.bp packages/CarSystemUI/tests/Android.mk packages/SystemUI/tests/Android.mk packages/overlays/AccentColorAmethystOverlay/Android.mk packages/overlays/AccentColorAquamarineOverlay/Android.mk packages/overlays/AccentColorBlackOverlay/Android.mk packages/overlays/AccentColorCarbonOverlay/Android.mk packages/overlays/AccentColorCinnamonOverlay/Android.mk packages/overlays/AccentColorGreenOverlay/Android.mk packages/overlays/AccentColorOceanOverlay/Android.mk packages/overlays/AccentColorOrchidOverlay/Android.mk packages/overlays/AccentColorPaletteOverlay/Android.mk packages/overlays/AccentColorPurpleOverlay/Android.mk packages/overlays/AccentColorSandOverlay/Android.mk packages/overlays/AccentColorSpaceOverlay/Android.mk packages/overlays/AccentColorTangerineOverlay/Android.mk packages/overlays/DisplayCutoutEmulationCornerOverlay/Android.mk packages/overlays/DisplayCutoutEmulationDoubleOverlay/Android.mk packages/overlays/DisplayCutoutEmulationHoleOverlay/Android.mk packages/overlays/DisplayCutoutEmulationNarrowOverlay/Android.mk packages/overlays/DisplayCutoutEmulationTallOverlay/Android.mk packages/overlays/DisplayCutoutEmulationWaterfallOverlay/Android.mk packages/overlays/DisplayCutoutEmulationWideOverlay/Android.mk packages/overlays/FontNotoSerifSourceOverlay/Android.mk packages/overlays/IconPackCircularAndroidOverlay/Android.mk packages/overlays/IconPackCircularLauncherOverlay/Android.mk packages/overlays/IconPackCircularSettingsOverlay/Android.mk packages/overlays/IconPackCircularSystemUIOverlay/Android.mk packages/overlays/IconPackCircularThemePickerOverlay/Android.mk packages/overlays/IconPackFilledAndroidOverlay/Android.mk packages/overlays/IconPackFilledLauncherOverlay/Android.mk packages/overlays/IconPackFilledSettingsOverlay/Android.mk packages/overlays/IconPackFilledSystemUIOverlay/Android.mk packages/overlays/IconPackFilledThemePickerOverlay/Android.mk packages/overlays/IconPackKaiAndroidOverlay/Android.mk packages/overlays/IconPackKaiLauncherOverlay/Android.mk packages/overlays/IconPackKaiSettingsOverlay/Android.mk packages/overlays/IconPackKaiSystemUIOverlay/Android.mk packages/overlays/IconPackKaiThemePickerOverlay/Android.mk packages/overlays/IconPackRoundedAndroidOverlay/Android.mk packages/overlays/IconPackRoundedLauncherOverlay/Android.mk packages/overlays/IconPackRoundedSettingsOverlay/Android.mk packages/overlays/IconPackRoundedSystemUIOverlay/Android.mk packages/overlays/IconPackRoundedThemePickerOverlay/Android.mk packages/overlays/IconPackSamAndroidOverlay/Android.mk packages/overlays/IconPackSamLauncherOverlay/Android.mk packages/overlays/IconPackSamSettingsOverlay/Android.mk packages/overlays/IconPackSamSystemUIOverlay/Android.mk packages/overlays/IconPackSamThemePickerOverlay/Android.mk packages/overlays/IconPackVictorAndroidOverlay/Android.mk packages/overlays/IconPackVictorLauncherOverlay/Android.mk packages/overlays/IconPackVictorSettingsOverlay/Android.mk packages/overlays/IconPackVictorSystemUIOverlay/Android.mk packages/overlays/IconPackVictorThemePickerOverlay/Android.mk packages/overlays/IconShapeHeartOverlay/Android.mk packages/overlays/IconShapePebbleOverlay/Android.mk packages/overlays/IconShapeRoundedRectOverlay/Android.mk packages/overlays/IconShapeSquareOverlay/Android.mk packages/overlays/IconShapeSquircleOverlay/Android.mk packages/overlays/IconShapeTaperedRectOverlay/Android.mk packages/overlays/IconShapeTeardropOverlay/Android.mk packages/overlays/IconShapeVesselOverlay/Android.mk packages/overlays/NavigationBarMode2ButtonOverlay/Android.mk packages/overlays/NavigationBarMode3ButtonOverlay/Android.mk packages/overlays/NavigationBarModeGesturalOverlay/Android.mk packages/overlays/NavigationBarModeGesturalOverlayExtraWideBack/Android.mk packages/overlays/NavigationBarModeGesturalOverlayNarrowBack/Android.mk packages/overlays/NavigationBarModeGesturalOverlayWideBack/Android.mk services/tests/servicestests/test-apps/PackageParsingTestManifests/Android.bp tests/Camera2Tests/CameraToo/Android.mk tests/Camera2Tests/CameraToo/tests/Android.mk tests/Camera2Tests/SmartCamera/SimpleCamera/Android.mk tests/Camera2Tests/SmartCamera/SimpleCamera/tests/Android.mk tests/CanvasCompare/Android.mk tests/FlickerTests/test-apps/Android.bp tests/LockTaskTests/Android.mk tests/SoundTriggerTests/Android.mk tools/aapt2/integration-tests/MergeOnlyTest/App/Android.mk tools/aapt2/integration-tests/NamespaceTest/App/Android.mk tools/aapt2/integration-tests/NamespaceTest/Split/Android.mk tools/fonts/Android.bp Bug: 68860345 Bug: 151177513 Bug: 151953481 Test: m all Exempt-From-Owner-Approval: janitorial work Change-Id: I90231075f135176668586b903f2c85ec350fd527
2021-04-21Merge "Aapt2 ValueTransformer" into sc-devRyan Mitchell
2021-04-21Aapt2 ValueTransformerRyan Mitchell
For future macro support, aapt2 must be able to convert Reference values into other Value types. Currently a DescendingValueVisitor is used to visit all of the References in a ResourceTable or a compiled XML file to set their resource ids during the link phase. This was fine since we were only mutating the resource id of the visited Reference. A macro may reference a String, BinaryPrimitive, or any other Item type. During the link phase, we will need to transform references to macros into the values of the macros. The only parameter in the methods of the ValueVisitor interface is a raw pointer to the type being visited. The visitor interface does not support reassigning the visited type to a different type. ValueTransformer is a new interface for consuming a Value type and transforming it into a compatible Value type. This change refactors Value::Clone to use this interface. Bug: 175616308 Test: aapt2_tests Change-Id: Ic1b9d718b932c208764114cd9c74d880e189ccb0
2021-04-17Merge "Add FontConfig.Font.getPostScriptName API" into sc-devTreeHugger Robot
2021-04-17Add FontConfig.Font.getPostScriptName APISeigo Nonaka
Bug: 184003133 Bug: 185508395 Test: atest FontManagerTest#fontManager_PostScriptName Change-Id: Ie44e0d500c61b37035a0b39039891da13cd6a5ce
2021-04-16Merge "Move hiddenapi sort preupload tools to tools/platform-compat" am: ↵Paul Duffin
b82853357b am: 89aedd6cb8 am: af77c134d9 Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1675867 Change-Id: I35b678f40dbc8643224aec26ba1808da893bb80f
2021-04-15Move hiddenapi sort preupload tools to tools/platform-compatPaul Duffin
Bug: 179354495 Test: try and upload changes to hiddenapi flag files Change-Id: Iedc21893bbc62adaaca4de353d022e77fc70ace2
2021-04-14Merge "Generalize tools/hiddenapi/checksorted_sha.sh" am: a48ee296ee am: ↵Paul Duffin
44b2f6cebd am: 272bf95507 Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1675866 Change-Id: Ifde8b21834c3dac0cba363a667f7d94e820e18a2
2021-04-14Merge "Remove com.android.i18n.phonenumbers from libcore packages" am: ↵Paul Duffin
0d80c5c432 am: da8ead7229 am: 03559adae9 Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1675524 Change-Id: I9e03d5ed5be3f68535276bf58b29c871fa153b80
2021-04-14Generalize tools/hiddenapi/checksorted_sha.shPaul Duffin
Stops it being specific to frameworks/base. This change works because $2 is $(REPO_ROOT) and $(REPO_ROOT)/frameworks/base is the same as $PWD when this script is used in the frameworks/base repo. Also removes boot/ from the path that identifies hidden API flag files. This keeps the directory structure needed in the repositories into which hidden API flag files will be moved simple by removing the need to have a boot/ directory. The hiddenapi/ directory is required as the files need their own separate OWNERS file. A follow up change will move this file into tools/platform-compat to allow it to be used by other repos. Bug: 177892522 Test: try and upload changes to hiddenapi flag files Change-Id: Ifb3690e7c596249fda84eff82f5a53f0b1b6f991
2021-04-14Remove com.android.i18n.phonenumbers from libcore packagesPaul Duffin
The com.android.i18n.phonenumbers is not used by any libcore code and is no longer managed by the libcore team. Bug: 177892522 Test: n/a Change-Id: Ib445e652746a8b9b42c6bee7d27a062d6b62a4ec
2021-04-12Move font tool build rules to subdirAnton Hansson
The top-level Android.bp file is very large, so move modules that can be in subdirs. Also rename the vague "base_defaults" module to something more suitable. Bug: 185128417 Test: m Change-Id: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b
2021-04-12Move font tool build rules to subdirAnton Hansson
The top-level Android.bp file is very large, so move modules that can be in subdirs. Also rename the vague "base_defaults" module to something more suitable. Bug: 185128417 Test: m Merged-In: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b Change-Id: I5f3106b74edb91ac9db5b3e66cc61566d0f16e9b
2021-04-08Merge "Update hiddenapi preupload checks to handle new location" am: ↵Paul Duffin
ca0501d1b8 am: 0c71f7c0a4 am: 48c3dadc6a Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1668445 Change-Id: I5f2682d437286c1d320475c5381693c96f4db667