summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGianmarco Reverberi <gianmarco.reverberi@gmail.com>2015-03-16 20:02:15 +0100
committerSteve Kondik <steve@cyngn.com>2015-10-26 16:09:32 -0700
commit034b71e3970196eaa4e9f8b435f3a0e7ca3957db (patch)
tree50a2687253158f7bd65efaf88737c9f20eb77f9f
parent232fd7efedd0efdba35991bdd6b9ca2358b93fb1 (diff)
downloadframeworks_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.xml4
-rwxr-xr-xcore/res/res/values/config.xml4
-rwxr-xr-xcore/res/res/values/symbols.xml3
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java26
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(