diff options
author | Gianmarco Reverberi <gianmarco.reverberi@gmail.com> | 2015-03-16 20:02:15 +0100 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-10-26 16:09:32 -0700 |
commit | 034b71e3970196eaa4e9f8b435f3a0e7ca3957db (patch) | |
tree | 50a2687253158f7bd65efaf88737c9f20eb77f9f | |
parent | 232fd7efedd0efdba35991bdd6b9ca2358b93fb1 (diff) | |
download | frameworks_base-034b71e3970196eaa4e9f8b435f3a0e7ca3957db.zip frameworks_base-034b71e3970196eaa4e9f8b435f3a0e7ca3957db.tar.gz frameworks_base-034b71e3970196eaa4e9f8b435f3a0e7ca3957db.tar.bz2 |
SystemUpdateService: enable service but lock its receivers [1/2]
Added a check for ensure that disabled components are not
re-enabled at runtime
Added code for forcing enable of previously disabled components
Change-Id: Icfcfa26ccb85028d32edbb5cdb3dd7cdae85b720
-rw-r--r-- | core/res/res/values/cm_symbols.xml | 4 | ||||
-rwxr-xr-x | core/res/res/values/config.xml | 4 | ||||
-rwxr-xr-x | core/res/res/values/symbols.xml | 3 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 26 |
4 files changed, 34 insertions, 3 deletions
diff --git a/core/res/res/values/cm_symbols.xml b/core/res/res/values/cm_symbols.xml index edcd752..3ddc5a3 100644 --- a/core/res/res/values/cm_symbols.xml +++ b/core/res/res/values/cm_symbols.xml @@ -36,6 +36,10 @@ <!-- Proximity check on screen on default --> <java-symbol type="bool" name="config_proximityCheckOnWakeEnabledByDefault" /> + <!-- Package Manager --> + <java-symbol type="array" name="config_disabledComponents" /> + <java-symbol type="array" name="config_forceEnabledComponents" /> + <!-- LiveDisplay --> <java-symbol type="string" name="live_display_title" /> <java-symbol type="string" name="live_display_hint" /> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 1fdea79..87dabb0 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2430,6 +2430,10 @@ <string-array name="config_disabledComponents" translatable="false"> </string-array> + <!-- The list of components which should be forced to be enabled. --> + <string-array name="config_forceEnabledComponents" translatable="false"> + </string-array> + <!-- Boolean to enable stk functionality on Samsung phones --> <bool name="config_samsung_stk">false</bool> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index d10e6d0..d0cb27e 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2430,9 +2430,6 @@ <java-symbol type="string" name="adb_both_active_notification_title" /> <java-symbol type="string" name="adb_active_generic_notification_message" /> - <!-- Package Manager --> - <java-symbol type="array" name="config_disabledComponents" /> - <!-- Last app switch animations --> <java-symbol type="anim" name="last_app_in" /> <java-symbol type="anim" name="last_app_out" /> diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bd6495f..d4f6f45 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -883,6 +883,8 @@ public class PackageManagerService extends IPackageManager.Stub { private ThemeConfig mBootThemeConfig; + ArrayList<ComponentName> mDisabledComponentsList; + // Set of pending broadcasts for aggregating enable/disable of components. static class PendingPackageBroadcasts { // for each user id, a map of <package name -> components within that package> @@ -2369,9 +2371,11 @@ public class PackageManagerService extends IPackageManager.Stub { } // Disable components marked for disabling at build-time + mDisabledComponentsList = new ArrayList<ComponentName>(); for (String name : mContext.getResources().getStringArray( com.android.internal.R.array.config_disabledComponents)) { ComponentName cn = ComponentName.unflattenFromString(name); + mDisabledComponentsList.add(cn); Slog.v(TAG, "Disabling " + name); String className = cn.getClassName(); PackageSetting pkgSetting = mSettings.mPackages.get(cn.getPackageName()); @@ -2383,6 +2387,21 @@ public class PackageManagerService extends IPackageManager.Stub { pkgSetting.disableComponentLPw(className, UserHandle.USER_OWNER); } + // Enable components marked for forced-enable at build-time + for (String name : mContext.getResources().getStringArray( + com.android.internal.R.array.config_forceEnabledComponents)) { + ComponentName cn = ComponentName.unflattenFromString(name); + Slog.v(TAG, "Enabling " + name); + String className = cn.getClassName(); + PackageSetting pkgSetting = mSettings.mPackages.get(cn.getPackageName()); + if (pkgSetting == null || pkgSetting.pkg == null + || !pkgSetting.pkg.hasComponentClassName(className)) { + Slog.w(TAG, "Unable to enable " + name); + continue; + } + pkgSetting.enableComponentLPw(className, UserHandle.USER_OWNER); + } + // If this is first boot after an OTA, and a normal boot, then // we need to clear code cache directories. if (mIsUpgrade && !onlyCore) { @@ -14967,6 +14986,12 @@ public class PackageManagerService extends IPackageManager.Stub { public void setComponentEnabledSetting(ComponentName componentName, int newState, int flags, int userId) { if (!sUserManager.exists(userId)) return; + // Don't allow to enable components marked for disabling at build-time + if (mDisabledComponentsList.contains(componentName)) { + Slog.d(TAG, "Ignoring attempt to set enabled state of disabled component " + + componentName.flattenToString()); + return; + } setEnabledSetting(componentName.getPackageName(), componentName.getClassName(), newState, flags, userId, null); } @@ -14981,6 +15006,7 @@ public class PackageManagerService extends IPackageManager.Stub { throw new IllegalArgumentException("Invalid new component state: " + newState); } + PackageSetting pkgSetting; final int uid = Binder.getCallingUid(); final int permission = mContext.checkCallingOrSelfPermission( |