diff options
| author | 2022-11-29 17:37:34 -0800 | |
|---|---|---|
| committer | 2022-11-29 17:37:34 -0800 | |
| commit | ced7d76ee0cdd2f3a15be8c1cfd65e46df659c79 (patch) | |
| tree | 3d77b9d450025a1fe5ca0b3ca7ff888c990fd610 | |
| parent | 90cef8f47366e74bd3888835b21000e3f13e86ab (diff) | |
Apply "most-recent" delivery policy to certain broadcasts.
Applying the policy to DEVICE_IDLE_MODE_CHANGED and
LIGHT_DEVICE_IDLE_MODE_CHANGED broadcasts so that when dispatching
these broadcasts, we can discard any older broadcasts waiting
to be delivered and deliver only the most recent to the receivers.
Bug: 256597171
Bug: 256597397
Test: atest ./tests/tests/batterysaving/src/android/os/cts/deviceidle/DeviceIdleTest.java
Change-Id: Icfade7cd207d525d29856bb050ca4377085dbbc1
| -rw-r--r-- | apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java index e3bd5acd7bc7..dcc6aa6a1d67 100644 --- a/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +++ b/apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java @@ -29,6 +29,7 @@ import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.AlarmManager; +import android.app.BroadcastOptions; import android.content.BroadcastReceiver; import android.content.Context; import android.content.IIntentReceiver; @@ -314,7 +315,9 @@ public class DeviceIdleController extends SystemService private Sensor mMotionSensor; private LocationRequest mLocationRequest; private Intent mIdleIntent; + private Bundle mIdleIntentOptions; private Intent mLightIdleIntent; + private Bundle mLightIdleIntentOptions; private AnyMotionDetector mAnyMotionDetector; private final AppStateTrackerImpl mAppStateTracker; @GuardedBy("this") @@ -1798,10 +1801,12 @@ public class DeviceIdleController extends SystemService } catch (RemoteException e) { } if (deepChanged) { - getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL); + getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL, + null /* receiverPermission */, mIdleIntentOptions); } if (lightChanged) { - getContext().sendBroadcastAsUser(mLightIdleIntent, UserHandle.ALL); + getContext().sendBroadcastAsUser(mLightIdleIntent, UserHandle.ALL, + null /* receiverPermission */, mLightIdleIntentOptions); } EventLogTags.writeDeviceIdleOnComplete(); mGoingIdleWakeLock.release(); @@ -1821,13 +1826,13 @@ public class DeviceIdleController extends SystemService incActiveIdleOps(); mLocalActivityManager.broadcastIntentWithCallback(mIdleIntent, mIdleStartedDoneReceiver, null, UserHandle.USER_ALL, - null, null, null); + null, null, mIdleIntentOptions); } if (lightChanged) { incActiveIdleOps(); mLocalActivityManager.broadcastIntentWithCallback(mLightIdleIntent, mIdleStartedDoneReceiver, null, UserHandle.USER_ALL, - null, null, null); + null, null, mLightIdleIntentOptions); } // Always start with one active op for the message being sent here. // Now we are done! @@ -1849,10 +1854,12 @@ public class DeviceIdleController extends SystemService } catch (RemoteException e) { } if (deepChanged) { - getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL); + getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL, + null /* receiverPermission */, mIdleIntentOptions); } if (lightChanged) { - getContext().sendBroadcastAsUser(mLightIdleIntent, UserHandle.ALL); + getContext().sendBroadcastAsUser(mLightIdleIntent, UserHandle.ALL, + null /* receiverPermission */, mLightIdleIntentOptions); } EventLogTags.writeDeviceIdleOffComplete(); } break; @@ -2531,6 +2538,9 @@ public class DeviceIdleController extends SystemService mLightIdleIntent = new Intent(PowerManager.ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED); mLightIdleIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND); + final BroadcastOptions options = BroadcastOptions.makeBasic(); + options.setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT); + mIdleIntentOptions = mLightIdleIntentOptions = options.toBundle(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); |