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

Commit 2a880312 authored by Jeff Davidson's avatar Jeff Davidson
Browse files

Default permissions for carrier apps.

Grant permissions in the PHONE and LOCATION buckets to default carrier
apps as defined by the telephony stack. Provide a system API to grant
default permissions for carrier apps, as the set of apps may change
when a new SIM is inserted.

Since the phone process is separate from the system process, we need
to allow for binder calls to these APIs.

Also fix a log tag that is too long (android.util.Log drops messages
silently if the tag is > 23 characters).

Bug: 21696731
Change-Id: I98ca0c49c69f621f835ba57c1fd0505f2cec0d0d
parent 0b50e56c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ LOCAL_SRC_FILES += \
	core/java/android/content/pm/IPackageManager.aidl \
	core/java/android/content/pm/IPackageMoveObserver.aidl \
	core/java/android/content/pm/IPackageStatsObserver.aidl \
	core/java/android/content/pm/IPackagesProvider.aidl \
	core/java/android/content/pm/IOnPermissionsChangeListener.aidl \
	core/java/android/database/IContentObserver.aidl \
	core/java/android/hardware/ICameraService.aidl \
+12 −8
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.IPackagesProvider;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IntentFilterVerificationInfo;
import android.content.pm.InstrumentationInfo;
@@ -494,4 +495,7 @@ interface IPackageManager {

    void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);
    void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener);

    void grantDefaultPermissions(int userId);
    void setCarrierAppPackagesProvider(in IPackagesProvider provider);
}
+22 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.content.pm;

/** {@hide} */
interface IPackagesProvider {
    String[] getPackages(int userId);
}
+3 −1
Original line number Diff line number Diff line
@@ -1848,7 +1848,9 @@
         2. Pre-installed
         3. In the default state (enabled but not explicitly)
         And SubscriptionInfoUpdater undoes this and marks the app enabled when a SIM is inserted
         that marks the app as carrier privileged. -->
         that marks the app as carrier privileged. It also grants the app default permissions
         for Phone and Location. As such, apps MUST only ever be added to this list if they
         obtain user consent to access their location through other means. -->
    <string-array name="config_disabledUntilUsedPreinstalledCarrierApps" translatable="false" />

    <!-- The list of classes that should be added to the notification ranking pipline.
+22 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ import static android.os.Process.FIRST_APPLICATION_UID;
 * have phone related permission by default.
 */
final class DefaultPermissionGrantPolicy {
    private static final String TAG = "DefaultPermissionGrantPolicy";
    private static final String TAG = "DefaultPermGrantPolicy"; // must be <= 23 chars
    private static final boolean DEBUG = false;

    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
@@ -133,6 +133,7 @@ final class DefaultPermissionGrantPolicy {
    private PackagesProvider mImePackagesProvider;
    private PackagesProvider mLocationPackagesProvider;
    private PackagesProvider mVoiceInteractionPackagesProvider;
    private PackagesProvider mCarrierAppPackagesProvider;

    public DefaultPermissionGrantPolicy(PackageManagerService service) {
        mService = service;
@@ -150,6 +151,10 @@ final class DefaultPermissionGrantPolicy {
        mVoiceInteractionPackagesProvider = provider;
    }

    public void setCarrierAppPackagesProviderLPw(PackagesProvider provider) {
        mCarrierAppPackagesProvider = provider;
    }

    public void grantDefaultPermissions(int userId) {
        grantPermissionsToSysComponentsAndPrivApps(userId);
        grantDefaultSystemHandlerPermissions(userId);
@@ -193,11 +198,13 @@ final class DefaultPermissionGrantPolicy {
        final PackagesProvider imePackagesProvider;
        final PackagesProvider locationPackagesProvider;
        final PackagesProvider voiceInteractionPackagesProvider;
        final PackagesProvider carrierAppPackagesProvider;

        synchronized (mService.mPackages) {
            imePackagesProvider = mImePackagesProvider;
            locationPackagesProvider = mLocationPackagesProvider;
            voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider;
            carrierAppPackagesProvider = mCarrierAppPackagesProvider;
        }

        String[] imePackageNames = (imePackagesProvider != null)
@@ -206,6 +213,8 @@ final class DefaultPermissionGrantPolicy {
                ? voiceInteractionPackagesProvider.getPackages(userId) : null;
        String[] locationPackageNames = (locationPackagesProvider != null)
                ? locationPackagesProvider.getPackages(userId) : null;
        String[] carrierAppPackageNames = (carrierAppPackagesProvider != null)
                ? carrierAppPackagesProvider.getPackages(userId) : null;

        synchronized (mService.mPackages) {
            // Installers
@@ -382,6 +391,18 @@ final class DefaultPermissionGrantPolicy {
                    }
                }
            }

            // Carrier apps
            if (carrierAppPackageNames != null) {
                for (String packageName : carrierAppPackageNames) {
                    PackageParser.Package carrierPackage = getSystemPackageLPr(packageName);
                    if (carrierPackage != null
                            && doesPackageSupportRuntimePermissions(carrierPackage)) {
                        grantRuntimePermissionsLPw(carrierPackage, PHONE_PERMISSIONS, userId);
                        grantRuntimePermissionsLPw(carrierPackage, LOCATION_PERMISSIONS, userId);
                    }
                }
            }
        }
    }

Loading