summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java12
-rw-r--r--services/core/java/com/android/server/MountService.java12
-rw-r--r--services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java40
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java18
-rw-r--r--services/core/java/com/android/server/telecom/TelecomLoaderService.java87
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java8
6 files changed, 159 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 76d2258..0b610ae 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -2378,14 +2378,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
if (!accept) {
- // Tell the NetworkAgent that the network does not have Internet access (because that's
- // what we just told the user). This will hint to Wi-Fi not to autojoin this network in
- // the future. We do this now because NetworkMonitor might not yet have finished
- // validating and thus we might not yet have received an EVENT_NETWORK_TESTED.
- nai.asyncChannel.sendMessage(NetworkAgent.CMD_REPORT_NETWORK_STATUS,
- NetworkAgent.INVALID_NETWORK, 0, null);
- // TODO: Tear the network down once we have determined how to tell WifiStateMachine not
- // to reconnect to it immediately. http://b/20739299
+ // Tell the NetworkAgent to not automatically reconnect to the network.
+ nai.asyncChannel.sendMessage(NetworkAgent.CMD_PREVENT_AUTOMATIC_RECONNECT);
+ // Teardown the nework.
+ teardownUnneededNetwork(nai);
}
}
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 857394f..6ab2fd7 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -69,7 +69,6 @@ import android.os.storage.IMountServiceListener;
import android.os.storage.IMountShutdownObserver;
import android.os.storage.IObbActionListener;
import android.os.storage.MountServiceInternal;
-import android.os.storage.MountServiceInternal.ExternalStorageMountPolicy;
import android.os.storage.OnObbStateChangeListener;
import android.os.storage.StorageManager;
import android.os.storage.StorageResultCode;
@@ -809,7 +808,7 @@ class MountService extends IMountService.Stub
synchronized (mVolumes) {
for (int i = 0; i < mVolumes.size(); i++) {
final VolumeInfo vol = mVolumes.valueAt(i);
- if (vol.isVisibleToUser(userId) && vol.isMountedReadable()) {
+ if (vol.isVisibleForRead(userId) && vol.isMountedReadable()) {
final StorageVolume userVol = vol.buildStorageVolume(mContext, userId, false);
mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget();
@@ -1252,7 +1251,7 @@ class MountService extends IMountService.Stub
// started after this point will trigger additional
// user-specific broadcasts.
for (int userId : mStartedUsers) {
- if (vol.isVisibleToUser(userId)) {
+ if (vol.isVisibleForRead(userId)) {
final StorageVolume userVol = vol.buildStorageVolume(mContext, userId, false);
mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget();
@@ -2610,13 +2609,14 @@ class MountService extends IMountService.Stub
}
@Override
- public StorageVolume[] getVolumeList(int uid, String packageName) {
+ public StorageVolume[] getVolumeList(int uid, String packageName, int flags) {
+ final boolean forWrite = (flags & StorageManager.FLAG_FOR_WRITE) != 0;
+
final ArrayList<StorageVolume> res = new ArrayList<>();
boolean foundPrimary = false;
final int userId = UserHandle.getUserId(uid);
final boolean reportUnmounted;
-
final long identity = Binder.clearCallingIdentity();
try {
reportUnmounted = !mMountServiceInternal.hasExternalStorage(
@@ -2628,7 +2628,7 @@ class MountService extends IMountService.Stub
synchronized (mLock) {
for (int i = 0; i < mVolumes.size(); i++) {
final VolumeInfo vol = mVolumes.valueAt(i);
- if (vol.isVisibleToUser(userId)) {
+ if (forWrite ? vol.isVisibleForWrite(userId) : vol.isVisibleForRead(userId)) {
final StorageVolume userVol = vol.buildStorageVolume(mContext, userId,
reportUnmounted);
if (vol.isPrimary()) {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index 0d1d1ea..94011fd 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -125,6 +125,7 @@ final class DefaultPermissionGrantPolicy {
private PackagesProvider mVoiceInteractionPackagesProvider;
private PackagesProvider mSmsAppPackagesProvider;
private PackagesProvider mDialerAppPackagesProvider;
+ private PackagesProvider mSimCallManagerPackagesProvider;
private SyncAdapterPackagesProvider mSyncAdapterPackagesProvider;
public DefaultPermissionGrantPolicy(PackageManagerService service) {
@@ -151,6 +152,10 @@ final class DefaultPermissionGrantPolicy {
mDialerAppPackagesProvider = provider;
}
+ public void setSimCallManagerPackagesProviderLPw(PackagesProvider provider) {
+ mSimCallManagerPackagesProvider = provider;
+ }
+
public void setSyncAdapterPackagesProviderLPw(SyncAdapterPackagesProvider provider) {
mSyncAdapterPackagesProvider = provider;
}
@@ -201,6 +206,7 @@ final class DefaultPermissionGrantPolicy {
final PackagesProvider voiceInteractionPackagesProvider;
final PackagesProvider smsAppPackagesProvider;
final PackagesProvider dialerAppPackagesProvider;
+ final PackagesProvider simCallManagerPackagesProvider;
final SyncAdapterPackagesProvider syncAdapterPackagesProvider;
synchronized (mService.mPackages) {
@@ -209,6 +215,7 @@ final class DefaultPermissionGrantPolicy {
voiceInteractionPackagesProvider = mVoiceInteractionPackagesProvider;
smsAppPackagesProvider = mSmsAppPackagesProvider;
dialerAppPackagesProvider = mDialerAppPackagesProvider;
+ simCallManagerPackagesProvider = mSimCallManagerPackagesProvider;
syncAdapterPackagesProvider = mSyncAdapterPackagesProvider;
}
@@ -222,6 +229,8 @@ final class DefaultPermissionGrantPolicy {
? smsAppPackagesProvider.getPackages(userId) : null;
String[] dialerAppPackageNames = (dialerAppPackagesProvider != null)
? dialerAppPackagesProvider.getPackages(userId) : null;
+ String[] simCallManagerPackageNames = (simCallManagerPackagesProvider != null)
+ ? simCallManagerPackagesProvider.getPackages(userId) : null;
String[] contactsSyncAdapterPackages = (syncAdapterPackagesProvider != null) ?
syncAdapterPackagesProvider.getPackages(ContactsContract.AUTHORITY, userId) : null;
String[] calendarSyncAdapterPackages = (syncAdapterPackagesProvider != null) ?
@@ -313,6 +322,18 @@ final class DefaultPermissionGrantPolicy {
}
}
+ // Sim call manager
+ if (simCallManagerPackageNames != null) {
+ for (String simCallManagerPackageName : simCallManagerPackageNames) {
+ PackageParser.Package simCallManagerPackage =
+ getSystemPackageLPr(simCallManagerPackageName);
+ if (simCallManagerPackage != null) {
+ grantDefaultPermissionsToDefaultSimCallManagerLPr(simCallManagerPackage,
+ userId);
+ }
+ }
+ }
+
// SMS
if (smsAppPackageNames == null) {
Intent smsIntent = new Intent(Intent.ACTION_MAIN);
@@ -590,6 +611,25 @@ final class DefaultPermissionGrantPolicy {
}
}
+ private void grantDefaultPermissionsToDefaultSimCallManagerLPr(
+ PackageParser.Package simCallManagerPackage, int userId) {
+ Log.i(TAG, "Granting permissions to sim call manager for user:" + userId);
+ if (doesPackageSupportRuntimePermissions(simCallManagerPackage)) {
+ grantRuntimePermissionsLPw(simCallManagerPackage, PHONE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(simCallManagerPackage, MICROPHONE_PERMISSIONS, userId);
+ }
+ }
+
+ public void grantDefaultPermissionsToDefaultSimCallManagerLPr(String packageName, int userId) {
+ if (packageName == null) {
+ return;
+ }
+ PackageParser.Package simCallManagerPackage = getPackageLPr(packageName);
+ if (simCallManagerPackage != null) {
+ grantDefaultPermissionsToDefaultSimCallManagerLPr(simCallManagerPackage, userId);
+ }
+ }
+
public void grantDefaultPermissionsToEnabledCarrierAppsLPr(String[] packageNames, int userId) {
Log.i(TAG, "Granting permissions to enabled carrier apps for user:" + userId);
if (packageNames == null) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index a867ca9..98137f8 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -298,7 +298,7 @@ public class PackageManagerService extends IPackageManager.Stub {
private static final boolean DEBUG_DEXOPT = false;
private static final boolean DEBUG_ABI_SELECTION = false;
- static final boolean CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE = Build.IS_DEBUGGABLE;
+ static final boolean CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE = false;
private static final int RADIO_UID = Process.PHONE_UID;
private static final int LOG_UID = Process.LOG_UID;
@@ -3635,8 +3635,6 @@ public class PackageManagerService extends IPackageManager.Stub {
if (getCallingUid() != Process.SYSTEM_UID) {
flagMask &= ~PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
flagValues &= ~PackageManager.FLAG_PERMISSION_SYSTEM_FIXED;
- flagMask &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED;
- flagValues &= ~PackageManager.FLAG_PERMISSION_POLICY_FIXED;
flagMask &= ~PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
flagValues &= ~PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT;
}
@@ -16526,6 +16524,13 @@ public class PackageManagerService extends IPackageManager.Stub {
}
@Override
+ public void setSimCallManagerPackagesProvider(PackagesProvider provider) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.setSimCallManagerPackagesProviderLPw(provider);
+ }
+ }
+
+ @Override
public void setSyncAdapterPackagesprovider(SyncAdapterPackagesProvider provider) {
synchronized (mPackages) {
mDefaultPermissionPolicy.setSyncAdapterPackagesProviderLPw(provider);
@@ -16547,6 +16552,13 @@ public class PackageManagerService extends IPackageManager.Stub {
packageName, userId);
}
}
+ @Override
+ public void grantDefaultPermissionsToDefaultSimCallManager(String packageName, int userId) {
+ synchronized (mPackages) {
+ mDefaultPermissionPolicy.grantDefaultPermissionsToDefaultSimCallManagerLPr(
+ packageName, userId);
+ }
+ }
}
@Override
diff --git a/services/core/java/com/android/server/telecom/TelecomLoaderService.java b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
index c2ce572..f4bd61f 100644
--- a/services/core/java/com/android/server/telecom/TelecomLoaderService.java
+++ b/services/core/java/com/android/server/telecom/TelecomLoaderService.java
@@ -16,9 +16,11 @@
package com.android.server.telecom;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManagerInternal;
import android.database.ContentObserver;
@@ -31,6 +33,9 @@ import android.os.ServiceManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.telecom.DefaultDialerManager;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.CarrierConfigManager;
import android.util.IntArray;
import android.util.Slog;
@@ -39,6 +44,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.telephony.SmsApplication;
import com.android.server.LocalServices;
import com.android.server.SystemService;
+import com.android.server.pm.UserManagerService;
/**
* Starts the telecom component by binding to its ITelecomService implementation. Telecom is setup
@@ -64,7 +70,8 @@ public class TelecomLoaderService extends SystemService {
ServiceManager.addService(Context.TELECOM_SERVICE, service);
synchronized (mLock) {
- if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null) {
+ if (mDefaultSmsAppRequests != null || mDefaultDialerAppRequests != null
+ || mDefaultSimCallManagerRequests != null) {
final PackageManagerInternal packageManagerInternal = LocalServices
.getService(PackageManagerInternal.class);
@@ -95,6 +102,23 @@ public class TelecomLoaderService extends SystemService {
}
}
}
+ if (mDefaultSimCallManagerRequests != null) {
+ TelecomManager telecomManager =
+ (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
+ PhoneAccountHandle phoneAccount = telecomManager.getSimCallManager();
+ if (phoneAccount != null) {
+ final int requestCount = mDefaultSimCallManagerRequests.size();
+ final String packageName =
+ phoneAccount.getComponentName().getPackageName();
+ for (int i = requestCount - 1; i >= 0; i--) {
+ final int userId = mDefaultSimCallManagerRequests.get(i);
+ mDefaultSimCallManagerRequests.remove(i);
+ packageManagerInternal
+ .grantDefaultPermissionsToDefaultSimCallManager(
+ packageName, userId);
+ }
+ }
+ }
}
}
} catch (RemoteException e) {
@@ -122,6 +146,9 @@ public class TelecomLoaderService extends SystemService {
@GuardedBy("mLock")
private IntArray mDefaultDialerAppRequests;
+ @GuardedBy("mLock")
+ private IntArray mDefaultSimCallManagerRequests;
+
private final Context mContext;
@GuardedBy("mLock")
@@ -141,6 +168,7 @@ public class TelecomLoaderService extends SystemService {
public void onBootPhase(int phase) {
if (phase == PHASE_ACTIVITY_MANAGER_READY) {
registerDefaultAppNotifier();
+ registerCarrierConfigChangedReceiver();
connectToTelecom();
}
}
@@ -215,6 +243,30 @@ public class TelecomLoaderService extends SystemService {
return null;
}
});
+
+ // Set a callback for the package manager to query the default sim call manager.
+ packageManagerInternal.setSimCallManagerPackagesProvider(
+ new PackageManagerInternal.PackagesProvider() {
+ @Override
+ public String[] getPackages(int userId) {
+ synchronized (mLock) {
+ if (mServiceConnection == null) {
+ if (mDefaultSimCallManagerRequests == null) {
+ mDefaultSimCallManagerRequests = new IntArray();
+ }
+ mDefaultSimCallManagerRequests.add(userId);
+ return null;
+ }
+ }
+ TelecomManager telecomManager =
+ (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
+ PhoneAccountHandle phoneAccount = telecomManager.getSimCallManager(userId);
+ if (phoneAccount != null) {
+ return new String[]{phoneAccount.getComponentName().getPackageName()};
+ }
+ return null;
+ }
+ });
}
private void registerDefaultAppNotifier() {
@@ -245,6 +297,7 @@ public class TelecomLoaderService extends SystemService {
packageManagerInternal.grantDefaultPermissionsToDefaultDialerApp(
packageName, userId);
}
+ updateSimCallManagerPermissions(packageManagerInternal, userId);
}
}
};
@@ -254,4 +307,36 @@ public class TelecomLoaderService extends SystemService {
mContext.getContentResolver().registerContentObserver(defaultDialerAppUri,
false, contentObserver, UserHandle.USER_ALL);
}
+
+
+ private void registerCarrierConfigChangedReceiver() {
+ final PackageManagerInternal packageManagerInternal = LocalServices.getService(
+ PackageManagerInternal.class);
+ BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
+ for (int userId : UserManagerService.getInstance().getUserIds()) {
+ updateSimCallManagerPermissions(packageManagerInternal, userId);
+ }
+ }
+ }
+ };
+
+ mContext.registerReceiverAsUser(receiver, UserHandle.ALL,
+ new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED), null, null);
+ }
+
+ private void updateSimCallManagerPermissions(PackageManagerInternal packageManagerInternal,
+ int userId) {
+ TelecomManager telecomManager =
+ (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
+ PhoneAccountHandle phoneAccount = telecomManager.getSimCallManager(userId);
+ if (phoneAccount != null) {
+ Slog.i(TAG, "updating sim call manager permissions for userId:" + userId);
+ String packageName = phoneAccount.getComponentName().getPackageName();
+ packageManagerInternal.grantDefaultPermissionsToDefaultSimCallManager(
+ packageName, userId);
+ }
+ }
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 5d05f32..d9afa00 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -4140,6 +4140,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
}
mDeviceOwner.writeOwnerFile();
updateDeviceOwnerLocked();
+ Intent intent = new Intent(DevicePolicyManager.ACTION_DEVICE_OWNER_CHANGED);
+
+ ident = Binder.clearCallingIdentity();
+ try {
+ mContext.sendBroadcastAsUser(intent, UserHandle.OWNER);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
return true;
}
}