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

Commit 3c76dc89 authored by Svet Ganov's avatar Svet Ganov
Browse files

Grant default permissons to the default SMS, Phone, Browser app.

bug:22104986

Change-Id: Idcbe85c43f995bdf37e7291c9384eb181560872d
parent a7269524
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -79,8 +79,10 @@ public final class CarrierAppUtils {
        if (candidates == null || candidates.isEmpty()) {
            return;
        }

        List<String> enabledCarrierPackages = new ArrayList<>();

        try {
            boolean anyAppsEnabled = false;
            for (ApplicationInfo ai : candidates) {
                String packageName = ai.packageName;
                boolean hasPrivileges =
@@ -92,7 +94,7 @@ public final class CarrierAppUtils {
                                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
                        Slog.i(TAG, "Update state(" + packageName + "): ENABLED for user "
                                + userId);
                        anyAppsEnabled = true;
                        enabledCarrierPackages.add(ai.packageName);
                        packageManager.setApplicationEnabledSetting(packageName,
                                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, userId,
                                callingPackage);
@@ -100,7 +102,7 @@ public final class CarrierAppUtils {
                            PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
                        // If we're already enabled, don't bother re-enabling, but treat the app as
                        // enabled so that we re-grant default permissions in case they were lost.
                        anyAppsEnabled = true;
                        enabledCarrierPackages.add(ai.packageName);
                    }
                } else if (!hasPrivileges
                        && ai.enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
@@ -112,10 +114,12 @@ public final class CarrierAppUtils {
                }
            }

            if (anyAppsEnabled) {
            if (!enabledCarrierPackages.isEmpty()) {
                // Since we enabled at least one app, ensure we grant default permissions to those
                // apps.
                packageManager.grantDefaultPermissions(userId);
                String[] packageNames = new String[enabledCarrierPackages.size()];
                enabledCarrierPackages.toArray(packageNames);
                packageManager.grantDefaultPermissionsToEnabledCarrierApps(packageNames, userId);
            }
        } catch (RemoteException e) {
            Slog.w(TAG, "Could not reach PackageManager", e);
+0 −28
Original line number Diff line number Diff line
@@ -27,16 +27,13 @@ import android.content.ContentValues;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.IPackagesProvider;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.IRemoteCallback;
import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Settings;
@@ -126,31 +123,6 @@ public class SubscriptionInfoUpdater extends Handler {
    }

    private void initializeCarrierApps() {
        // Let the PackageManager query carrier apps as they get certain permissions granted by
        // default.
        try {
            mPackageManager.setCarrierAppPackagesProvider(
                    new IPackagesProvider.Stub() {
                        @Override
                        public String[] getPackages(int userId) {
                            List<ApplicationInfo> defaultApps =
                                    CarrierAppUtils.getDefaultCarrierApps(mPackageManager,
                                            TelephonyManager.getDefault(), userId);
                            if (defaultApps == null) {
                                return null;
                            }
                            int count = defaultApps.size();
                            String[] packages = new String[count];
                            for (int i = 0; i < count; i++) {
                                packages[i] = defaultApps.get(i).packageName;
                            }
                            return packages;
                        }
                    });
        } catch (RemoteException e) {
            logd("Couldn't contact PackageManager: " + e.getMessage());
        }

        // Initialize carrier apps:
        // -Now (on system startup)
        // -Whenever new carrier privilege rules might change (new SIM is loaded)
+33 −12
Original line number Diff line number Diff line
@@ -60,7 +60,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(Mockito.any(String[].class),
                        Mockito.anyInt());
        Mockito.verifyNoMoreInteractions(mTelephonyManager);
    }

@@ -74,7 +76,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
        Mockito.verifyNoMoreInteractions(mTelephonyManager);
    }

@@ -94,7 +98,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has privileges, but was disabled - should do nothing. */
@@ -112,7 +118,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has privileges, and is already enabled - should only grant permissions. */
@@ -130,7 +138,8 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID);
        Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
                new String[] {appInfo.packageName}, USER_ID);
    }

    /** Configured app has privileges, and is in the default state - should enable. */
@@ -148,7 +157,8 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager).setApplicationEnabledSetting(
                CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID,
                CALLING_PACKAGE);
        Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID);
        Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
                new String[] {appInfo.packageName}, USER_ID);
    }

    /** Configured app has privileges, and is disabled until used - should enable. */
@@ -167,7 +177,8 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager).setApplicationEnabledSetting(
                CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0, USER_ID,
                CALLING_PACKAGE);
        Mockito.verify(mPackageManager).grantDefaultPermissions(USER_ID);
        Mockito.verify(mPackageManager).grantDefaultPermissionsToEnabledCarrierApps(
                new String[] {appInfo.packageName}, USER_ID);
    }

    /** Configured app has no privileges, and was disabled by the user - should do nothing. */
@@ -185,7 +196,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has no privileges, and was disabled - should do nothing. */
@@ -203,7 +216,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has no privileges, and is explicitly enabled - should do nothing. */
@@ -221,7 +236,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has no privileges, and is in the default state - should disable until use. */
@@ -239,7 +256,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager).setApplicationEnabledSetting(
                CARRIER_APP, PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED, 0, USER_ID,
                CALLING_PACKAGE);
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }

    /** Configured app has no privileges, and is disabled until used - should do nothing. */
@@ -258,7 +277,9 @@ public class CarrierAppUtilsTest extends InstrumentationTestCase {
        Mockito.verify(mPackageManager, Mockito.never()).setApplicationEnabledSetting(
                Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt(), Mockito.anyInt(),
                Mockito.anyString());
        Mockito.verify(mPackageManager, Mockito.never()).grantDefaultPermissions(Mockito.anyInt());
        Mockito.verify(mPackageManager, Mockito.never())
                .grantDefaultPermissionsToEnabledCarrierApps(
                        Mockito.any(String[].class), Mockito.anyInt());
    }
}