diff options
| author | 2019-04-26 22:27:24 +0000 | |
|---|---|---|
| committer | 2019-04-26 22:27:24 +0000 | |
| commit | 68fa9376b3482b04f9749e103f9be35b0fb249a2 (patch) | |
| tree | 9918e5b904e9b62eb520ca0b67b7c2c7f2b743d0 | |
| parent | 8783e44c9f559a2d743c479c8a6f7f64777eadb7 (diff) | |
| parent | 6aab623ad82439125fbd2ac96c07153f1d8d6710 (diff) | |
Merge "Top apps may start fg services even when under bg restriction" into qt-dev
| -rw-r--r-- | services/core/java/com/android/server/am/ActiveServices.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index 24f8fc26ae22..76136dfc81a0 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 @@ public final class ActiveServices { 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 @@ public final class ActiveServices { } } + 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 @@ public final class ActiveServices { 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); |