Addressed comments by yunhanw-google related to error checking and logging and also fixed a tv-casting-app connection bug (#33010)
diff --git a/examples/tv-casting-app/android/App/app/src/main/java/com/matter/casting/DiscoveryExampleFragment.java b/examples/tv-casting-app/android/App/app/src/main/java/com/matter/casting/DiscoveryExampleFragment.java
index 46401af..4907686 100644
--- a/examples/tv-casting-app/android/App/app/src/main/java/com/matter/casting/DiscoveryExampleFragment.java
+++ b/examples/tv-casting-app/android/App/app/src/main/java/com/matter/casting/DiscoveryExampleFragment.java
@@ -216,7 +216,6 @@
public void onPause() {
super.onPause();
Log.i(TAG, "onPause() called");
- stopDiscovery();
}
/** Interface for notifying the host. */
diff --git a/examples/tv-casting-app/android/App/app/src/main/jni/cpp/core/CastingPlayerDiscovery-JNI.cpp b/examples/tv-casting-app/android/App/app/src/main/jni/cpp/core/CastingPlayerDiscovery-JNI.cpp
index df79e60..26526df 100644
--- a/examples/tv-casting-app/android/App/app/src/main/jni/cpp/core/CastingPlayerDiscovery-JNI.cpp
+++ b/examples/tv-casting-app/android/App/app/src/main/jni/cpp/core/CastingPlayerDiscovery-JNI.cpp
@@ -246,7 +246,7 @@
return support::convertMatterErrorFromCppToJava(CHIP_NO_ERROR);
}
- else if (DiscoveryDelegateImpl::GetInstance()->castingPlayerChangeListenerJavaObject.ObjectRef() == nullptr)
+ else if (!DiscoveryDelegateImpl::GetInstance()->castingPlayerChangeListenerJavaObject.HasValidObjectRef())
{
ChipLogError(
AppServer,
diff --git a/src/platform/android/DnssdImpl.cpp b/src/platform/android/DnssdImpl.cpp
index b272ed5..290b349 100644
--- a/src/platform/android/DnssdImpl.cpp
+++ b/src/platform/android/DnssdImpl.cpp
@@ -191,6 +191,8 @@
std::string serviceType = GetFullTypeWithSubTypes(type, protocol);
JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
+ VerifyOrReturnError(env != nullptr, CHIP_JNI_ERROR_NO_ENV,
+ ChipLogError(Discovery, "Failed to GetEnvForCurrentThread for ChipDnssdBrowse"));
UtfString jniServiceType(env, serviceType.c_str());
env->CallVoidMethod(sBrowserObject.ObjectRef(), sBrowseMethod, jniServiceType.jniValue(), reinterpret_cast<jlong>(callback),
@@ -204,7 +206,9 @@
return CHIP_JNI_ERROR_EXCEPTION_THROWN;
}
- auto sdCtx = chip::Platform::New<BrowseContext>(callback);
+ auto sdCtx = chip::Platform::New<BrowseContext>(callback);
+ VerifyOrReturnError(nullptr != sdCtx, CHIP_ERROR_NO_MEMORY,
+ ChipLogError(Discovery, "Failed allocate memory for BrowseContext in ChipDnssdBrowse"));
*browseIdentifier = reinterpret_cast<intptr_t>(sdCtx);
return CHIP_NO_ERROR;
@@ -212,14 +216,19 @@
CHIP_ERROR ChipDnssdStopBrowse(intptr_t browseIdentifier)
{
+ VerifyOrReturnError(browseIdentifier != 0, CHIP_ERROR_INVALID_ARGUMENT,
+ ChipLogError(Discovery, "ChipDnssdStopBrowse Invalid argument browseIdentifier = 0"));
VerifyOrReturnError(sBrowserObject.HasValidObjectRef() && sStopBrowseMethod != nullptr, CHIP_ERROR_INVALID_ARGUMENT);
JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread();
- auto ctx = reinterpret_cast<BrowseContext *>(browseIdentifier);
+ VerifyOrReturnError(env != nullptr, CHIP_JNI_ERROR_NO_ENV,
+ ChipLogError(Discovery, "Failed to GetEnvForCurrentThread for ChipDnssdStopBrowse"));
+ auto ctx = reinterpret_cast<BrowseContext *>(browseIdentifier);
env->CallVoidMethod(sBrowserObject.ObjectRef(), sStopBrowseMethod, reinterpret_cast<jlong>(ctx->callback));
chip::Platform::Delete(ctx);
+ ctx = nullptr;
if (env->ExceptionCheck())
{
ChipLogError(Discovery, "Java exception in ChipDnssdStopBrowse");
@@ -339,6 +348,12 @@
env->ExceptionClear();
}
+ if (sStopBrowseMethod == nullptr)
+ {
+ ChipLogError(Discovery, "Failed to access Discover 'stopDiscover' method");
+ env->ExceptionClear();
+ }
+
if (sGetTextEntryKeysMethod == nullptr)
{
ChipLogError(Discovery, "Failed to access MdnsCallback 'getTextEntryKeys' method");