Skip to content

Commit 77df561

Browse files
MatterCallback
1 parent 0a96a90 commit 77df561

File tree

8 files changed

+86
-67
lines changed

8 files changed

+86
-67
lines changed

examples/tv-casting-app/android/App/app/src/main/jni/com/matter/casting/core/MatterCastingPlayerDiscovery.java

+14
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616
*/
1717
package com.matter.casting.core;
1818

19+
import android.util.Log;
20+
1921
import com.matter.casting.support.MatterError;
2022
import java.util.List;
2123

24+
import chip.devicecontroller.ChipDeviceController;
25+
2226
/**
2327
* MatterCastingPlayerDiscovery provides an API to control Matter Casting Player discovery over
2428
* DNS-SD, and to collect discovery results. This class provides methods to add and remove a
@@ -34,6 +38,16 @@ public static MatterCastingPlayerDiscovery getInstance() {
3438
if (matterCastingPlayerDiscoveryInstance == null) {
3539
matterCastingPlayerDiscoveryInstance = new MatterCastingPlayerDiscovery();
3640
}
41+
42+
try
43+
{
44+
ChipDeviceController c = new ChipDeviceController(null);
45+
}
46+
catch(Throwable t)
47+
{
48+
Log.d(TAG, "Caught: " + t);
49+
}
50+
3751
return matterCastingPlayerDiscoveryInstance;
3852
};
3953

examples/tv-casting-app/android/App/app/src/main/jni/com/matter/casting/core/MatterEndpoint.java

+15-19
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,15 @@
2020

2121
import com.chip.casting.MatterError;
2222
import com.matter.casting.support.DeviceTypeStruct;
23-
//import com.matter.casting.support.FailureCallback;
24-
//import com.matter.casting.support.SuccessCallback;
25-
23+
import com.matter.casting.support.FailureCallback;
24+
import com.matter.casting.support.SuccessCallback;
2625
import java.util.List;
2726
import java.util.Objects;
2827
import java.util.concurrent.CompletableFuture;
2928
import java.util.concurrent.ExecutionException;
3029
import java.util.concurrent.TimeUnit;
3130
import java.util.concurrent.TimeoutException;
3231

33-
//import chip.devicecontroller.GetConnectedDeviceCallbackJni;
34-
3532
public class MatterEndpoint implements Endpoint {
3633
private static final String TAG = MatterEndpoint.class.getSimpleName();
3734
protected long _cppEndpoint;
@@ -51,23 +48,11 @@ public class MatterEndpoint implements Endpoint {
5148
@Override
5249
public native CastingPlayer getCastingPlayer();
5350

54-
/*protected native void getDeviceProxy(GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback callback);
51+
protected native void getDeviceProxy(SuccessCallback<Long> successCallback, FailureCallback failureCallback);
5552

5653
protected CompletableFuture<Long> getDeviceProxy()
5754
{
5855
CompletableFuture<Long> future = new CompletableFuture<>();
59-
getDeviceProxy(new GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback() {
60-
@Override
61-
public void onDeviceConnected(long deviceProxyPtr) {
62-
future.complete(deviceProxyPtr);
63-
}
64-
65-
@Override
66-
public void onConnectionFailure(long nodeId, Exception error) {
67-
future.completeExceptionally(error);
68-
}
69-
});
70-
7156
getDeviceProxy(new SuccessCallback<Long>() {
7257
@Override
7358
public void handle(Long deviceProxyPtr) {
@@ -80,6 +65,17 @@ public void handle(MatterError err) {
8065
}
8166
});
8267

68+
/* getDeviceProxy(new GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback() {
69+
@Override
70+
public void onDeviceConnected(long deviceProxyPtr) {
71+
future.complete(deviceProxyPtr);
72+
}
73+
74+
@Override
75+
public void onConnectionFailure(long nodeId, Exception error) {
76+
future.completeExceptionally(error);
77+
}
78+
});*/
8379
return future;
8480
}
8581

