Merge "Top apps may start fg services even when under bg restriction" into qt-dev
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 24f8fc2..76136df 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -828,6 +828,13 @@
sb.append(compName);
Slog.w(TAG, sb.toString());
stopping.add(service);
+
+ // If the app is under bg restrictions, also make sure that
+ // any notification is dismissed
+ if (appRestrictedAnyInBackground(
+ service.appInfo.uid, service.packageName)) {
+ cancelForegroundNotificationLocked(service);
+ }
}
}
}
@@ -1232,6 +1239,10 @@
}
}
+ private boolean appIsTopLocked(int uid) {
+ return mAm.getUidState(uid) <= ActivityManager.PROCESS_STATE_TOP;
+ }
+
/**
* @param id Notification ID. Zero === exit foreground state for the given service.
*/
@@ -1318,8 +1329,11 @@
throw new SecurityException("Foreground not allowed as per app op");
}
- if (!ignoreForeground &&
- appRestrictedAnyInBackground(r.appInfo.uid, r.packageName)) {
+ // Apps that are TOP or effectively similar may call startForeground() on
+ // their services even if they are restricted from doing that while in bg.
+ if (!ignoreForeground
+ && !appIsTopLocked(r.appInfo.uid)
+ && appRestrictedAnyInBackground(r.appInfo.uid, r.packageName)) {
Slog.w(TAG,
"Service.startForeground() not allowed due to bg restriction: service "
+ r.shortInstanceName);