Skip to content

Commit 599ad3b

Browse files
tv-casting-app: Synchronizing on the use of NsdManager.resolveService() (#23549)
* tv-casting-app: Synchronizing on the use of NsdManager.resolveService() * Making AppParameters.discriminator private
1 parent 2075b45 commit 599ad3b

File tree

12 files changed

+157
-86
lines changed

12 files changed

+157
-86
lines changed

examples/tv-casting-app/android/App/app/src/main/java/com/chip/casting/app/CommissionerDiscoveryFragment.java

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.chip.casting.app;
22

33
import android.content.Context;
4-
import android.net.nsd.NsdManager;
5-
import android.net.wifi.WifiManager;
64
import android.os.Bundle;
75
import android.os.Handler;
86
import android.os.Looper;
@@ -69,8 +67,6 @@ public void onClick(View v) {
6967
manualCommissioningButton.setOnClickListener(manualCommissioningButtonOnClickListener);
7068

7169
Context context = this.getContext();
72-
Context applicationContext = this.getContext().getApplicationContext();
73-
7470
SuccessCallback<DiscoveredNodeData> successCallback =
7571
new SuccessCallback<DiscoveredNodeData>() {
7672
@Override
@@ -112,11 +108,7 @@ public void handle(MatterError matterError) {
112108
};
113109

114110
tvCastingApp.discoverVideoPlayerCommissioners(
115-
(WifiManager) context.getSystemService(Context.WIFI_SERVICE),
116-
(NsdManager) applicationContext.getSystemService(Context.NSD_SERVICE),
117-
DISCOVERY_DURATION_SECS,
118-
successCallback,
119-
failureCallback);
111+
DISCOVERY_DURATION_SECS, successCallback, failureCallback);
120112
}
121113

122114
@VisibleForTesting

examples/tv-casting-app/android/App/app/src/main/java/com/chip/casting/app/MainActivity.java

+4-27
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,6 @@
66
import androidx.appcompat.app.AppCompatActivity;
77
import androidx.fragment.app.Fragment;
88
import androidx.fragment.app.FragmentTransaction;
9-
import chip.appserver.ChipAppServer;
10-
import chip.platform.AndroidBleManager;
11-
import chip.platform.AndroidChipPlatform;
12-
import chip.platform.ChipMdnsCallbackImpl;
13-
import chip.platform.DiagnosticDataProviderImpl;
14-
import chip.platform.NsdManagerServiceBrowser;
15-
import chip.platform.NsdManagerServiceResolver;
16-
import chip.platform.PreferencesConfigurationManager;
17-
import chip.platform.PreferencesKeyValueStoreManager;
189
import com.chip.casting.AppParameters;
1910
import com.chip.casting.DACProviderStub;
2011
import com.chip.casting.DiscoveredNodeData;
@@ -29,7 +20,6 @@ public class MainActivity extends AppCompatActivity
2920

3021
private static final String TAG = MainActivity.class.getSimpleName();
3122

32-
private ChipAppServer chipAppServer;
3323
private TvCastingApp tvCastingApp;
3424

3525
@Override
@@ -79,30 +69,17 @@ public void handleDisconnect() {
7969
private void initJni() {
8070
tvCastingApp = new TvCastingApp();
8171

82-
tvCastingApp.setDACProvider(new DACProviderStub());
8372
Context applicationContext = this.getApplicationContext();
84-
AndroidChipPlatform chipPlatform =
85-
new AndroidChipPlatform(
86-
new AndroidBleManager(),
87-
new PreferencesKeyValueStoreManager(applicationContext),
88-
new PreferencesConfigurationManager(applicationContext),
89-
new NsdManagerServiceResolver(applicationContext),
90-
new NsdManagerServiceBrowser(applicationContext),
91-
new ChipMdnsCallbackImpl(),
92-
new DiagnosticDataProviderImpl(applicationContext));
93-
94-
chipPlatform.updateCommissionableDataProviderData(
95-
null, null, 0, GlobalCastingConstants.SetupPasscode, GlobalCastingConstants.Discriminator);
96-
97-
chipAppServer = new ChipAppServer();
98-
chipAppServer.startApp();
9973

10074
AppParameters appParameters = new AppParameters();
10175
byte[] rotatingDeviceIdUniqueId =
10276
new byte[AppParameters.MIN_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH];
10377
new Random().nextBytes(rotatingDeviceIdUniqueId);
10478
appParameters.setRotatingDeviceIdUniqueId(rotatingDeviceIdUniqueId);
105-
tvCastingApp.init(appParameters);
79+
appParameters.setDacProvider(new DACProviderStub());
80+
appParameters.setSetupPasscode(GlobalCastingConstants.SetupPasscode);
81+
appParameters.setDiscriminator(GlobalCastingConstants.Discriminator);
82+
tvCastingApp.initApp(applicationContext, appParameters);
10683
}
10784

10885
private void showFragment(Fragment fragment, boolean showOnBack) {
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
package com.chip.casting.util;
22

3-
import java.util.Arrays;
4-
import java.util.List;
5-
63
public class GlobalCastingConstants {
74
public static final String CommissionerServiceType = "_matterd._udp.";
85
public static final int CommissioningWindowDurationSecs = 3 * 60;
9-
public static int SetupPasscode = 20202021;
10-
public static int Discriminator = 0xF00;
11-
public static List<Long> CommissionerDeviceTypeFilter = Arrays.asList(35L); // Video player = 35
6+
public static final int SetupPasscode = 20202021;
7+
public static final int Discriminator = 0xF00;
128
}

examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/AppParameters.java

+30
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,14 @@
1919

2020
public class AppParameters {
2121
public static final int MIN_ROTATING_DEVICE_ID_UNIQUE_ID_LENGTH = 16;
22+
private static final int TEST_SETUP_PASSCODE = 20202021;
23+
private static final int TEST_DISCRIMINATOR = 0xF00;
24+
private DACProvider TEST_DAC_PROVIDER = new DACProviderStub();
2225

2326
private byte[] rotatingDeviceIdUniqueId;
27+
private DACProvider dacProvider = TEST_DAC_PROVIDER;
28+
private int setupPasscode = TEST_SETUP_PASSCODE;
29+
private int discriminator = TEST_DISCRIMINATOR;
2430

2531
public void setRotatingDeviceIdUniqueId(byte[] rotatingDeviceIdUniqueId) {
2632
this.rotatingDeviceIdUniqueId = rotatingDeviceIdUniqueId;
@@ -29,4 +35,28 @@ public void setRotatingDeviceIdUniqueId(byte[] rotatingDeviceIdUniqueId) {
2935
public byte[] getRotatingDeviceIdUniqueId() {
3036
return rotatingDeviceIdUniqueId;
3137
}
38+
39+
public DACProvider getDacProvider() {
40+
return dacProvider;
41+
}
42+
43+
public void setDacProvider(DACProvider dacProvider) {
44+
this.dacProvider = dacProvider;
45+
}
46+
47+
public int getSetupPasscode() {
48+
return setupPasscode;
49+
}
50+
51+
public void setSetupPasscode(int setupPasscode) {
52+
this.setupPasscode = setupPasscode;
53+
}
54+
55+
public int getDiscriminator() {
56+
return discriminator;
57+
}
58+
59+
public void setDiscriminator(int discriminator) {
60+
this.discriminator = discriminator;
61+
}
3262
}

examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdDiscoveryListener.java

+16-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.net.nsd.NsdManager;
2121
import android.net.nsd.NsdServiceInfo;
2222
import android.util.Log;
23+
import chip.platform.NsdManagerServiceResolver;
2324
import java.util.List;
2425

2526
public class NsdDiscoveryListener implements NsdManager.DiscoveryListener {
@@ -31,20 +32,23 @@ public class NsdDiscoveryListener implements NsdManager.DiscoveryListener {
3132
private final List<VideoPlayer> preCommissionedVideoPlayers;
3233
private final SuccessCallback<DiscoveredNodeData> successCallback;
3334
private final FailureCallback failureCallback;
35+
private final NsdManagerServiceResolver.NsdManagerResolverAvailState nsdManagerResolverAvailState;
3436

3537
public NsdDiscoveryListener(
3638
NsdManager nsdManager,
3739
String targetServiceType,
3840
List<Long> deviceTypeFilter,
3941
List<VideoPlayer> preCommissionedVideoPlayers,
4042
SuccessCallback<DiscoveredNodeData> successCallback,
41-
FailureCallback failureCallback) {
43+
FailureCallback failureCallback,
44+
NsdManagerServiceResolver.NsdManagerResolverAvailState nsdManagerResolverAvailState) {
4245
this.nsdManager = nsdManager;
4346
this.targetServiceType = targetServiceType;
4447
this.deviceTypeFilter = deviceTypeFilter;
4548
this.preCommissionedVideoPlayers = preCommissionedVideoPlayers;
4649
this.successCallback = successCallback;
4750
this.failureCallback = failureCallback;
51+
this.nsdManagerResolverAvailState = nsdManagerResolverAvailState;
4852
}
4953

5054
@Override
@@ -56,14 +60,18 @@ public void onDiscoveryStarted(String regType) {
5660
public void onServiceFound(NsdServiceInfo service) {
5761
Log.d(TAG, "Service discovery success. " + service);
5862
if (service.getServiceType().equals(targetServiceType)) {
63+
if (nsdManagerResolverAvailState != null) {
64+
nsdManagerResolverAvailState.acquireResolver();
65+
}
5966
nsdManager.resolveService(
6067
service,
6168
new NsdResolveListener(
6269
nsdManager,
6370
deviceTypeFilter,
6471
preCommissionedVideoPlayers,
6572
successCallback,
66-
failureCallback));
73+
failureCallback,
74+
nsdManagerResolverAvailState));
6775
} else {
6876
Log.d(TAG, "Ignoring discovered service: " + service.toString());
6977
}
@@ -79,6 +87,9 @@ public void onServiceLost(NsdServiceInfo service) {
7987
@Override
8088
public void onDiscoveryStopped(String serviceType) {
8189
Log.i(TAG, "Discovery stopped: " + serviceType);
90+
if (nsdManagerResolverAvailState != null) {
91+
nsdManagerResolverAvailState.signalFree();
92+
}
8293
}
8394

8495
@Override
@@ -93,6 +104,9 @@ public void onStartDiscoveryFailed(String serviceType, int errorCode) {
93104
@Override
94105
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
95106
Log.e(TAG, "Discovery failed to stop: Error code:" + errorCode);
107+
if (nsdManagerResolverAvailState != null) {
108+
nsdManagerResolverAvailState.signalFree();
109+
}
96110
failureCallback.handle(
97111
new MatterError(
98112
3, "NsdDiscoveryListener Discovery failed to stop: Nsd Error code:" + errorCode));

examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdResolveListener.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import android.net.nsd.NsdManager;
2121
import android.net.nsd.NsdServiceInfo;
2222
import android.util.Log;
23+
import chip.platform.NsdManagerServiceResolver;
2324
import java.util.List;
2425

2526
public class NsdResolveListener implements NsdManager.ResolveListener {
@@ -31,13 +32,15 @@ public class NsdResolveListener implements NsdManager.ResolveListener {
3132
private final List<VideoPlayer> preCommissionedVideoPlayers;
3233
private final SuccessCallback<DiscoveredNodeData> successCallback;
3334
private final FailureCallback failureCallback;
35+
private final NsdManagerServiceResolver.NsdManagerResolverAvailState nsdManagerResolverAvailState;
3436

3537
public NsdResolveListener(
3638
NsdManager nsdManager,
3739
List<Long> deviceTypeFilter,
3840
List<VideoPlayer> preCommissionedVideoPlayers,
3941
SuccessCallback<DiscoveredNodeData> successCallback,
40-
FailureCallback failureCallback) {
42+
FailureCallback failureCallback,
43+
NsdManagerServiceResolver.NsdManagerResolverAvailState nsdManagerResolverAvailState) {
4144
this.nsdManager = nsdManager;
4245
this.deviceTypeFilter = deviceTypeFilter;
4346
this.preCommissionedVideoPlayers = preCommissionedVideoPlayers;
@@ -48,13 +51,18 @@ public NsdResolveListener(
4851
}
4952
this.successCallback = successCallback;
5053
this.failureCallback = failureCallback;
54+
this.nsdManagerResolverAvailState = nsdManagerResolverAvailState;
5155
}
5256

5357
@Override
5458
public void onServiceResolved(NsdServiceInfo serviceInfo) {
5559
DiscoveredNodeData discoveredNodeData = new DiscoveredNodeData(serviceInfo);
5660
Log.d(TAG, "DiscoveredNodeData resolved: " + discoveredNodeData);
5761

62+
if (nsdManagerResolverAvailState != null) {
63+
nsdManagerResolverAvailState.signalFree();
64+
}
65+
5866
if (isPassingDeviceTypeFilter(discoveredNodeData)) {
5967
addCommissioningInfo(discoveredNodeData);
6068
successCallback.handle(discoveredNodeData);
@@ -68,6 +76,10 @@ public void onServiceResolved(NsdServiceInfo serviceInfo) {
6876

6977
@Override
7078
public void onResolveFailed(NsdServiceInfo serviceInfo, int errorCode) {
79+
if (nsdManagerResolverAvailState != null) {
80+
nsdManagerResolverAvailState.signalFree();
81+
}
82+
7183
switch (errorCode) {
7284
case NsdManager.FAILURE_ALREADY_ACTIVE:
7385
Log.e(TAG, "NsdResolveListener FAILURE_ALREADY_ACTIVE - Service: " + serviceInfo);

0 commit comments

Comments
 (0)