Merge "Services exit fg when bg-restricted app leaves top"

am: 4221333afe

Change-Id: Ifb353d3d73268215d4c3832c81eeb11c7635c02b
This commit is contained in:
Christopher Tate
2019-10-31 11:34:46 -07:00
committed by android-build-merger

View File

@@ -192,6 +192,12 @@ public final class ActiveServices {
@Override @Override
public void stopForegroundServicesForUidPackage(final int uid, final String packageName) { public void stopForegroundServicesForUidPackage(final int uid, final String packageName) {
synchronized (mAm) { synchronized (mAm) {
stopAllForegroundServicesLocked(uid, packageName);
}
}
}
void stopAllForegroundServicesLocked(final int uid, final String packageName) {
final ServiceMap smap = getServiceMapLocked(UserHandle.getUserId(uid)); final ServiceMap smap = getServiceMapLocked(UserHandle.getUserId(uid));
final int N = smap.mServicesByInstanceName.size(); final int N = smap.mServicesByInstanceName.size();
final ArrayList<ServiceRecord> toStop = new ArrayList<>(N); final ArrayList<ServiceRecord> toStop = new ArrayList<>(N);
@@ -209,7 +215,7 @@ public final class ActiveServices {
final int numToStop = toStop.size(); final int numToStop = toStop.size();
if (numToStop > 0 && DEBUG_FOREGROUND_SERVICE) { if (numToStop > 0 && DEBUG_FOREGROUND_SERVICE) {
Slog.i(TAG, "Package " + packageName + "/" + uid Slog.i(TAG, "Package " + packageName + "/" + uid
+ " entering FAS with foreground services"); + " in FAS with foreground services");
} }
for (int i = 0; i < numToStop; i++) { for (int i = 0; i < numToStop; i++) {
final ServiceRecord r = toStop.get(i); final ServiceRecord r = toStop.get(i);
@@ -219,8 +225,6 @@ public final class ActiveServices {
setServiceForegroundInnerLocked(r, 0, null, 0, 0); setServiceForegroundInnerLocked(r, 0, null, 0, 0);
} }
} }
}
}
/** /**
* Information about an app that is currently running one or more foreground services. * Information about an app that is currently running one or more foreground services.
@@ -1010,12 +1014,23 @@ public final class ActiveServices {
} }
} }
if (!aa.mAppOnTop) { if (!aa.mAppOnTop) {
// Transitioning a fg-service host app out of top: if it's bg restricted,
// it loses the fg service state now.
if (!appRestrictedAnyInBackground(aa.mUid, aa.mPackageName)) {
if (active == null) { if (active == null) {
active = new ArrayList<>(); active = new ArrayList<>();
} }
if (DEBUG_FOREGROUND_SERVICE) Slog.d(TAG, "Adding active: pkg=" if (DEBUG_FOREGROUND_SERVICE) Slog.d(TAG, "Adding active: pkg="
+ aa.mPackageName + ", uid=" + aa.mUid); + aa.mPackageName + ", uid=" + aa.mUid);
active.add(aa); active.add(aa);
} else {
if (DEBUG_FOREGROUND_SERVICE) {
Slog.d(TAG, "bg-restricted app "
+ aa.mPackageName + "/" + aa.mUid
+ " exiting top; demoting fg services ");
}
stopAllForegroundServicesLocked(aa.mUid, aa.mPackageName);
}
} }
} }
smap.removeMessages(ServiceMap.MSG_UPDATE_FOREGROUND_APPS); smap.removeMessages(ServiceMap.MSG_UPDATE_FOREGROUND_APPS);