@@ -94,7 +90,7 @@ public void testGetCluster()
9490
Log.e(TAG, "getDeviceProxy exception" + e);
9591
}
9692
Log.d(TAG, "getDeviceProxy ending");
97-
}*/
93+
}
9894

9995
@Override
10096
public native <T extends Cluster> T getCluster(Class<T> clusterClass);

examples/tv-casting-app/android/App/app/src/main/jni/cpp/core/MatterEndpoint-JNI.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#include "MatterEndpoint-JNI.h"
2020

2121
#include "../JNIDACProvider.h"
22-
#include "../support/Callback-JNI.h"
22+
#include "../support/MatterCallback-JNI.h"
2323
#include "../support/Converters-JNI.h"
2424
#include "../support/RotatingDeviceIdUniqueIdProvider-JNI.h"
2525
#include "clusters/Clusters.h" // from tv-casting-common
@@ -30,8 +30,6 @@
3030

3131
#include <app/clusters/bindings/BindingManager.h>
3232
#include <app/server/Server.h>
33-
#include <controller/java/AndroidCallbacks.h>
34-
//#include "AndroidCallbacks.h"
3533
#include <jni.h>
3634
#include <lib/support/JniReferences.h>
3735
#include <lib/support/JniTypeWrappers.h>
@@ -96,12 +94,12 @@ JNI_METHOD(void, getDeviceProxy)
9694
Endpoint * endpoint = support::convertEndpointFromJavaToCpp(thiz);
9795
VerifyOrReturn(endpoint != nullptr, ChipLogError(AppServer, "MatterEndpoint-JNI::getDeviceProxy() endpoint == nullptr"));
9896

99-
chip::Controller::GetConnectedDeviceCallback * connectedDeviceCallback = reinterpret_cast<chip::Controller::GetConnectedDeviceCallback *>(callbackHandle);
97+
/*chip::Controller::GetConnectedDeviceCallback * connectedDeviceCallback = reinterpret_cast<chip::Controller::GetConnectedDeviceCallback *>(callbackHandle);
10098
10199
chip::NodeId nodeId = endpoint->GetCastingPlayer()->GetNodeId();
102100
103101
chip::Server::GetInstance().GetCASESessionManager()->FindOrEstablishSession(
104-
chip::ScopedNodeId(endpoint->GetCastingPlayer()->GetNodeId(), endpoint->GetCastingPlayer()->GetFabricIndex()), &connectedDeviceCallback->mOnSuccess, &connectedDeviceCallback->mOnFailure);
102+
chip::ScopedNodeId(endpoint->GetCastingPlayer()->GetNodeId(), endpoint->GetCastingPlayer()->GetFabricIndex()), &connectedDeviceCallback->mOnSuccess, &connectedDeviceCallback->mOnFailure);*/
105103

106104
//endpoint->GetCastingPlayer()->FindOrEstablishSession(&nodeId, &connectedDeviceCallback->mOnSuccess, &connectedDeviceCallback->mOnFailure);
107105
/*

examples/tv-casting-app/android/App/app/src/main/jni/cpp/support/Callback-JNI.cpp examples/tv-casting-app/android/App/app/src/main/jni/cpp/support/MatterCallback-JNI.cpp

+28-7
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
*
1717
*/
1818

19-
#include "Callback-JNI.h"
19+
#include "MatterCallback-JNI.h"
2020

21-
CHIP_ERROR CallbackBaseJNI::SetUp(JNIEnv * env, jobject inHandler)
21+
CHIP_ERROR MatterCallbackBaseJNI::SetUp(JNIEnv * env, jobject inHandler)
2222
{
23-
ChipLogProgress(AppServer, "CallbackBaseJNI::SetUp called");
23+
ChipLogProgress(AppServer, "MatterCallbackBaseJNI::SetUp called");
2424
CHIP_ERROR err = CHIP_NO_ERROR;
2525

2626
mObject = env->NewGlobalRef(inHandler);
@@ -42,16 +42,16 @@ CHIP_ERROR CallbackBaseJNI::SetUp(JNIEnv * env, jobject inHandler)
4242
exit:
4343
if (err != CHIP_NO_ERROR)
4444
{
45-
ChipLogError(AppServer, "CallbackBaseJNI::SetUp error: %s", err.AsString());
45+
ChipLogError(AppServer, "MatterCallbackBaseJNI::SetUp error: %s", err.AsString());
4646
return err;
4747
}
4848

4949
return err;
5050
}
5151

