Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59667c9e authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

Avoid sending the package-specific BATTERY_CHANGED as sticky bcast.

Sending this as sticky results in multiple sticky entries for
ACTION_BATTERY_CHANGED broadcast. This results in enqueueing multiple
broadcasts whenever someone queries for this, which is unnecessary.

Bug: 336832816
Test: manual
Flag: com.android.server.flags.pkg_targeted_battery_changed_not_sticky
Change-Id: I55c4e139646d852bec6ed195cf4599d89d0a01f7
parent 64fed7b8
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -777,18 +777,24 @@ public final class BatteryService extends SystemService {
                    + ", info:" + mHealthInfo.toString());
        }

        mHandler.post(() -> broadcastBatteryChangedIntent(intent, mBatteryChangedOptions));
        mHandler.post(() -> broadcastBatteryChangedIntent(mContext,
                intent, mBatteryChangedOptions));
    }

    private static void broadcastBatteryChangedIntent(Intent intent, Bundle options) {
    private static void broadcastBatteryChangedIntent(Context context, Intent intent,
            Bundle options) {
        // TODO (293959093): It is important that SystemUI receives this broadcast as soon as
        // possible. Ideally, it should be using binder callbacks but until then, dispatch this
        // as a foreground broadcast to SystemUI.
        final Intent fgIntent = new Intent(intent);
        fgIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        fgIntent.setPackage(sSystemUiPackage);
        if (com.android.server.flags.Flags.pkgTargetedBatteryChangedNotSticky()) {
            context.sendBroadcastAsUser(fgIntent, UserHandle.ALL, null, options);
        } else {
            ActivityManager.broadcastStickyIntent(fgIntent, AppOpsManager.OP_NONE,
                    options, UserHandle.USER_ALL);
        }

        ActivityManager.broadcastStickyIntent(intent, new String[] {sSystemUiPackage},
                AppOpsManager.OP_NONE, options, UserHandle.USER_ALL);
+11 −0
Original line number Diff line number Diff line
@@ -17,3 +17,14 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    namespace: "backstage_power"
    name: "pkg_targeted_battery_changed_not_sticky"
    description: "Avoid sending the package targeted BATTERY_CHANGED broadcast as sticky"
    bug: "336832816"
    is_fixed_read_only: true
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}