Loading services/core/java/com/android/server/am/ActivityStack.java +3 −3 Original line number Diff line number Diff line Loading @@ -550,10 +550,10 @@ final class ActivityStack { if (DEBUG_TASKS) Slog.d(TAG, "Comparing existing cls=" + taskIntent.getComponent().flattenToShortString() + "/aff=" + r.task.affinity + " to new cls=" + "/aff=" + r.task.rootAffinity + " to new cls=" + intent.getComponent().flattenToShortString() + "/aff=" + info.taskAffinity); if (!isDocument && !taskIsDocument && task.affinity != null) { if (task.affinity.equals(target.taskAffinity)) { if (!isDocument && !taskIsDocument && task.rootAffinity != null) { if (task.rootAffinity.equals(target.taskAffinity)) { if (DEBUG_TASKS) Slog.d(TAG, "Found matching affinity!"); return r; } Loading services/core/java/com/android/server/am/TaskRecord.java +41 −7 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ final class TaskRecord { private static final String ATTR_ORIGACTIVITY = "orig_activity"; private static final String TAG_ACTIVITY = "activity"; private static final String ATTR_AFFINITY = "affinity"; private static final String ATTR_ROOT_AFFINITY = "root_affinity"; private static final String ATTR_ROOTHASRESET = "root_has_reset"; private static final String ATTR_AUTOREMOVERECENTS = "auto_remove_recents"; private static final String ATTR_ASKEDCOMPATMODE = "asked_compat_mode"; Loading @@ -84,7 +85,8 @@ final class TaskRecord { static final boolean IGNORE_RETURN_TO_RECENTS = true; final int taskId; // Unique identifier for this task. String affinity; // The affinity name for this task, or null. String affinity; // The affinity name for this task, or null; may change identity. String rootAffinity; // Initial base affinity, or null; does not change from initial root. final IVoiceInteractionSession voiceSession; // Voice interaction session driving task final IVoiceInteractor voiceInteractor; // Associated interactor to provide to app Intent intent; // The original intent that started the task. Loading Loading @@ -208,9 +210,9 @@ final class TaskRecord { } TaskRecord(ActivityManagerService service, int _taskId, Intent _intent, Intent _affinityIntent, String _affinity, ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset, boolean _autoRemoveRecents, boolean _askedCompatMode, int _taskType, int _userId, int _effectiveUid, String _affinity, String _rootAffinity, ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset, boolean _autoRemoveRecents, boolean _askedCompatMode, int _taskType, int _userId, int _effectiveUid, String _lastDescription, ArrayList<ActivityRecord> activities, long _firstActiveTime, long _lastActiveTime, long lastTimeMoved, boolean neverRelinquishIdentity, ActivityManager.TaskDescription _lastTaskDescription, int taskAffiliation, Loading @@ -224,6 +226,7 @@ final class TaskRecord { intent = _intent; affinityIntent = _affinityIntent; affinity = _affinity; rootAffinity = _affinity; voiceSession = null; voiceInteractor = null; realActivity = _realActivity; Loading Loading @@ -279,6 +282,12 @@ final class TaskRecord { } affinity = info.taskAffinity; if (intent == null) { // If this task already has an intent associated with it, don't set the root // affinity -- we don't want it changing after initially set, but the initially // set value may be null. rootAffinity = affinity; } effectiveUid = info.applicationInfo.uid; stringName = null; Loading Loading @@ -840,8 +849,17 @@ final class TaskRecord { if (origActivity != null) { out.attribute(null, ATTR_ORIGACTIVITY, origActivity.flattenToShortString()); } // Write affinity, and root affinity if it is different from affinity. // We use the special string "@" for a null root affinity, so we can identify // later whether we were given a root affinity or should just make it the // same as the affinity. if (affinity != null) { out.attribute(null, ATTR_AFFINITY, affinity); if (!affinity.equals(rootAffinity)) { out.attribute(null, ATTR_ROOT_AFFINITY, rootAffinity != null ? rootAffinity : "@"); } } else if (rootAffinity != null) { out.attribute(null, ATTR_ROOT_AFFINITY, rootAffinity != null ? rootAffinity : "@"); } out.attribute(null, ATTR_ROOTHASRESET, String.valueOf(rootWasReset)); out.attribute(null, ATTR_AUTOREMOVERECENTS, String.valueOf(autoRemoveRecents)); Loading Loading @@ -901,6 +919,8 @@ final class TaskRecord { ComponentName realActivity = null; ComponentName origActivity = null; String affinity = null; String rootAffinity = null; boolean hasRootAffinity = false; boolean rootHasReset = false; boolean autoRemoveRecents = false; boolean askedCompatMode = false; Loading Loading @@ -935,6 +955,9 @@ final class TaskRecord { origActivity = ComponentName.unflattenFromString(attrValue); } else if (ATTR_AFFINITY.equals(attrName)) { affinity = attrValue; } else if (ATTR_ROOT_AFFINITY.equals(attrName)) { rootAffinity = attrValue; hasRootAffinity = true; } else if (ATTR_ROOTHASRESET.equals(attrName)) { rootHasReset = Boolean.valueOf(attrValue); } else if (ATTR_AUTOREMOVERECENTS.equals(attrName)) { Loading Loading @@ -1007,6 +1030,12 @@ final class TaskRecord { createLastTaskDescriptionIconFilename(taskId, lastActiveTime))); } if (!hasRootAffinity) { rootAffinity = affinity; } else if ("@".equals(rootAffinity)) { rootAffinity = null; } if (effectiveUid <= 0) { Intent checkIntent = intent != null ? intent : affinityIntent; effectiveUid = 0; Loading @@ -1028,7 +1057,7 @@ final class TaskRecord { } final TaskRecord task = new TaskRecord(stackSupervisor.mService, taskId, intent, affinityIntent, affinity, realActivity, origActivity, rootHasReset, affinityIntent, affinity, rootAffinity, realActivity, origActivity, rootHasReset, autoRemoveRecents, askedCompatMode, taskType, userId, effectiveUid, lastDescription, activities, firstActiveTime, lastActiveTime, lastTimeOnTop, neverRelinquishIdentity, taskDescription, taskAffiliation, prevTaskId, nextTaskId, taskAffiliationColor, Loading @@ -1047,8 +1076,13 @@ final class TaskRecord { pw.print(" effectiveUid="); UserHandle.formatUid(pw, effectiveUid); pw.print(" mCallingUid="); UserHandle.formatUid(pw, mCallingUid); pw.print(" mCallingPackage="); pw.println(mCallingPackage); if (affinity != null) { pw.print(prefix); pw.print("affinity="); pw.println(affinity); if (affinity != null || rootAffinity != null) { pw.print(prefix); pw.print("affinity="); pw.print(affinity); if (affinity == null || !affinity.equals(rootAffinity)) { pw.print(" root="); pw.println(rootAffinity); } else { pw.println(); } } if (voiceSession != null || voiceInteractor != null) { pw.print(prefix); pw.print("VOICE: session=0x"); Loading services/core/java/com/android/server/pm/PackageManagerService.java +22 −14 Original line number Diff line number Diff line Loading @@ -4311,7 +4311,7 @@ public class PackageManagerService extends IPackageManager.Stub { * grantPermissions will assume the package update is trying to * expand its permissions. */ grantPermissionsLPw(pkg, true); grantPermissionsLPw(pkg, true, pkg.packageName); mSettings.disableSystemPackageLPw(pkg.packageName); } } Loading Loading @@ -6696,17 +6696,19 @@ public class PackageManagerService extends IPackageManager.Stub { if ((flags&UPDATE_PERMISSIONS_ALL) != 0) { for (PackageParser.Package pkg : mPackages.values()) { if (pkg != pkgInfo) { grantPermissionsLPw(pkg, (flags&UPDATE_PERMISSIONS_REPLACE_ALL) != 0); grantPermissionsLPw(pkg, (flags&UPDATE_PERMISSIONS_REPLACE_ALL) != 0, changingPkg); } } } if (pkgInfo != null) { grantPermissionsLPw(pkgInfo, (flags&UPDATE_PERMISSIONS_REPLACE_PKG) != 0); grantPermissionsLPw(pkgInfo, (flags&UPDATE_PERMISSIONS_REPLACE_PKG) != 0, changingPkg); } } private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace) { private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace, String packageOfInterest) { final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null) { return; Loading Loading @@ -6740,8 +6742,10 @@ public class PackageManagerService extends IPackageManager.Stub { } if (bp == null || bp.packageSetting == null) { if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Unknown permission " + name + " in package " + pkg.packageName); } continue; } Loading Loading @@ -6806,10 +6810,12 @@ public class PackageManagerService extends IPackageManager.Stub { gp.gids = appendInts(gp.gids, bp.gids); } } else { if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Not granting permission " + perm + " to package " + pkg.packageName + " because it was previously installed without"); } } } else { if (gp.grantedPermissions.remove(perm)) { changedPermission = true; Loading @@ -6822,6 +6828,7 @@ public class PackageManagerService extends IPackageManager.Stub { } else if ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_APPOP) == 0) { // Don't print warning for app op permissions, since it is fine for them // not to be granted, there is a UI for the user to decide. if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Not granting permission " + perm + " to package " + pkg.packageName + " (protectionLevel=" + bp.protectionLevel Loading @@ -6830,6 +6837,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } } } if ((changedPermission || replace) && !ps.permissionsFixed && !isSystemApp(ps) || isUpdatedSystemApp(ps)){ Loading Loading
services/core/java/com/android/server/am/ActivityStack.java +3 −3 Original line number Diff line number Diff line Loading @@ -550,10 +550,10 @@ final class ActivityStack { if (DEBUG_TASKS) Slog.d(TAG, "Comparing existing cls=" + taskIntent.getComponent().flattenToShortString() + "/aff=" + r.task.affinity + " to new cls=" + "/aff=" + r.task.rootAffinity + " to new cls=" + intent.getComponent().flattenToShortString() + "/aff=" + info.taskAffinity); if (!isDocument && !taskIsDocument && task.affinity != null) { if (task.affinity.equals(target.taskAffinity)) { if (!isDocument && !taskIsDocument && task.rootAffinity != null) { if (task.rootAffinity.equals(target.taskAffinity)) { if (DEBUG_TASKS) Slog.d(TAG, "Found matching affinity!"); return r; } Loading
services/core/java/com/android/server/am/TaskRecord.java +41 −7 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ final class TaskRecord { private static final String ATTR_ORIGACTIVITY = "orig_activity"; private static final String TAG_ACTIVITY = "activity"; private static final String ATTR_AFFINITY = "affinity"; private static final String ATTR_ROOT_AFFINITY = "root_affinity"; private static final String ATTR_ROOTHASRESET = "root_has_reset"; private static final String ATTR_AUTOREMOVERECENTS = "auto_remove_recents"; private static final String ATTR_ASKEDCOMPATMODE = "asked_compat_mode"; Loading @@ -84,7 +85,8 @@ final class TaskRecord { static final boolean IGNORE_RETURN_TO_RECENTS = true; final int taskId; // Unique identifier for this task. String affinity; // The affinity name for this task, or null. String affinity; // The affinity name for this task, or null; may change identity. String rootAffinity; // Initial base affinity, or null; does not change from initial root. final IVoiceInteractionSession voiceSession; // Voice interaction session driving task final IVoiceInteractor voiceInteractor; // Associated interactor to provide to app Intent intent; // The original intent that started the task. Loading Loading @@ -208,9 +210,9 @@ final class TaskRecord { } TaskRecord(ActivityManagerService service, int _taskId, Intent _intent, Intent _affinityIntent, String _affinity, ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset, boolean _autoRemoveRecents, boolean _askedCompatMode, int _taskType, int _userId, int _effectiveUid, String _affinity, String _rootAffinity, ComponentName _realActivity, ComponentName _origActivity, boolean _rootWasReset, boolean _autoRemoveRecents, boolean _askedCompatMode, int _taskType, int _userId, int _effectiveUid, String _lastDescription, ArrayList<ActivityRecord> activities, long _firstActiveTime, long _lastActiveTime, long lastTimeMoved, boolean neverRelinquishIdentity, ActivityManager.TaskDescription _lastTaskDescription, int taskAffiliation, Loading @@ -224,6 +226,7 @@ final class TaskRecord { intent = _intent; affinityIntent = _affinityIntent; affinity = _affinity; rootAffinity = _affinity; voiceSession = null; voiceInteractor = null; realActivity = _realActivity; Loading Loading @@ -279,6 +282,12 @@ final class TaskRecord { } affinity = info.taskAffinity; if (intent == null) { // If this task already has an intent associated with it, don't set the root // affinity -- we don't want it changing after initially set, but the initially // set value may be null. rootAffinity = affinity; } effectiveUid = info.applicationInfo.uid; stringName = null; Loading Loading @@ -840,8 +849,17 @@ final class TaskRecord { if (origActivity != null) { out.attribute(null, ATTR_ORIGACTIVITY, origActivity.flattenToShortString()); } // Write affinity, and root affinity if it is different from affinity. // We use the special string "@" for a null root affinity, so we can identify // later whether we were given a root affinity or should just make it the // same as the affinity. if (affinity != null) { out.attribute(null, ATTR_AFFINITY, affinity); if (!affinity.equals(rootAffinity)) { out.attribute(null, ATTR_ROOT_AFFINITY, rootAffinity != null ? rootAffinity : "@"); } } else if (rootAffinity != null) { out.attribute(null, ATTR_ROOT_AFFINITY, rootAffinity != null ? rootAffinity : "@"); } out.attribute(null, ATTR_ROOTHASRESET, String.valueOf(rootWasReset)); out.attribute(null, ATTR_AUTOREMOVERECENTS, String.valueOf(autoRemoveRecents)); Loading Loading @@ -901,6 +919,8 @@ final class TaskRecord { ComponentName realActivity = null; ComponentName origActivity = null; String affinity = null; String rootAffinity = null; boolean hasRootAffinity = false; boolean rootHasReset = false; boolean autoRemoveRecents = false; boolean askedCompatMode = false; Loading Loading @@ -935,6 +955,9 @@ final class TaskRecord { origActivity = ComponentName.unflattenFromString(attrValue); } else if (ATTR_AFFINITY.equals(attrName)) { affinity = attrValue; } else if (ATTR_ROOT_AFFINITY.equals(attrName)) { rootAffinity = attrValue; hasRootAffinity = true; } else if (ATTR_ROOTHASRESET.equals(attrName)) { rootHasReset = Boolean.valueOf(attrValue); } else if (ATTR_AUTOREMOVERECENTS.equals(attrName)) { Loading Loading @@ -1007,6 +1030,12 @@ final class TaskRecord { createLastTaskDescriptionIconFilename(taskId, lastActiveTime))); } if (!hasRootAffinity) { rootAffinity = affinity; } else if ("@".equals(rootAffinity)) { rootAffinity = null; } if (effectiveUid <= 0) { Intent checkIntent = intent != null ? intent : affinityIntent; effectiveUid = 0; Loading @@ -1028,7 +1057,7 @@ final class TaskRecord { } final TaskRecord task = new TaskRecord(stackSupervisor.mService, taskId, intent, affinityIntent, affinity, realActivity, origActivity, rootHasReset, affinityIntent, affinity, rootAffinity, realActivity, origActivity, rootHasReset, autoRemoveRecents, askedCompatMode, taskType, userId, effectiveUid, lastDescription, activities, firstActiveTime, lastActiveTime, lastTimeOnTop, neverRelinquishIdentity, taskDescription, taskAffiliation, prevTaskId, nextTaskId, taskAffiliationColor, Loading @@ -1047,8 +1076,13 @@ final class TaskRecord { pw.print(" effectiveUid="); UserHandle.formatUid(pw, effectiveUid); pw.print(" mCallingUid="); UserHandle.formatUid(pw, mCallingUid); pw.print(" mCallingPackage="); pw.println(mCallingPackage); if (affinity != null) { pw.print(prefix); pw.print("affinity="); pw.println(affinity); if (affinity != null || rootAffinity != null) { pw.print(prefix); pw.print("affinity="); pw.print(affinity); if (affinity == null || !affinity.equals(rootAffinity)) { pw.print(" root="); pw.println(rootAffinity); } else { pw.println(); } } if (voiceSession != null || voiceInteractor != null) { pw.print(prefix); pw.print("VOICE: session=0x"); Loading
services/core/java/com/android/server/pm/PackageManagerService.java +22 −14 Original line number Diff line number Diff line Loading @@ -4311,7 +4311,7 @@ public class PackageManagerService extends IPackageManager.Stub { * grantPermissions will assume the package update is trying to * expand its permissions. */ grantPermissionsLPw(pkg, true); grantPermissionsLPw(pkg, true, pkg.packageName); mSettings.disableSystemPackageLPw(pkg.packageName); } } Loading Loading @@ -6696,17 +6696,19 @@ public class PackageManagerService extends IPackageManager.Stub { if ((flags&UPDATE_PERMISSIONS_ALL) != 0) { for (PackageParser.Package pkg : mPackages.values()) { if (pkg != pkgInfo) { grantPermissionsLPw(pkg, (flags&UPDATE_PERMISSIONS_REPLACE_ALL) != 0); grantPermissionsLPw(pkg, (flags&UPDATE_PERMISSIONS_REPLACE_ALL) != 0, changingPkg); } } } if (pkgInfo != null) { grantPermissionsLPw(pkgInfo, (flags&UPDATE_PERMISSIONS_REPLACE_PKG) != 0); grantPermissionsLPw(pkgInfo, (flags&UPDATE_PERMISSIONS_REPLACE_PKG) != 0, changingPkg); } } private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace) { private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace, String packageOfInterest) { final PackageSetting ps = (PackageSetting) pkg.mExtras; if (ps == null) { return; Loading Loading @@ -6740,8 +6742,10 @@ public class PackageManagerService extends IPackageManager.Stub { } if (bp == null || bp.packageSetting == null) { if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Unknown permission " + name + " in package " + pkg.packageName); } continue; } Loading Loading @@ -6806,10 +6810,12 @@ public class PackageManagerService extends IPackageManager.Stub { gp.gids = appendInts(gp.gids, bp.gids); } } else { if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Not granting permission " + perm + " to package " + pkg.packageName + " because it was previously installed without"); } } } else { if (gp.grantedPermissions.remove(perm)) { changedPermission = true; Loading @@ -6822,6 +6828,7 @@ public class PackageManagerService extends IPackageManager.Stub { } else if ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_APPOP) == 0) { // Don't print warning for app op permissions, since it is fine for them // not to be granted, there is a UI for the user to decide. if (packageOfInterest == null || packageOfInterest.equals(pkg.packageName)) { Slog.w(TAG, "Not granting permission " + perm + " to package " + pkg.packageName + " (protectionLevel=" + bp.protectionLevel Loading @@ -6830,6 +6837,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } } } if ((changedPermission || replace) && !ps.permissionsFixed && !isSystemApp(ps) || isUpdatedSystemApp(ps)){ Loading