resetFgsRestrictionLocked() must be called AFTER

logFGSStateChangeLocked().

Otherwise logFGSStateChangeLocked() picks up the wrong fields value from
ServiceRecord.

Bug: 190231954
Test: atest cts/tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java
Change-Id: I9ccfcb695da803350657836975ce03e05f26b4a4
This commit is contained in:
Hui Yu
2021-06-04 16:31:00 -07:00
parent 4d351c5089
commit a6c9fe409c

View File

@@ -1930,7 +1930,6 @@ public final class ActiveServices {
decActiveForegroundAppLocked(smap, r);
}
r.isForeground = false;
resetFgsRestrictionLocked(r);
r.mFgsExitTime = SystemClock.uptimeMillis();
ServiceState stracker = r.getTracker();
if (stracker != null) {
@@ -1945,6 +1944,7 @@ public final class ActiveServices {
FrameworkStatsLog.FOREGROUND_SERVICE_STATE_CHANGED__STATE__EXIT,
r.mFgsExitTime > r.mFgsEnterTime
? (int)(r.mFgsExitTime - r.mFgsEnterTime) : 0);
resetFgsRestrictionLocked(r);
mAm.updateForegroundServiceUsageStats(r.name, r.userId, false);
if (r.app != null) {
mAm.updateLruProcessLocked(r.app, false, null);
@@ -4192,8 +4192,7 @@ public final class ActiveServices {
r.isForeground = false;
r.foregroundId = 0;
r.foregroundNoti = null;
r.mAllowWhileInUsePermissionInFgs = false;
r.mAllowStartForeground = REASON_DENIED;
resetFgsRestrictionLocked(r);
// Clear start entries.
r.clearDeliveredStartsLocked();