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

Commit 609923e5 authored by Gianmarco Reverberi's avatar Gianmarco Reverberi Committed by Steve Kondik
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 2d4b7a2c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@
    <java-symbol type="string" name="theme_install_error_message" />
    <!-- Package Manager -->
    <java-symbol type="array" name="config_disabledComponents" />
    <java-symbol type="array" name="config_forceEnabledComponents" />

    <!-- Last app switch animations -->
    <java-symbol type="anim" name="last_app_in" />
+4 −0
Original line number Diff line number Diff line
@@ -2293,6 +2293,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>

+26 −0
Original line number Diff line number Diff line
@@ -569,6 +569,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>
@@ -1896,9 +1898,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());
@@ -1910,6 +1914,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.
            mIsUpgrade = !Build.FINGERPRINT.equals(mSettings.mFingerprint);
@@ -12885,6 +12904,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);
    }
@@ -12899,6 +12924,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(