52-
void FailureHandlerJNI::Handle(CHIP_ERROR callbackErr)
52+
void MatterFailureHandlerJNI::Handle(CHIP_ERROR callbackErr)
5353
{
54-
ChipLogProgress(AppServer, "FailureHandlerJNI called with %" CHIP_ERROR_FORMAT, callbackErr.Format());
54+
ChipLogProgress(AppServer, "MatterFailureHandlerJNI called with %" CHIP_ERROR_FORMAT, callbackErr.Format());
5555

5656
JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
5757
chip::UtfString jniCallbackErrString(env, callbackErr.AsString());
@@ -64,6 +64,27 @@ void FailureHandlerJNI::Handle(CHIP_ERROR callbackErr)
6464
exit:
6565
if (err != CHIP_NO_ERROR)
6666
{
67-
ChipLogError(AppServer, "FailureHandlerJNI status error: %s", err.AsString());
67+
ChipLogError(AppServer, "MatterFailureHandlerJNI status error: %s", err.AsString());
6868
}
6969
}
70+
71+
jobject ConvertToLongJObject(jlong responseData)
72+
{
73+
JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
74+
75+
jclass responseTypeClass = env->FindClass("java/lang/Long");
76+
if (responseTypeClass == nullptr)
77+
{
78+
ChipLogError(AppServer, "ConvertToJObject: Class for Response Type not found!");
79+
return nullptr;
80+
}
81+
82+
jmethodID constructor = env->GetMethodID(responseTypeClass, "<init>", "(J)V");
83+
return env->NewObject(responseTypeClass, constructor, responseData);
84+
}
85+
86+
jobject DeviceProxyMatterSuccessHandlerJNI::ConvertToJObject(jlong responseData)
87+
{
88+
ChipLogProgress(AppServer, "DeviceProxyMatterSuccessHandlerJNI::ConvertToJObject called");
89+
return ConvertToLongJObject(responseData);
90+
}

examples/tv-casting-app/android/App/app/src/main/jni/cpp/support/Callback-JNI.h examples/tv-casting-app/android/App/app/src/main/jni/cpp/support/MatterCallback-JNI.h

+14-14
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
#include <lib/support/JniReferences.h>
2323
#include <lib/support/JniTypeWrappers.h>
2424

25-
class CallbackBaseJNI
25+
class MatterCallbackBaseJNI
2626
{
2727
public:
28-
CallbackBaseJNI(const char * methodSignature) { mMethodSignature = methodSignature; }
28+
MatterCallbackBaseJNI(const char * methodSignature) { mMethodSignature = methodSignature; }
2929
CHIP_ERROR SetUp(JNIEnv * env, jobject inHandler);
3030

3131
protected:
@@ -36,26 +36,26 @@ class CallbackBaseJNI
3636
const char * mMethodSignature = nullptr;
3737
};
3838

39-
class FailureHandlerJNI : public CallbackBaseJNI
39+
class MatterFailureHandlerJNI : public MatterCallbackBaseJNI
4040
{
4141
public:
42-
FailureHandlerJNI() : CallbackBaseJNI("(ILjava/lang/String;)V") {}
42+
MatterFailureHandlerJNI() : MatterCallbackBaseJNI("(ILjava/lang/String;)V") {}
4343
void Handle(CHIP_ERROR err);
4444
};
4545

