Loading core/java/android/app/ApplicationPackageManager.java +0 −24 Original line number Diff line number Diff line Loading @@ -1642,30 +1642,6 @@ final class ApplicationPackageManager extends PackageManager { } } /** * @hide */ public void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { try { mPM.addCrossProfileIntentsForPackage(packageName, sourceUserId, targetUserId); } catch (RemoteException e) { // Should never happen! } } /** * @hide */ public void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { try { mPM.removeCrossProfileIntentsForPackage(packageName, sourceUserId, targetUserId); } catch (RemoteException e) { // Should never happen! } } /** * @hide */ Loading core/java/android/content/pm/IPackageManager.aidl +0 −6 Original line number Diff line number Diff line Loading @@ -259,12 +259,6 @@ interface IPackageManager { void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage, int ownerUserId, int sourceUserId, int targetUserId, int flags); void addCrossProfileIntentsForPackage(in String packageName, int sourceUserId, int targetUserId); void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage, int ownerUserId); /** Loading core/java/android/content/pm/PackageManager.java +0 −16 Original line number Diff line number Diff line Loading @@ -3892,22 +3892,6 @@ public abstract class PackageManager { */ public abstract void clearCrossProfileIntentFilters(int sourceUserId); /** * Forwards all intents for {@link packageName} for user {@link sourceUserId} to user * {@link targetUserId}. * @hide */ public abstract void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); /** * Removes all intents for {@link packageName} for user {@link sourceUserId} to user * {@link targetUserId}. * @hide */ public abstract void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); /** * @hide */ Loading services/core/java/com/android/server/pm/PackageManagerService.java +1 −104 Original line number Diff line number Diff line Loading @@ -3183,24 +3183,6 @@ public class PackageManagerService extends IPackageManager.Stub { if (matches.get(i).getTargetUserId() == targetUserId) return true; } } ArrayList<String> packageNames = null; SparseArray<ArrayList<String>> fromSource = mSettings.mCrossProfilePackageInfo.get(sourceUserId); if (fromSource != null) { packageNames = fromSource.get(targetUserId); if (packageNames != null) { // We need the package name, so we try to resolve with the loosest flags possible List<ResolveInfo> resolveInfos = mActivities.queryIntent(intent, resolvedType, PackageManager.GET_UNINSTALLED_PACKAGES, targetUserId); int count = resolveInfos.size(); for (int i = 0; i < count; i++) { ResolveInfo resolveInfo = resolveInfos.get(i); if (packageNames.contains(resolveInfo.activityInfo.packageName)) { return true; } } } } return false; } Loading Loading @@ -3241,20 +3223,10 @@ public class PackageManagerService extends IPackageManager.Stub { synchronized (mPackages) { final String pkgName = intent.getPackage(); if (pkgName == null) { ResolveInfo resolveInfo = null; // Check if the intent needs to be forwarded to another user for this package ArrayList<ResolveInfo> crossProfileResult = queryIntentActivitiesCrossProfilePackage( intent, resolvedType, flags, userId); if (!crossProfileResult.isEmpty()) { // Skip the current profile return crossProfileResult; } List<CrossProfileIntentFilter> matchingFilters = getMatchingCrossProfileIntentFilters(intent, resolvedType, userId); // Check for results that need to skip the current profile. resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent, ResolveInfo resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent, resolvedType, flags, userId); if (resolveInfo != null) { List<ResolveInfo> result = new ArrayList<ResolveInfo>(1); Loading @@ -3276,13 +3248,6 @@ public class PackageManagerService extends IPackageManager.Stub { } final PackageParser.Package pkg = mPackages.get(pkgName); if (pkg != null) { ArrayList<ResolveInfo> crossProfileResult = queryIntentActivitiesCrossProfilePackage( intent, resolvedType, flags, userId, pkg, pkgName); if (!crossProfileResult.isEmpty()) { // Skip the current profile return crossProfileResult; } return mActivities.queryIntentForPackage(intent, resolvedType, flags, pkg.activities, userId); } Loading Loading @@ -3311,56 +3276,6 @@ public class PackageManagerService extends IPackageManager.Stub { return null; } private ArrayList<ResolveInfo> queryIntentActivitiesCrossProfilePackage( Intent intent, String resolvedType, int flags, int userId) { ArrayList<ResolveInfo> matchingResolveInfos = new ArrayList<ResolveInfo>(); SparseArray<ArrayList<String>> sourceForwardingInfo = mSettings.mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo != null) { int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); ArrayList<String> packageNames = sourceForwardingInfo.valueAt(i); List<ResolveInfo> resolveInfos = mActivities.queryIntent( intent, resolvedType, flags, targetUserId); int NJ = resolveInfos.size(); for (int j = 0; j < NJ; j++) { ResolveInfo resolveInfo = resolveInfos.get(j); if (packageNames.contains(resolveInfo.activityInfo.packageName)) { matchingResolveInfos.add(createForwardingResolveInfo( resolveInfo.filter, userId, targetUserId)); } } } } return matchingResolveInfos; } private ArrayList<ResolveInfo> queryIntentActivitiesCrossProfilePackage( Intent intent, String resolvedType, int flags, int userId, PackageParser.Package pkg, String packageName) { ArrayList<ResolveInfo> matchingResolveInfos = new ArrayList<ResolveInfo>(); SparseArray<ArrayList<String>> sourceForwardingInfo = mSettings.mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo != null) { int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); if (sourceForwardingInfo.valueAt(i).contains(packageName)) { List<ResolveInfo> resolveInfos = mActivities.queryIntentForPackage( intent, resolvedType, flags, pkg.activities, targetUserId); int NJ = resolveInfos.size(); for (int j = 0; j < NJ; j++) { ResolveInfo resolveInfo = resolveInfos.get(j); matchingResolveInfos.add(createForwardingResolveInfo( resolveInfo.filter, userId, targetUserId)); } } } } return matchingResolveInfos; } // Return matching ResolveInfo if any for skip current profile intent filters. private ResolveInfo queryCrossProfileIntents( List<CrossProfileIntentFilter> matchingFilters, Intent intent, String resolvedType, Loading Loading @@ -11658,24 +11573,6 @@ public class PackageManagerService extends IPackageManager.Stub { } } @Override public void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); mSettings.addCrossProfilePackage(packageName, sourceUserId, targetUserId); mSettings.writePackageRestrictionsLPr(sourceUserId); } @Override public void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); mSettings.removeCrossProfilePackage(packageName, sourceUserId, targetUserId); mSettings.writePackageRestrictionsLPr(sourceUserId); } @Override public void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage, int ownerUserId) { Loading services/core/java/com/android/server/pm/Settings.java +0 −168 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.os.FileUtils; import android.os.PatternMatcher; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.util.LogPrinter; import com.android.internal.util.FastXmlSerializer; Loading Loading @@ -138,10 +137,6 @@ final class Settings { "persistent-preferred-activities"; static final String TAG_CROSS_PROFILE_INTENT_FILTERS = "crossProfile-intent-filters"; private static final String TAG_CROSS_PROFILE_PACKAGE_INFO = "cross-profile-package-info"; private static final String CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID = "target-user-id"; private static final String CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME = "package-name"; private static final String CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME = "value"; private static final String ATTR_NAME = "name"; private static final String ATTR_USER = "user"; Loading Loading @@ -249,23 +244,15 @@ final class Settings { */ private final ArrayList<PendingPackage> mPendingPackages = new ArrayList<PendingPackage>(); private final Context mContext; private final File mSystemDir; public final KeySetManagerService mKeySetManagerService = new KeySetManagerService(mPackages); // A mapping of (sourceUserId, targetUserId, packageNames) for forwarding the intents of a // package. final SparseArray<SparseArray<ArrayList<String>>> mCrossProfilePackageInfo = new SparseArray<SparseArray<ArrayList<String>>>(); Settings(Context context) { this(context, Environment.getDataDirectory()); } Settings(Context context, File dataDir) { mContext = context; mSystemDir = new File(dataDir, "system"); mSystemDir.mkdirs(); FileUtils.setPermissions(mSystemDir.toString(), Loading @@ -282,47 +269,6 @@ final class Settings { mBackupStoppedPackagesFilename = new File(mSystemDir, "packages-stopped-backup.xml"); } public void addCrossProfilePackage( String packageName, int sourceUserId, int targetUserId) { synchronized(mCrossProfilePackageInfo) { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(sourceUserId); if (sourceForwardingInfo == null) { sourceForwardingInfo = new SparseArray<ArrayList<String>>(); mCrossProfilePackageInfo.put(sourceUserId, sourceForwardingInfo); } ArrayList<String> packageNames = sourceForwardingInfo.get(targetUserId); if (packageNames == null) { packageNames = new ArrayList<String>(); sourceForwardingInfo.put(targetUserId, packageNames); } if (!packageNames.contains(packageName)) { packageNames.add(packageName); } } } public void removeCrossProfilePackage( String packageName, int sourceUserId, int targetUserId) { synchronized(mCrossProfilePackageInfo) { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(sourceUserId); if (sourceForwardingInfo == null) { return; } ArrayList<String> packageNames = sourceForwardingInfo.get(targetUserId); if (packageNames != null && packageNames.contains(packageName)) { packageNames.remove(packageName); if (packageNames.isEmpty()) { sourceForwardingInfo.remove(targetUserId); if (sourceForwardingInfo.size() == 0) { mCrossProfilePackageInfo.remove(sourceUserId); } } } } } PackageSetting getPackageLPw(PackageParser.Package pkg, PackageSetting origPackage, String realName, SharedUserSetting sharedUser, File codePath, File resourcePath, String legacyNativeLibraryPathString, String primaryCpuAbi, String secondaryCpuAbi, Loading Loading @@ -1068,68 +1014,6 @@ final class Settings { } } private void readCrossProfilePackageInfoLPw(XmlPullParser parser, int userId) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } String tagName = parser.getName(); if (tagName.equals(TAG_ITEM)) { String targetUserIdString = parser.getAttributeValue(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID); if (targetUserIdString == null) { String msg = "Missing element under " + TAG +": " + CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID + " at " + parser.getPositionDescription(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); continue; } int targetUserId = Integer.parseInt(targetUserIdString); readCrossProfilePackageInfoForTargetLPw(parser, userId, targetUserId); } else { String msg = "Unknown element under " + TAG_CROSS_PROFILE_PACKAGE_INFO + ": " + parser.getName(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); XmlUtils.skipCurrentTag(parser); } } } private void readCrossProfilePackageInfoForTargetLPw( XmlPullParser parser, int sourceUserId, int targetUserId) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } String tagName = parser.getName(); if (tagName.equals(CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME)) { String packageName = parser.getAttributeValue( null, CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME); if (packageName == null) { String msg = "Missing element under " + TAG +": " + CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME + " at " + parser.getPositionDescription(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); continue; } addCrossProfilePackage(packageName, sourceUserId, targetUserId); } else { String msg = "Unknown element under " + TAG_ITEM + ": " + parser.getName(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); XmlUtils.skipCurrentTag(parser); } } } void readPackageRestrictionsLPr(int userId) { if (DEBUG_MU) { Log.i(TAG, "Reading package restrictions for user=" + userId); Loading Loading @@ -1271,8 +1155,6 @@ final class Settings { readPersistentPreferredActivitiesLPw(parser, userId); } else if (tagName.equals(TAG_CROSS_PROFILE_INTENT_FILTERS)) { readCrossProfileIntentFiltersLPw(parser, userId); } else if (tagName.equals(TAG_CROSS_PROFILE_PACKAGE_INFO)){ readCrossProfilePackageInfoLPw(parser, userId); } else { Slog.w(PackageManagerService.TAG, "Unknown element under <stopped-packages>: " + parser.getName()); Loading Loading @@ -1364,32 +1246,6 @@ final class Settings { serializer.endTag(null, TAG_CROSS_PROFILE_INTENT_FILTERS); } void writeCrossProfilePackageInfoLPr(XmlSerializer serializer, int userId) throws IllegalArgumentException, IllegalStateException, IOException { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo == null) { return; } serializer.startTag(null, TAG_CROSS_PROFILE_PACKAGE_INFO); int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); ArrayList<String> packageNames = sourceForwardingInfo.valueAt(i); serializer.startTag(null, TAG_ITEM); serializer.attribute(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID, Integer.toString(targetUserId)); int NJ = packageNames.size(); for (int j = 0; j < NJ; j++) { serializer.startTag(null, CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME); serializer.attribute(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME, packageNames.get(j)); serializer.endTag(null, CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME); } serializer.endTag(null, TAG_ITEM); } serializer.endTag(null, TAG_CROSS_PROFILE_PACKAGE_INFO); } void writePackageRestrictionsLPr(int userId) { if (DEBUG_MU) { Log.i(TAG, "Writing package restrictions for user=" + userId); Loading Loading @@ -1494,8 +1350,6 @@ final class Settings { writeCrossProfileIntentFiltersLPr(serializer, userId); writeCrossProfilePackageInfoLPr(serializer, userId); serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS); serializer.endDocument(); Loading Loading @@ -3180,7 +3034,6 @@ final class Settings { file = getUserPackagesStateBackupFile(userId); file.delete(); removeCrossProfileIntentFiltersLPw(userId); removeCrossProfilePackagesLPw(userId); } void removeCrossProfileIntentFiltersLPw(int userId) { Loading Loading @@ -3211,27 +3064,6 @@ final class Settings { } } public void removeCrossProfilePackagesLPw(int userId) { synchronized(mCrossProfilePackageInfo) { // userId is the source user if (mCrossProfilePackageInfo.get(userId) != null) { mCrossProfilePackageInfo.remove(userId); writePackageRestrictionsLPr(userId); } // userId is the target user int count = mCrossProfilePackageInfo.size(); for (int i = 0; i < count; i++) { int sourceUserId = mCrossProfilePackageInfo.keyAt(i); SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.valueAt(i); if (sourceForwardingInfo.get(userId) != null) { sourceForwardingInfo.remove(userId); writePackageRestrictionsLPr(sourceUserId); } } } } // This should be called (at least) whenever an application is removed private void setFirstAvailableUid(int uid) { if (uid > mFirstAvailableUid) { Loading Loading
core/java/android/app/ApplicationPackageManager.java +0 −24 Original line number Diff line number Diff line Loading @@ -1642,30 +1642,6 @@ final class ApplicationPackageManager extends PackageManager { } } /** * @hide */ public void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { try { mPM.addCrossProfileIntentsForPackage(packageName, sourceUserId, targetUserId); } catch (RemoteException e) { // Should never happen! } } /** * @hide */ public void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { try { mPM.removeCrossProfileIntentsForPackage(packageName, sourceUserId, targetUserId); } catch (RemoteException e) { // Should never happen! } } /** * @hide */ Loading
core/java/android/content/pm/IPackageManager.aidl +0 −6 Original line number Diff line number Diff line Loading @@ -259,12 +259,6 @@ interface IPackageManager { void addCrossProfileIntentFilter(in IntentFilter intentFilter, String ownerPackage, int ownerUserId, int sourceUserId, int targetUserId, int flags); void addCrossProfileIntentsForPackage(in String packageName, int sourceUserId, int targetUserId); void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage, int ownerUserId); /** Loading
core/java/android/content/pm/PackageManager.java +0 −16 Original line number Diff line number Diff line Loading @@ -3892,22 +3892,6 @@ public abstract class PackageManager { */ public abstract void clearCrossProfileIntentFilters(int sourceUserId); /** * Forwards all intents for {@link packageName} for user {@link sourceUserId} to user * {@link targetUserId}. * @hide */ public abstract void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); /** * Removes all intents for {@link packageName} for user {@link sourceUserId} to user * {@link targetUserId}. * @hide */ public abstract void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId); /** * @hide */ Loading
services/core/java/com/android/server/pm/PackageManagerService.java +1 −104 Original line number Diff line number Diff line Loading @@ -3183,24 +3183,6 @@ public class PackageManagerService extends IPackageManager.Stub { if (matches.get(i).getTargetUserId() == targetUserId) return true; } } ArrayList<String> packageNames = null; SparseArray<ArrayList<String>> fromSource = mSettings.mCrossProfilePackageInfo.get(sourceUserId); if (fromSource != null) { packageNames = fromSource.get(targetUserId); if (packageNames != null) { // We need the package name, so we try to resolve with the loosest flags possible List<ResolveInfo> resolveInfos = mActivities.queryIntent(intent, resolvedType, PackageManager.GET_UNINSTALLED_PACKAGES, targetUserId); int count = resolveInfos.size(); for (int i = 0; i < count; i++) { ResolveInfo resolveInfo = resolveInfos.get(i); if (packageNames.contains(resolveInfo.activityInfo.packageName)) { return true; } } } } return false; } Loading Loading @@ -3241,20 +3223,10 @@ public class PackageManagerService extends IPackageManager.Stub { synchronized (mPackages) { final String pkgName = intent.getPackage(); if (pkgName == null) { ResolveInfo resolveInfo = null; // Check if the intent needs to be forwarded to another user for this package ArrayList<ResolveInfo> crossProfileResult = queryIntentActivitiesCrossProfilePackage( intent, resolvedType, flags, userId); if (!crossProfileResult.isEmpty()) { // Skip the current profile return crossProfileResult; } List<CrossProfileIntentFilter> matchingFilters = getMatchingCrossProfileIntentFilters(intent, resolvedType, userId); // Check for results that need to skip the current profile. resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent, ResolveInfo resolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent, resolvedType, flags, userId); if (resolveInfo != null) { List<ResolveInfo> result = new ArrayList<ResolveInfo>(1); Loading @@ -3276,13 +3248,6 @@ public class PackageManagerService extends IPackageManager.Stub { } final PackageParser.Package pkg = mPackages.get(pkgName); if (pkg != null) { ArrayList<ResolveInfo> crossProfileResult = queryIntentActivitiesCrossProfilePackage( intent, resolvedType, flags, userId, pkg, pkgName); if (!crossProfileResult.isEmpty()) { // Skip the current profile return crossProfileResult; } return mActivities.queryIntentForPackage(intent, resolvedType, flags, pkg.activities, userId); } Loading Loading @@ -3311,56 +3276,6 @@ public class PackageManagerService extends IPackageManager.Stub { return null; } private ArrayList<ResolveInfo> queryIntentActivitiesCrossProfilePackage( Intent intent, String resolvedType, int flags, int userId) { ArrayList<ResolveInfo> matchingResolveInfos = new ArrayList<ResolveInfo>(); SparseArray<ArrayList<String>> sourceForwardingInfo = mSettings.mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo != null) { int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); ArrayList<String> packageNames = sourceForwardingInfo.valueAt(i); List<ResolveInfo> resolveInfos = mActivities.queryIntent( intent, resolvedType, flags, targetUserId); int NJ = resolveInfos.size(); for (int j = 0; j < NJ; j++) { ResolveInfo resolveInfo = resolveInfos.get(j); if (packageNames.contains(resolveInfo.activityInfo.packageName)) { matchingResolveInfos.add(createForwardingResolveInfo( resolveInfo.filter, userId, targetUserId)); } } } } return matchingResolveInfos; } private ArrayList<ResolveInfo> queryIntentActivitiesCrossProfilePackage( Intent intent, String resolvedType, int flags, int userId, PackageParser.Package pkg, String packageName) { ArrayList<ResolveInfo> matchingResolveInfos = new ArrayList<ResolveInfo>(); SparseArray<ArrayList<String>> sourceForwardingInfo = mSettings.mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo != null) { int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); if (sourceForwardingInfo.valueAt(i).contains(packageName)) { List<ResolveInfo> resolveInfos = mActivities.queryIntentForPackage( intent, resolvedType, flags, pkg.activities, targetUserId); int NJ = resolveInfos.size(); for (int j = 0; j < NJ; j++) { ResolveInfo resolveInfo = resolveInfos.get(j); matchingResolveInfos.add(createForwardingResolveInfo( resolveInfo.filter, userId, targetUserId)); } } } } return matchingResolveInfos; } // Return matching ResolveInfo if any for skip current profile intent filters. private ResolveInfo queryCrossProfileIntents( List<CrossProfileIntentFilter> matchingFilters, Intent intent, String resolvedType, Loading Loading @@ -11658,24 +11573,6 @@ public class PackageManagerService extends IPackageManager.Stub { } } @Override public void addCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); mSettings.addCrossProfilePackage(packageName, sourceUserId, targetUserId); mSettings.writePackageRestrictionsLPr(sourceUserId); } @Override public void removeCrossProfileIntentsForPackage(String packageName, int sourceUserId, int targetUserId) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null); mSettings.removeCrossProfilePackage(packageName, sourceUserId, targetUserId); mSettings.writePackageRestrictionsLPr(sourceUserId); } @Override public void clearCrossProfileIntentFilters(int sourceUserId, String ownerPackage, int ownerUserId) { Loading
services/core/java/com/android/server/pm/Settings.java +0 −168 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.os.FileUtils; import android.os.PatternMatcher; import android.os.Process; import android.os.UserHandle; import android.os.UserManager; import android.util.LogPrinter; import com.android.internal.util.FastXmlSerializer; Loading Loading @@ -138,10 +137,6 @@ final class Settings { "persistent-preferred-activities"; static final String TAG_CROSS_PROFILE_INTENT_FILTERS = "crossProfile-intent-filters"; private static final String TAG_CROSS_PROFILE_PACKAGE_INFO = "cross-profile-package-info"; private static final String CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID = "target-user-id"; private static final String CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME = "package-name"; private static final String CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME = "value"; private static final String ATTR_NAME = "name"; private static final String ATTR_USER = "user"; Loading Loading @@ -249,23 +244,15 @@ final class Settings { */ private final ArrayList<PendingPackage> mPendingPackages = new ArrayList<PendingPackage>(); private final Context mContext; private final File mSystemDir; public final KeySetManagerService mKeySetManagerService = new KeySetManagerService(mPackages); // A mapping of (sourceUserId, targetUserId, packageNames) for forwarding the intents of a // package. final SparseArray<SparseArray<ArrayList<String>>> mCrossProfilePackageInfo = new SparseArray<SparseArray<ArrayList<String>>>(); Settings(Context context) { this(context, Environment.getDataDirectory()); } Settings(Context context, File dataDir) { mContext = context; mSystemDir = new File(dataDir, "system"); mSystemDir.mkdirs(); FileUtils.setPermissions(mSystemDir.toString(), Loading @@ -282,47 +269,6 @@ final class Settings { mBackupStoppedPackagesFilename = new File(mSystemDir, "packages-stopped-backup.xml"); } public void addCrossProfilePackage( String packageName, int sourceUserId, int targetUserId) { synchronized(mCrossProfilePackageInfo) { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(sourceUserId); if (sourceForwardingInfo == null) { sourceForwardingInfo = new SparseArray<ArrayList<String>>(); mCrossProfilePackageInfo.put(sourceUserId, sourceForwardingInfo); } ArrayList<String> packageNames = sourceForwardingInfo.get(targetUserId); if (packageNames == null) { packageNames = new ArrayList<String>(); sourceForwardingInfo.put(targetUserId, packageNames); } if (!packageNames.contains(packageName)) { packageNames.add(packageName); } } } public void removeCrossProfilePackage( String packageName, int sourceUserId, int targetUserId) { synchronized(mCrossProfilePackageInfo) { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(sourceUserId); if (sourceForwardingInfo == null) { return; } ArrayList<String> packageNames = sourceForwardingInfo.get(targetUserId); if (packageNames != null && packageNames.contains(packageName)) { packageNames.remove(packageName); if (packageNames.isEmpty()) { sourceForwardingInfo.remove(targetUserId); if (sourceForwardingInfo.size() == 0) { mCrossProfilePackageInfo.remove(sourceUserId); } } } } } PackageSetting getPackageLPw(PackageParser.Package pkg, PackageSetting origPackage, String realName, SharedUserSetting sharedUser, File codePath, File resourcePath, String legacyNativeLibraryPathString, String primaryCpuAbi, String secondaryCpuAbi, Loading Loading @@ -1068,68 +1014,6 @@ final class Settings { } } private void readCrossProfilePackageInfoLPw(XmlPullParser parser, int userId) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } String tagName = parser.getName(); if (tagName.equals(TAG_ITEM)) { String targetUserIdString = parser.getAttributeValue(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID); if (targetUserIdString == null) { String msg = "Missing element under " + TAG +": " + CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID + " at " + parser.getPositionDescription(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); continue; } int targetUserId = Integer.parseInt(targetUserIdString); readCrossProfilePackageInfoForTargetLPw(parser, userId, targetUserId); } else { String msg = "Unknown element under " + TAG_CROSS_PROFILE_PACKAGE_INFO + ": " + parser.getName(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); XmlUtils.skipCurrentTag(parser); } } } private void readCrossProfilePackageInfoForTargetLPw( XmlPullParser parser, int sourceUserId, int targetUserId) throws XmlPullParserException, IOException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { continue; } String tagName = parser.getName(); if (tagName.equals(CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME)) { String packageName = parser.getAttributeValue( null, CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME); if (packageName == null) { String msg = "Missing element under " + TAG +": " + CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME + " at " + parser.getPositionDescription(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); continue; } addCrossProfilePackage(packageName, sourceUserId, targetUserId); } else { String msg = "Unknown element under " + TAG_ITEM + ": " + parser.getName(); PackageManagerService.reportSettingsProblem(Log.WARN, msg); XmlUtils.skipCurrentTag(parser); } } } void readPackageRestrictionsLPr(int userId) { if (DEBUG_MU) { Log.i(TAG, "Reading package restrictions for user=" + userId); Loading Loading @@ -1271,8 +1155,6 @@ final class Settings { readPersistentPreferredActivitiesLPw(parser, userId); } else if (tagName.equals(TAG_CROSS_PROFILE_INTENT_FILTERS)) { readCrossProfileIntentFiltersLPw(parser, userId); } else if (tagName.equals(TAG_CROSS_PROFILE_PACKAGE_INFO)){ readCrossProfilePackageInfoLPw(parser, userId); } else { Slog.w(PackageManagerService.TAG, "Unknown element under <stopped-packages>: " + parser.getName()); Loading Loading @@ -1364,32 +1246,6 @@ final class Settings { serializer.endTag(null, TAG_CROSS_PROFILE_INTENT_FILTERS); } void writeCrossProfilePackageInfoLPr(XmlSerializer serializer, int userId) throws IllegalArgumentException, IllegalStateException, IOException { SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.get(userId); if (sourceForwardingInfo == null) { return; } serializer.startTag(null, TAG_CROSS_PROFILE_PACKAGE_INFO); int NI = sourceForwardingInfo.size(); for (int i = 0; i < NI; i++) { int targetUserId = sourceForwardingInfo.keyAt(i); ArrayList<String> packageNames = sourceForwardingInfo.valueAt(i); serializer.startTag(null, TAG_ITEM); serializer.attribute(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_TARGET_USER_ID, Integer.toString(targetUserId)); int NJ = packageNames.size(); for (int j = 0; j < NJ; j++) { serializer.startTag(null, CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME); serializer.attribute(null, CROSS_PROFILE_PACKAGE_INFO_ATTR_PACKAGE_NAME, packageNames.get(j)); serializer.endTag(null, CROSS_PROFILE_PACKAGE_INFO_TAG_PACKAGE_NAME); } serializer.endTag(null, TAG_ITEM); } serializer.endTag(null, TAG_CROSS_PROFILE_PACKAGE_INFO); } void writePackageRestrictionsLPr(int userId) { if (DEBUG_MU) { Log.i(TAG, "Writing package restrictions for user=" + userId); Loading Loading @@ -1494,8 +1350,6 @@ final class Settings { writeCrossProfileIntentFiltersLPr(serializer, userId); writeCrossProfilePackageInfoLPr(serializer, userId); serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS); serializer.endDocument(); Loading Loading @@ -3180,7 +3034,6 @@ final class Settings { file = getUserPackagesStateBackupFile(userId); file.delete(); removeCrossProfileIntentFiltersLPw(userId); removeCrossProfilePackagesLPw(userId); } void removeCrossProfileIntentFiltersLPw(int userId) { Loading Loading @@ -3211,27 +3064,6 @@ final class Settings { } } public void removeCrossProfilePackagesLPw(int userId) { synchronized(mCrossProfilePackageInfo) { // userId is the source user if (mCrossProfilePackageInfo.get(userId) != null) { mCrossProfilePackageInfo.remove(userId); writePackageRestrictionsLPr(userId); } // userId is the target user int count = mCrossProfilePackageInfo.size(); for (int i = 0; i < count; i++) { int sourceUserId = mCrossProfilePackageInfo.keyAt(i); SparseArray<ArrayList<String>> sourceForwardingInfo = mCrossProfilePackageInfo.valueAt(i); if (sourceForwardingInfo.get(userId) != null) { sourceForwardingInfo.remove(userId); writePackageRestrictionsLPr(sourceUserId); } } } } // This should be called (at least) whenever an application is removed private void setFirstAvailableUid(int uid) { if (uid > mFirstAvailableUid) { Loading