Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e87dbf6e authored by Gianmarco Reverberi's avatar Gianmarco Reverberi Committed by Michael Bestas
Browse files

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
parent 8356898b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1475,6 +1475,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>

    <!-- Device supports LED flashlight -->
    <bool name="config_enableTorch">false</bool>

+1 −0
Original line number Diff line number Diff line
@@ -1909,6 +1909,7 @@

  <!-- Package Manager -->
  <java-symbol type="array" name="config_disabledComponents" />
  <java-symbol type="array" name="config_forceEnabledComponents" />

  <!-- LED flashlight -->
  <java-symbol type="bool" name="config_enableTorch" />
+26 −0
Original line number Diff line number Diff line
@@ -523,6 +523,8 @@ public class PackageManagerService extends IPackageManager.Stub {
    boolean mPreLaunchCheckPackagesReplaced = false;
    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>
@@ -1623,9 +1625,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());
@@ -1637,6 +1641,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);
            }
            // can downgrade to reader
            mSettings.writeLPr();
@@ -11270,6 +11289,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);
    }
@@ -11284,6 +11309,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(