Loading Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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 \ Loading core/java/android/content/pm/IPackageManager.aidl +12 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -500,4 +501,7 @@ interface IPackageManager { void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void grantDefaultPermissions(int userId); void setCarrierAppPackagesProvider(in IPackagesProvider provider); } core/java/android/content/pm/IPackagesProvider.aidl 0 → 100644 +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); } core/res/res/values/config.xml +3 −1 Original line number Diff line number Diff line Loading @@ -1851,7 +1851,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. Loading services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +22 −1 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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) Loading @@ -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 Loading Loading @@ -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 Loading
Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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 \ Loading
core/java/android/content/pm/IPackageManager.aidl +12 −8 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -500,4 +501,7 @@ interface IPackageManager { void addOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void removeOnPermissionsChangeListener(in IOnPermissionsChangeListener listener); void grantDefaultPermissions(int userId); void setCarrierAppPackagesProvider(in IPackagesProvider provider); }
core/java/android/content/pm/IPackagesProvider.aidl 0 → 100644 +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); }
core/res/res/values/config.xml +3 −1 Original line number Diff line number Diff line Loading @@ -1851,7 +1851,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. Loading
services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +22 −1 Original line number Diff line number Diff line Loading @@ -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"; Loading Loading @@ -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; Loading @@ -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); Loading Loading @@ -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) Loading @@ -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 Loading Loading @@ -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