4646
template <typename T>
47-
class SuccessHandlerJNI : public CallbackBaseJNI
47+
class MatterSuccessHandlerJNI : public MatterCallbackBaseJNI
4848
{
4949
public:
50-
SuccessHandlerJNI(const char * methodSignature) : CallbackBaseJNI(methodSignature) {}
50+
MatterSuccessHandlerJNI(const char * methodSignature) : MatterCallbackBaseJNI(methodSignature) {}
5151

52-
virtual ~SuccessHandlerJNI() = 0;
52+
virtual ~MatterSuccessHandlerJNI() = 0;
5353

5454
virtual jobject ConvertToJObject(T responseData) = 0;
5555

5656
void Handle(T responseData)
5757
{
58-
ChipLogProgress(AppServer, "SuccessHandlerJNI::Handle called");
58+
ChipLogProgress(AppServer, "MatterSuccessHandlerJNI::Handle called");
5959

6060
JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
6161
jobject jResponseData = ConvertToJObject(responseData);
@@ -68,18 +68,18 @@ class SuccessHandlerJNI : public CallbackBaseJNI
6868
exit:
6969
if (err != CHIP_NO_ERROR)
7070
{
71-
ChipLogError(AppServer, "SuccessHandlerJNI::Handle status error: %s", err.AsString());
71+
ChipLogError(AppServer, "MatterSuccessHandlerJNI::Handle status error: %s", err.AsString());
7272
}
7373
}
7474
};
7575

7676
template <typename T>
77-
SuccessHandlerJNI<T>::~SuccessHandlerJNI(){};
77+
MatterSuccessHandlerJNI<T>::~MatterSuccessHandlerJNI(){};
7878

79-
class DeviceProxySuccessHandlerJNI
80-
: public SuccessHandlerJNI<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableArgType>
79+
class DeviceProxyMatterSuccessHandlerJNI
80+
: public MatterSuccessHandlerJNI<jlong>
8181
{
8282
public:
83-
DeviceProxySuccessHandlerJNI() : SuccessHandlerJNI("(Ljava/lang/Long;)V") {}
84-
jobject ConvertToJObject(chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableArgType responseData);
83+
DeviceProxyMatterSuccessHandlerJNI() : MatterSuccessHandlerJNI("(Ljava/lang/Long;)V") {}
84+
jobject ConvertToJObject(jlong responseData);
8585
};

examples/tv-casting-app/android/App/app/src/main/jni/cpp/support/RotatingDeviceIdUniqueIdProvider-JNI.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ MutableByteSpan * RotatingDeviceIdUniqueIdProviderJNI::Get()
8484
ChipLogProgress(AppServer, "RotatingDeviceIdUniqueIdProviderJNI.Get() called");
8585
mRotatingDeviceIdUniqueIdSpan = MutableByteSpan(mRotatingDeviceIdUniqueId);
8686
CHIP_ERROR err = GetJavaByteByMethod(mGetMethod, mRotatingDeviceIdUniqueIdSpan);
87-
VerifyOrReturnValue(err != CHIP_NO_ERROR, nullptr,
87+
VerifyOrReturnValue(err == CHIP_NO_ERROR, nullptr,
8888
ChipLogError(AppServer, "Error calling GetJavaByteByMethod %" CHIP_ERROR_FORMAT, err.Format()));
8989
return &mRotatingDeviceIdUniqueIdSpan;
9090
}

examples/tv-casting-app/android/BUILD.gn

+7-7
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,18 @@ shared_library("jni") {
5151
"App/app/src/main/jni/cpp/core/MatterCommandTemplate-JNI.h",
5252
"App/app/src/main/jni/cpp/core/MatterEndpoint-JNI.cpp",
5353
"App/app/src/main/jni/cpp/core/MatterEndpoint-JNI.h",
54-
55-
#"App/app/src/main/jni/cpp/support/Callback-JNI.cpp",
56-
#"App/app/src/main/jni/cpp/support/Callback-JNI.h",
5754
"App/app/src/main/jni/cpp/support/Converters-JNI.cpp",
5855
"App/app/src/main/jni/cpp/support/Converters-JNI.h",
56+
"App/app/src/main/jni/cpp/support/MatterCallback-JNI.cpp",
57+
"App/app/src/main/jni/cpp/support/MatterCallback-JNI.h",
5958
"App/app/src/main/jni/cpp/support/RotatingDeviceIdUniqueIdProvider-JNI.cpp",
6059
"App/app/src/main/jni/cpp/support/RotatingDeviceIdUniqueIdProvider-JNI.h",
6160
]
6261

