From d0c73d637370eba760d1ed4a1acb8f1e8354757d Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 29 Mar 2023 13:56:09 -0600 Subject: [PATCH] Only deliver latest WIFI_DISPLAY_STATUS_CHANGED. We've heard reports of apps getting confused about hearing thrashing WIFI_DISPLAY_STATUS_CHANGED broadcasts when they're thawed. To mitigate this, only deliver the latest instance of the broadcast, replacing any stale broadcasts. Bug: 273923757 Test: manual Change-Id: Ie8e4a7213f7b4838b33fdc6cf4ccca9520ad49f9 --- .../com/android/server/display/WifiDisplayAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/display/WifiDisplayAdapter.java b/services/core/java/com/android/server/display/WifiDisplayAdapter.java index e8327018e1440..e3d38e7a25e91 100644 --- a/services/core/java/com/android/server/display/WifiDisplayAdapter.java +++ b/services/core/java/com/android/server/display/WifiDisplayAdapter.java @@ -16,6 +16,7 @@ package com.android.server.display; +import android.app.BroadcastOptions; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -421,6 +422,7 @@ final class WifiDisplayAdapter extends DisplayAdapter { // Runs on the handler. private void handleSendStatusChangeBroadcast() { final Intent intent; + final BroadcastOptions options; synchronized (getSyncRoot()) { if (!mPendingStatusChangeBroadcast) { return; @@ -431,10 +433,13 @@ final class WifiDisplayAdapter extends DisplayAdapter { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); intent.putExtra(DisplayManager.EXTRA_WIFI_DISPLAY_STATUS, getWifiDisplayStatusLocked()); + + options = BroadcastOptions.makeBasic(); + options.setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT); } // Send protected broadcast about wifi display status to registered receivers. - getContext().sendBroadcastAsUser(intent, UserHandle.ALL); + getContext().sendBroadcastAsUser(intent, UserHandle.ALL, null, options.toBundle()); } private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {