Fix tv-casting-app implementation of commissioner discovery/resolution (#23787)
* tv-casting-app/darwin: fixing condition checked before returning from the CommissionableDataProviderImpl
* tv-casting-app/android: resolving deadlock in using the NsdManager
* Reusing one ExecutorService per chrisdecenzo's feedback
diff --git a/examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdDiscoveryListener.java b/examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdDiscoveryListener.java
index b0644c4..5fda64c 100644
--- a/examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdDiscoveryListener.java
+++ b/examples/tv-casting-app/android/App/app/src/main/jni/com/chip/casting/NsdDiscoveryListener.java
@@ -22,6 +22,8 @@
import android.util.Log;
import chip.platform.NsdManagerServiceResolver;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
public class NsdDiscoveryListener implements NsdManager.DiscoveryListener {
private static final String TAG = NsdDiscoveryListener.class.getSimpleName();
@@ -33,6 +35,7 @@
private final SuccessCallback<DiscoveredNodeData> successCallback;
private final FailureCallback failureCallback;
private final NsdManagerServiceResolver.NsdManagerResolverAvailState nsdManagerResolverAvailState;
+ private final ExecutorService resolutionExecutor;
public NsdDiscoveryListener(
NsdManager nsdManager,
@@ -49,6 +52,7 @@
this.successCallback = successCallback;
this.failureCallback = failureCallback;
this.nsdManagerResolverAvailState = nsdManagerResolverAvailState;
+ this.resolutionExecutor = Executors.newSingleThreadExecutor();
}
@Override
@@ -58,24 +62,32 @@
@Override
public void onServiceFound(NsdServiceInfo service) {
- Log.d(TAG, "Service discovery success. " + service);
- if (service.getServiceType().equals(targetServiceType)) {
- if (nsdManagerResolverAvailState != null) {
- nsdManagerResolverAvailState.acquireResolver();
- }
- nsdManager.resolveService(
- service,
- new NsdResolveListener(
- nsdManager,
- deviceTypeFilter,
- preCommissionedVideoPlayers,
- successCallback,
- failureCallback,
- nsdManagerResolverAvailState,
- 1));
- } else {
- Log.d(TAG, "Ignoring discovered service: " + service.toString());
- }
+ this.resolutionExecutor.execute(
+ new Runnable() {
+ @Override
+ public void run() {
+ Log.d(TAG, "Service discovery success. " + service);
+ if (service.getServiceType().equals(targetServiceType)) {
+ if (nsdManagerResolverAvailState != null) {
+ nsdManagerResolverAvailState.acquireResolver();
+ }
+
+ Log.d(TAG, "Calling NsdManager.resolveService for " + service);
+ nsdManager.resolveService(
+ service,
+ new NsdResolveListener(
+ nsdManager,
+ deviceTypeFilter,
+ preCommissionedVideoPlayers,
+ successCallback,
+ failureCallback,
+ nsdManagerResolverAvailState,
+ 1));
+ } else {
+ Log.d(TAG, "Ignoring discovered service: " + service.toString());
+ }
+ }
+ });
}
@Override
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionableDataProviderImpl.hpp b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionableDataProviderImpl.hpp
index 872feb5..b05ce4a 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionableDataProviderImpl.hpp
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/CommissionableDataProviderImpl.hpp
@@ -74,7 +74,7 @@
CHIP_ERROR GetSpake2pIterationCount(uint32_t & iterationCount) override
{
- if (mSetupDiscriminator > 0)
+ if (mSpake2pIterationCount > 0)
{
iterationCount = mSpake2pIterationCount;
}
diff --git a/examples/tv-casting-app/darwin/TvCasting/TvCasting.xcodeproj/project.pbxproj b/examples/tv-casting-app/darwin/TvCasting/TvCasting.xcodeproj/project.pbxproj
index dfaf0a6..6252d2c 100644
--- a/examples/tv-casting-app/darwin/TvCasting/TvCasting.xcodeproj/project.pbxproj
+++ b/examples/tv-casting-app/darwin/TvCasting/TvCasting.xcodeproj/project.pbxproj
@@ -420,7 +420,7 @@
CoreData,
"-Wl,-unexported_symbol,\"__Z*\"",
);
- PRODUCT_BUNDLE_IDENTIFIER = "com.matter.TvCasting-sharadb";
+ PRODUCT_BUNDLE_IDENTIFIER = com.matter.TvCasting;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
SWIFT_EMIT_LOC_STRINGS = YES;
@@ -467,7 +467,7 @@
"-Wformat-nonliteral",
"-Wformat-security",
);
- PRODUCT_BUNDLE_IDENTIFIER = "com.matter.TvCasting-sharadb";
+ PRODUCT_BUNDLE_IDENTIFIER = com.matter.TvCasting;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
SWIFT_EMIT_LOC_STRINGS = YES;
diff --git a/examples/tv-casting-app/darwin/TvCasting/TvCasting/TvCastingApp.swift b/examples/tv-casting-app/darwin/TvCasting/TvCasting/TvCastingApp.swift
index 26e4768..daef2e7 100644
--- a/examples/tv-casting-app/darwin/TvCasting/TvCasting/TvCastingApp.swift
+++ b/examples/tv-casting-app/darwin/TvCasting/TvCasting/TvCastingApp.swift
@@ -38,6 +38,12 @@
}
appParameters.rotatingDeviceIdUniqueId = Data(rotatingDeviceIdUniqueId)
+ let onboardingParameters: OnboardingPayload = OnboardingPayload()
+ onboardingParameters.setupPasscode = 20202021
+ onboardingParameters.setupDiscriminator = 3840
+
+ appParameters.onboardingPayload = onboardingParameters
+
castingServerBridge.initApp(appParameters, clientQueue: DispatchQueue.main, initAppStatusHandler: { (result: Bool) -> () in
self.Log.info("initApp result \(result)")
})