summaryrefslogtreecommitdiffstats
path: root/services
Commit message (Collapse)AuthorAgeFilesLines
* DO NOT MERGE Isolated processes don't get precached system service bindersChristopher Tate2016-12-121-9/+16
| | | | | | | | | | | | | | More specifically, they get a PackageManager binder -- necessary for Android process startup and configuration -- but none of the other usual preloaded service binders. CYNGNOS-3312 Bug 30202228 Change-Id: I3810649f504cd631665ece338a83d2e54d41ad05 (cherry picked from commit 2c61c57ac53cbb270b4e76b9d04465f8a3f6eadc) (cherry picked from commit f4d23f30c92bc80808f57677caab0282c8d28dc6) (cherry picked from commit 9357830a380c8174ce5130941a7a53915d680819)
* AppOps: Do not prune apps that are not presentJorge Ruesga2016-12-031-4/+11
| | | | | | | | | | | Do not prune apps that are not currently present in the device (like USB memory ones). While booting, they are not available but must not be purged from AppOps, because they are still present in the Android app database. Issue-Id: CYAN-2811 Change-Id: I6680cbdf0022812b45d966dffee754399e92accb Signed-off-by: Jorge Ruesga <jorge@ruesga.com>
* frameworks/base: Addition of Changes for ZeroBalance featurePragnya Paramita2016-11-101-0/+35
| | | | | | | | | | | | | | | | --Addition of code to receive broadcast from ZeroBalanceHelper application for executing command to write block/unblock rule to Iptable. --Addition of ZeroBalanceHelper file to be accesible by other modules to notify ZeroBalanceHelper application about update on change of SIM balance. --Addition of rule to allow browser uid when rest all applications are in blocked state. --Addition of feature flag to control the zerobalance feature. CRs-Fixed: 927258 Change-Id: Ifdf4c46fd63ab78193047a9bc8b62bf41065a665
* NotificationManager: Concentrate LED light capabilities at a single locationRicardo Cerqueira2016-11-102-14/+58
| | | | | | | | | | | | | We had(have) a bunch of individual boolean toggles for various LED behaviors and combinations, which end up getting used as a similarly sprawling bunch of getResource() calls across various locations. And they keep piling up... So... create a new overlayable array of LED capabilities (config_deviceLightCapabilities) where we can throw everything (and expand in the future). Also, create a helper to abstract usage of the old (multi-resource) and new (single resource array) formats to avoid breaking any deployed devices. Change-Id: I7d627914b058861048071fc15776031c4152157f
* am: Fix mismergeBruno Martins2016-11-091-9/+0
| | | | | | | * The removal of this code was missed out during merge of tag 'android-6.0.1_r74' Change-Id: I57dc035f79b7e20c09a21d5242c20370ad6d34ce
* Merge tag 'android-6.0.1_r74' into HEADJessica Wagantall2016-11-094-9/+53
|\ | | | | | | | | | | CYNGNOS-3303 Android 6.0.1 release 74
| * Avoid crashing when downloading MitM'd PAC that is too big am: 7d2198b586 ↵Paul Jensen2016-09-271-4/+30
| | | | | | | | | | | | | | | | am: 9c1cb7a273 am: 6634e90ad7 am: 66ee2296a9 Change-Id: Ib0023b44e521b936ab2f9450ad367b1feda64492
| * DO NOT MERGE Check caller for sending media key to global priority sessionJaewan Kim2016-09-271-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | Prevent sending media key events from the non-system app to the global priority session through the MediaSessionManager.dispatchMediaKeyEvent(). Note that any app can use the API indirectly with the public API AudioManager.dispatchMediaKeyEvent(). Bug: 29833954 Tested: Installed malicious apps and confirmed that they don't work. Tested: Run CtsTelecomTestCases and CtsMediaTestCases Change-Id: I2a9e78196ba7455324e485f098f095d03b47ee15 (cherry picked from commit c282c4f106bea5c5375fdb6062ffd4fdcf8563a7)
| * Fix build break due to automerge of 7d2198b5Paul Jensen2016-09-271-1/+1
| | | | | | | | | | | | | | Bug: 30100884 Change-Id: I8fa379a74b5d9467b5b9498bd18de2a043963c6f (cherry picked from commit baae57ab24db7d3b0bf7f84c05954173f1ee15fe)
| * DO NOT MERGE: Catch all exceptions when parsing IME meta dataTadashi G. Takaoka2016-09-271-4/+2
| | | | | | | | | | | | | | | | Bug: 30568284 Change-Id: I0b613f8ce0f014320c5ac1bf445699ea2702a0a2 (manually cherry picked from 9b2997d22e6ce2a15065d8e7608dd77b316c2065) (cherry picked from commit 7bb4c825585d5a6afbb59484ec7db5f5dec1bdaf)
| * DO NOT MERGE: Fix deadlock in AcitivityManagerService.Sudheer Shanka2016-09-271-9/+12
| | | | | | | | | | | | | | | | | | Don't hold mPidsSelfLocked lock when calling cleanUpApplicationRecordLocked. Bug: 31463143 Change-Id: I421962cbfd7c466662edcef805c3e27321dc5a98 (cherry picked from commit b59e73613bbaf252e2ee5892d7a95cbbd7d40b26)
| * DO NOT MERGE: Fix vulnerability where large GPS XTRA data can beDavid Christie2016-08-251-2/+19
| | | | | | | | | | | | | | | | | | injected. -Can potentially crash system with OOM. Bug: 29555864 Change-Id: I7157f48dddf148a9bcab029cf12e26a58d8054f4 (cherry picked from commit 5439aabb165b5a760d1e580016bf1d6fd963cb65)
| * Bind fingerprint when we start authentication - DO NOT MERGEJim Miller2016-08-251-9/+16
| | | | | | | | | | | | | | | | | | | | | | This fixes a bug where it was possible to authenticate the wrong user. We now bind the userId when we start authentication and confirm it when authentication completes. Fixes bug 30744668 Change-Id: I346d92c301414ed81e11fa9c171584c7ae4341c2 (cherry picked from commit b6f4b48df273d210d13631b4c2426482feb40c97)
| * Fix vulnerability in LockSettings serviceJim Miller2016-08-251-0/+6
| | | | | | | | | | | | | | Fixes bug 30003944 Change-Id: I8700d4424c6186c8d5e71d2fdede0223ad86904d (cherry picked from commit 2d71384a139ae27cbc7b57f06662bf6ee2010f2b)
| * DO NOT MERGE: Clean up when recycling a pid with a pending launchAmith Yamasani2016-08-252-4/+22
| | | | | | | | | | | | | | | | | | Fix for accidental launch of a broadcast receiver in an incorrect app instance. Bug: 30202481 Change-Id: I8ec8f19c633f3aec8da084dab5fd5b312443336f (cherry picked from commit d1eeb5b7b489d47994a71510f1ed5b97b8e32a7a)
* | batteryservice: Remove remnants of CAF's HVDCP changesZhao Wei Liew2016-11-081-31/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit ce521ee7de0bf1264abe0cd399f59e505ff28005 removed the usage of isHvdcpPresent(), but did not remove the function itself. Remove isHvdcpPresent() as clean-up. This essentially reverts the rest of the following commits: 64deb448b8ac50587bc90e3506e639e4e1a066ed batteryservice: Avoid exception if device doesn't support HVDCP 4df4f532741d4aaa848d70c2465765a9a8b19d87 batteryservice: add support for charger led blinking Change-Id: Ie39c11ee9811f6af84a55ed85b72123cc449c735
* | Fix zen priority mode vibration logic.Danny Baumann2016-11-071-1/+1
| | | | | | | | | | | | | | Even if zen priority mode is active and vibration is allowed, we still want to keep notifications with score below the threshold silent. Change-Id: I0a60bbd787e7f98f721129902054ab37fb9f58a7
* | services: battery: Don't blink with an hvdcp chargerDiogo Ferreira2016-11-041-8/+2
| | | | | | | | | | | | | | | | | | | | | | Quick charging doesn't really turn the device into a ticking time bomb so there is no use in frantically blinking the led while charging. This is a partial revert of the lights changes in a qualcomm commit (ec43b6d83). Change-Id: I42fdaa4a0af1bfa96c598b4209cbe9936d0de35d Ticket: MARMITE-441
* | Support enforcing a minimum delay between notification sounds of an app.Danny Baumann2016-10-202-1/+71
| | | | | | | | | | | | Useful e.g. for messenger apps. Change-Id: If8e8cc9e2f02d70537c1f9dc14f22bbd0ec1e9a6
* | (Optionally) allow vibration during priority zen mode.Danny Baumann2016-10-192-15/+51
| | | | | | | | Change-Id: I6fb81c5898fbfe9e89a4af3fdc042266c8a9be6c
* | Fix volume keys wakeup status handlingGabriele M2016-10-081-4/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | The same status flag is used for the three different volume keys, however nothing prevents users from pressing multiple keys at the same time. This allows to set the status flag with one volume key and clear it with the other volume key. Use one flag per key so that we never end up in an inconsistent state. This fixes the seldom power button issues that happen when the "volume wake" feature is enabled. Change-Id: I08f5f9ff696bef3dd840cff97d570e44ebe03e4e
* | Merge tag 'android-6.0.1_r72' into HEADJessica Wagantall2016-10-065-15/+63
|\ \ | | | | | | | | | | | | | | | | | | Android 6.0.1 Release 72 (M4B30X) # gpg: Signature made Tue 04 Oct 2016 09:47:40 AM PDT using DSA key ID 9AB10E78 # gpg: Can't check signature: public key not found
| * | DO NOT MERGE: Fix vulnerability where large GPS XTRA data can beDavid Christie2016-08-261-2/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | injected. -Can potentially crash system with OOM. Bug: 29555864 Change-Id: I7157f48dddf148a9bcab029cf12e26a58d8054f4 (cherry picked from commit 5439aabb165b5a760d1e580016bf1d6fd963cb65)
| * | Bind fingerprint when we start authentication - DO NOT MERGEJim Miller2016-08-261-9/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a bug where it was possible to authenticate the wrong user. We now bind the userId when we start authentication and confirm it when authentication completes. Fixes bug 30744668 Change-Id: I346d92c301414ed81e11fa9c171584c7ae4341c2 (cherry picked from commit b6f4b48df273d210d13631b4c2426482feb40c97)
| * | Fix vulnerability in LockSettings serviceJim Miller2016-08-261-0/+6
| | | | | | | | | | | | | | | | | | | | | Fixes bug 30003944 Change-Id: I8700d4424c6186c8d5e71d2fdede0223ad86904d (cherry picked from commit 2d71384a139ae27cbc7b57f06662bf6ee2010f2b)
| * | DO NOT MERGE: Clean up when recycling a pid with a pending launchAmith Yamasani2016-08-262-4/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | Fix for accidental launch of a broadcast receiver in an incorrect app instance. Bug: 30202481 Change-Id: I8ec8f19c633f3aec8da084dab5fd5b312443336f (cherry picked from commit d1eeb5b7b489d47994a71510f1ed5b97b8e32a7a)
| * | Reduce shell power over user management.Sudheer Shanka2016-08-171-5/+75
| | | | | | | | | | | | | | | | | | | | | | | | Remove MANAGE_USERS permission from shell and whitelist it for some specific functionality. Bug: 29189712 Change-Id: Ifb37448c091af91991964511e3efb1bb4dea1ff3
| * | DO NOT MERGE: Allow apps with CREATE_USERS permission to call UM.getProfiles.Sudheer Shanka2016-08-161-1/+1
| | | | | | | | | | | | | | | | | | | | | Bug: 29189712 Bug: 30317026 Bug: 30235113 Change-Id: Icced9805a56675e86f894c458c4a5a0048fd54c0
| * | DO NOT MERGE Block the user from entering safe boot modeBenjamin Franz2016-08-161-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | Block the user from entering safe boot mode if the DISALLOW_SAFE_BOOT policy is set. Bug: 26251884 Change-Id: I4945d5d676928346c11ea305a5b6a2e1a42e94e6
| * | Check caller's uid before allowing notification policy access.Julia Reynolds2016-08-161-0/+5
| | | | | | | | | | | | | | | Bug: 29421441 Change-Id: I7460268595e932d54660b02007bcd68b95fe8aec
* | | PhoneWindowManager: set focus flags on keyguard panelsRoman Birg2016-09-084-7/+32
| | | | | | | | | | | | | | | | | | | | | Ticket: CYNGNOS-3251 Change-Id: I394514335bdaeafdc7b89918ece1fe3d2794647f Signed-off-by: Roman Birg <roman@cyngn.com>
* | | Merge tag 'android-6.0.1_r66' into HEADJessica Wagantall2016-09-073-1/+13
|\ \ \ | | |/ | |/| | | | | | | | | | | | | Android 6.0.1 release 66 # gpg: Signature made Tue 06 Sep 2016 09:26:45 AM PDT using DSA key ID 9AB10E78 # gpg: Can't check signature: public key not found
| * | DO NOT MERGE: Allow apps with CREATE_USERS permission to call UM.getProfiles.Sudheer Shanka2016-08-011-1/+1
| | | | | | | | | | | | | | | | | | | | | Bug: 29189712 Bug: 30317026 Bug: 30235113 Change-Id: Icced9805a56675e86f894c458c4a5a0048fd54c0
| * | DO NOT MERGE Block the user from entering safe boot modeBenjamin Franz2016-07-211-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | Block the user from entering safe boot mode if the DISALLOW_SAFE_BOOT policy is set. Bug: 26251884 Change-Id: I4945d5d676928346c11ea305a5b6a2e1a42e94e6
| * | Check caller's uid before allowing notification policy access.Julia Reynolds2016-07-211-0/+5
| | | | | | | | | | | | | | | Bug: 29421441 Change-Id: I7460268595e932d54660b02007bcd68b95fe8aec
* | | connectivity-service: fix/improve unique hostnameAlexander Wuerstlein2016-09-021-7/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ConnectivityService should set the net.hostname property to either the current DEVICE_HOSTNAME or android-ANDROID_ID or leave net.hostname unchanged if already set. However, the logic was flawed such that if DEVICE_HOSTNAME was empty but net.hostname was not, net.hostname would always be set to an empty string, leading to DHCP breakage later on. The logic has been fixed, clarified and improved such that: net.hostname will only be changed if it is empty. If net.hostname is empty, it will be set to either (in order): the nonempty value of DEVICE_HOSTNAME, android-ANDROID_ID or android-r-RANDOM_NUMBER. The last option is an addition to have a sensible fallback in case both DEVICE_HOSTNAME and ANDROID_ID are empty. The random number is generated by java.util.Random, because I consider cryptographically strong randomness unnecessary here and think possible blocking in SecureRandom might be undesirable. Thanks to stargo for pointing me to the right place to edit. Thanks to Ethan Chen for his stylistic advice. Change-Id: I603ab4d6a265456bf4fa310939965cfa677fc881
* | | Ensure DHCP requests have nonempty hostnamesAlexander Wuerstlein2016-08-311-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the net.hostname property is empty or not found, Android issues DHCP requests with an empty hostname field (option 12). RFC2132 section 3.14 prescribes a minimum length of 1 byte for the hostname. To fix this, a generic 'android-dhcp' hostname is used as a fallback. Change-Id: I7a92e7295f72b3255e4fba6498fb4039906eb702
* | | Prevent invocation of startNavigating() when GPS is offHarikrishnan Hariharan2016-08-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | When system comes back from idle state, GpsLocationProvider invokes startNavigating() even when GPS is turned off in settings. Change-Id: Ie6dbf60a743cce429ab83876a3cb80f7e4b0e0f6 CRs-Fixed: 1022372
* | | services: core: use proper tags when loggingAlexander Martinz2016-08-211-5/+5
| | | | | | | | | | | | | | | Change-Id: Idbcd94ae8004352c5241fc81ac9595173001a58d Signed-off-by: Alexander Martinz <eviscerationls@gmail.com>
* | | Ensure packages on adopted media do not move when updatedSam Mortimer2016-08-181-1/+31
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Packages not installed with PackageInstaller.Session that are moved to adopted storage via android storage settings will get moved back to private internal storage when the package is later updated. This causes the app to lose it's data (and leaves the data dir dangling on the original adopted location). play market installs do not have this problem (because they use an installer session) but pretty much every other app install route does. eg adb install and other app stores. Change-Id: I0f606b230460f32310921c75e58ccb5b610268e4
* | | am: Account for time changes when showing recent activitiestao.pei2016-08-141-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [Procedures] 1. Go to Settings->Date&Time Set time backwards, eg. 2016.6.15 -> 2016.6.10 2. Tap recent apps button to show recent activities. There will be no activities shown. Change-Id: Ifd860c0d08fac49f9d3c8eac590b6db9e6afb09d
* | | [2/2] base: cm custom boot dexopt UIAlexander Martinz2016-08-105-78/+35
| | | | | | | | | | | | | | | | | | | | | * Pass app info and number of installed packages to boot message UI * Ui by Asher and Joey, based on Alexander's previous work Change-Id: I9ec9d0cb0e20a9bac73e126f6b6f3965400f05e7
* | | pm: resolver: Don't hold the lock when calling into the resolverDiogo Ferreira2016-08-101-5/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This lock isn't really needed because the proxy will return false if the resolver package doesn't exist or throws a remote exception. Having this lock causes a deadlock between the PM and the app: resolveIntent holds the PackageManagerService#mPackages lock and then tries to lock on PackageMonitor#mLock. Meanwhile, when packages change, LaodedApk holds onto the PackageMonitor#mLock and then tries to query the intent services and tries to lock on PackageManagerService#mPackages. Relevant traces below: "Binder_4" prio=5 tid=60 Blocked | group="main" sCount=1 dsCount=0 obj=0x136f00a0 self=0x7f743d2a00 | sysTid=949 nice=0 cgrp=default sched=0/0 handle=0x7f74b93440 | state=S schedstat=( 1032333944 663457790 2968 ) utm=74 stm=29 core=3 HZ=100 | stack=0x7f74a97000-0x7f74a99000 stackSize=1013KB | held mutexes= at com.android.server.ServiceWatcher.getBinder(ServiceWatcher.java:368) - waiting to lock <0x083e77c9> (a java.lang.Object) held by thread 9 at org.cyanogenmod.platform.internal.AppSuggestProviderProxy.getService(AppSuggestProviderProxy.java:68) at org.cyanogenmod.platform.internal.AppSuggestProviderProxy.handles(AppSuggestProviderProxy.java:73) at org.cyanogenmod.platform.internal.AppSuggestManagerService$1.handles(AppSuggestManagerService.java:50) at cyanogenmod.app.suggest.AppSuggestManager.handles(AppSuggestManager.java:101) at com.android.server.pm.PackageManagerService.shouldIncludeResolveActivity(PackageManagerService.java:4704) - locked <0x0183dd64> (a android.util.ArrayMap) at com.android.server.pm.PackageManagerService.chooseBestActivity(PackageManagerService.java:4430) at com.android.server.pm.PackageManagerService.resolveIntent(PackageManagerService.java:4353) at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:628) at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:2754) at android.os.Binder.execTransact(Binder.java:453) "android.bg" prio=5 tid=9 Blocked | group="main" sCount=1 dsCount=0 obj=0x12c04b80 self=0x7f84a7d800 | sysTid=766 nice=10 cgrp=bg_non_interactive sched=0/0 handle=0x7f89b3f440 | state=S schedstat=( 1237112536 3291977271 2848 ) utm=62 stm=61 core=2 HZ=100 | stack=0x7f89a3d000-0x7f89a3f000 stackSize=1037KB | held mutexes= at com.android.server.pm.PackageManagerService.queryIntentServices(PackageManagerService.java:5405) - waiting to lock <0x0183dd64> (a android.util.ArrayMap) held by thread 60 at android.app.ApplicationPackageManager.queryIntentServicesAsUser(ApplicationPackageManager.java:731) at com.android.server.ServiceWatcher.bindBestPackageLocked(ServiceWatcher.java:167) at com.android.server.ServiceWatcher.-wrap0(ServiceWatcher.java:-1) at com.android.server.ServiceWatcher$1.onPackageChanged(ServiceWatcher.java:321) - locked <0x083e77c9> (a java.lang.Object) at com.android.internal.content.PackageMonitor.onReceive(PackageMonitor.java:352) at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:882) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.os.HandlerThread.run(HandlerThread.java:61) Change-Id: Id4775ca4d12b6cf42bea97bd74e4c38d591a1cf3
* | | framework: extend provision check to SEARCH intentsRoman Birg2016-08-081-0/+2
| | | | | | | | | | | | | | | | | | | | | TIcket: CYNGNOS-3242 Change-Id: I61ce295737471ca9bb59f45c616d626bbc4f7784 Signed-off-by: Roman Birg <roman@cyngn.com>
* | | fw: enforce android.permission.PREVENT_SYSTEM_KEYS in system serverScott Mertz2016-08-052-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since privateFlags can be accessed and modified via reflection due to change 5d927c2d8e, the prevent system keys or prevent power keys flag can be set and deployed without ever calling setPrivateFlags directly. Move enforcing to system server to prevent app tampering. TICKET: CYAN-7921 (open source JIRA) Found by Maciej Krysztofiak Change-Id: I53c2804d0283692036f5cc95e6ad57821bc0655a
* | | framework: don't allow assist activities while not provisionedRoman Birg2016-08-031-0/+14
| | | | | | | | | | | | | | | | | | | | | Ticket: CYNGNOS-3233 Change-Id: I40dae6b6fd1da497024965469fea0adc78a661c3 Signed-off-by: Roman Birg <roman@cyngn.com>
* | | am: Notify zygote of font change in ActivityManagerServiced34d2016-08-021-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | With the theme service being moved to its own context, it can no longer set system properties so have ActivityManagerService take care of this when updating the configuration. Change-Id: Ia5cbbf921c7c716631db1e34f5e2b04c5d814328
* | | Merge tag 'android-6.0.1_r61' into HEADJessica Wagantall2016-08-025-28/+355
|\ \ \ | |/ / | | | | | | | | | | | | Android 6.0.1 Release 61 (MOB30Z) Change-Id: Ib003ccb606e0d77209291b757ea36399d3b65814
| * | Reduce shell power over user management.Sudheer Shanka2016-06-241-5/+75
| | | | | | | | | | | | | | | | | | | | | | | | Remove MANAGE_USERS permission from shell and whitelist it for some specific functionality. Bug: 29189712 Change-Id: Ifb37448c091af91991964511e3efb1bb4dea1ff3
| * | DO NOT MERGE Disable app pinning when emergency call button pressedHall Liu2016-06-242-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also disables app pinning when the "return to call" button is pressed and brings up the in-call screen when app pinning is stopped if there is an existing call. Combination of ag/1091397 and ag/1085584 adapted for MNC. Bug: 28558307 Bug: 28761672 Change-Id: I82ec4042bff387c845ce571b197a4a86e1dd5ec8