6362
deps = [
6463
"${chip_root}/examples/tv-casting-app/tv-casting-common",
6564
"${chip_root}/src/app/server/java:jni",
66-
"${chip_root}/src/controller/java:jni",
65+
"${chip_root}/src/controller/java",
6766
"${chip_root}/src/lib",
6867
"${chip_root}/third_party/inipp",
6968
]
@@ -81,7 +80,7 @@ android_library("java") {
8180
deps = [
8281
":android",
8382
"${chip_root}/src/app/server/java",
84-
"${chip_root}/src/controller/java:java",
83+
"${chip_root}/src/controller/java",
8584
"${chip_root}/src/platform/android:java",
8685
"${chip_root}/third_party/android_deps:annotation",
8786
]
@@ -132,7 +131,9 @@ android_library("java") {
132131
"App/app/src/main/jni/com/matter/casting/support/DataProvider.java",
133132
"App/app/src/main/jni/com/matter/casting/support/DeviceTypeStruct.java",
134133
"App/app/src/main/jni/com/matter/casting/support/EndpointFilter.java",
134+
"App/app/src/main/jni/com/matter/casting/support/FailureCallback.java",
135135
"App/app/src/main/jni/com/matter/casting/support/MatterError.java",
136+
"App/app/src/main/jni/com/matter/casting/support/SuccessCallback.java",
136137
]
137138

138139
javac_flags = [ "-Xlint:deprecation" ]
@@ -151,8 +152,7 @@ group("default") {
151152
":java",
152153
":jni",
153154
"${chip_root}/src/app/server/java",
154-
"${chip_root}/src/controller/java:java",
155-
"${chip_root}/src/controller/java:jni",
155+
"${chip_root}/src/controller/java",
156156
"${chip_root}/src/platform/android:java",
157157
]
158158
}

scripts/build/builders/android.py

+4-14
Original file line numberDiff line numberDiff line change
@@ -466,13 +466,14 @@ def _build(self):
466466
self.root, "examples/", self.app.ExampleName(), "android/App/app/libs"
467467
)
468468

469-
#libs = ["libc++_shared.so", "libCHIPController.so", "libTvCastingApp.so"]
470-
libs = ["libc++_shared.so", "libTvCastingApp.so"]
471-
469+
libs = ["libc++_shared.so", "libCHIPController.so", "libTvCastingApp.so"]
470+
472471
jars = {
473472
"AndroidPlatform.jar": "third_party/connectedhomeip/src/platform/android/AndroidPlatform.jar",
474473
"CHIPAppServer.jar": "third_party/connectedhomeip/src/app/server/java/CHIPAppServer.jar",
475474
"CHIPController.jar": "third_party/connectedhomeip/src/controller/java/CHIPController.jar",
475+
"CHIPClusters.jar": "third_party/connectedhomeip/src/controller/java/CHIPClusters.jar",
476+
"CHIPClusterID.jar": "third_party/connectedhomeip/src/controller/java/CHIPClusterID.jar",
476477
"TvCastingApp.jar": "TvCastingApp.jar",
477478
}
478479

@@ -556,17 +557,6 @@ def build_outputs(self):
556557
self.app.AppName() + "app-debug.apk": os.path.join(
557558
self.output_dir, "tv-casting-app", "app", "outputs", "apk", "debug", "app-debug.apk"
558559
),
559-
#"CHIPController.jar": os.path.join(
560-
# self.output_dir, "lib", "third_party/connectedhomeip/src/controller/java/CHIPController.jar"
561-
#),
562-
#"lib/jni/%s/libCHIPController.so"
563-
#% self.board.AbiName(): os.path.join(
564-
# self.output_dir,
565-
# "lib",
566-
# "jni",
567-
# self.board.AbiName(),
568-
# "libCHIPController.so",
569-
#),
570560
}
571561
elif self.app == AndroidApp.VIRTUAL_DEVICE_APP:
572562
outputs = {

0 commit comments

Comments
 (0)