From 7b40aa36e8419e134c8171e22a7fa2a2d3bf85a7 Mon Sep 17 00:00:00 2001
From: Xinyi Zhou <zxy@google.com>
Date: Mon, 7 Aug 2023 17:32:36 -0700
Subject: [PATCH] [nearby] Returns error code for startBroadcast if there is an
 existing broadcast

Fix: 294461081
Test: -m
Ignore-AOSP-First: nearby_not_in_aosp_yet
Change-Id: Icc3227ec5aa7d0ea7d33b7100ef131928577b5a7
---
 .../nearby/managers/BroadcastProviderManager.java     |  6 ++++++
 .../nearby/managers/BroadcastProviderManagerTest.java | 11 +++++++++++
 2 files changed, 17 insertions(+)

diff --git a/nearby/service/java/com/android/server/nearby/managers/BroadcastProviderManager.java b/nearby/service/java/com/android/server/nearby/managers/BroadcastProviderManager.java
index d95032cb4a..28a33fa1c0 100644
--- a/nearby/service/java/com/android/server/nearby/managers/BroadcastProviderManager.java
+++ b/nearby/service/java/com/android/server/nearby/managers/BroadcastProviderManager.java
@@ -79,6 +79,12 @@ public class BroadcastProviderManager implements BleBroadcastProvider.BroadcastL
                 if (listener == null) {
                     return;
                 }
+                if (mBroadcastListener != null) {
+                    Log.i(TAG, "We do not support multi clients yet,"
+                            + " please stop previous broadcast first.");
+                    reportBroadcastStatus(listener, BroadcastCallback.STATUS_FAILURE);
+                    return;
+                }
                 if (!mNearbyConfiguration.isTestAppSupported()) {
                     NearbyConfiguration configuration = new NearbyConfiguration();
                     if (!configuration.isPresenceBroadcastLegacyEnabled()) {
diff --git a/nearby/tests/unit/src/com/android/server/nearby/managers/BroadcastProviderManagerTest.java b/nearby/tests/unit/src/com/android/server/nearby/managers/BroadcastProviderManagerTest.java
index 47133f4b3e..7ff7b13ab5 100644
--- a/nearby/tests/unit/src/com/android/server/nearby/managers/BroadcastProviderManagerTest.java
+++ b/nearby/tests/unit/src/com/android/server/nearby/managers/BroadcastProviderManagerTest.java
@@ -24,6 +24,7 @@ import static com.android.server.nearby.NearbyConfiguration.NEARBY_SUPPORT_TEST_
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -125,6 +126,16 @@ public class BroadcastProviderManagerTest {
         verify(mBinder).unlinkToDeath(any(), eq(0));
     }
 
+    @Test
+    public void testRegisterAdvertising_twoTimes_fail() throws Exception {
+        IBroadcastListener newListener = mock(IBroadcastListener.class);
+        IBinder newBinder = mock(IBinder.class);
+        when(newListener.asBinder()).thenReturn(newBinder);
+        mBroadcastProviderManager.startBroadcast(mBroadcastRequest, mBroadcastListener);
+        mBroadcastProviderManager.startBroadcast(mBroadcastRequest, newListener);
+        verify(newListener).onStatusChanged(eq(BroadcastCallback.STATUS_FAILURE));
+    }
+
     @Test
     public void testStartAdvertising_featureDisabled() throws Exception {
         DeviceConfig.setProperty(
-- 
GitLab