Skip to content

Commit 1168344

Browse files
xylophone21pull[bot]
authored andcommitted
Fix empty channel (#17489)
* fix build error * fix lineup and channel null error * fix restyled-io and ci errors
1 parent 3d1c488 commit 1168344

File tree

4 files changed

+92
-63
lines changed

4 files changed

+92
-63
lines changed

examples/tv-app/android/App/platform-app/build.gradle

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ android {
3939

4040
sourceSets {
4141
main {
42-
jniLibs.srcDirs = ['../app/libs/jniLibs']
42+
jniLibs.srcDirs = ['../platform-app/libs/jniLibs']
4343

4444
// uncomment this code to debug
4545
// java.srcDirs = [
@@ -54,7 +54,7 @@ android {
5454
}
5555

5656
dependencies {
57-
implementation fileTree(dir: "../app/libs", include: ["*.jar","*.so"])
57+
implementation fileTree(dir: "../platform-app/libs", include: ["*.jar","*.so"])
5858
implementation 'androidx.appcompat:appcompat:1.3.1'
5959
implementation 'com.google.android.material:material:1.4.0'
6060
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'

examples/tv-app/android/java/ChannelManager.cpp

+70-55
Original file line numberDiff line numberDiff line change
@@ -141,37 +141,44 @@ CHIP_ERROR ChannelManager::HandleGetLineup(AttributeValueEncoder & aEncoder)
141141

142142
{
143143
jobject channelLineupObject = env->CallObjectMethod(mChannelManagerObject, mGetLineupMethod);
144-
jclass channelLineupClazz = env->GetObjectClass(channelLineupObject);
145-
146-
jfieldID operatorNameFild = env->GetFieldID(channelLineupClazz, "operatorName", "Ljava/lang/String;");
147-
jstring joperatorName = static_cast<jstring>(env->GetObjectField(channelLineupObject, operatorNameFild));
148-
JniUtfString operatorName(env, joperatorName);
149-
if (joperatorName != nullptr)
144+
if (channelLineupObject != nullptr)
150145
{
151-
lineupInfo.operatorName = operatorName.charSpan();
152-
}
146+
jclass channelLineupClazz = env->GetObjectClass(channelLineupObject);
153147

154-
jfieldID lineupNameFild = env->GetFieldID(channelLineupClazz, "lineupName", "Ljava/lang/String;");
155-
jstring jlineupName = static_cast<jstring>(env->GetObjectField(channelLineupObject, lineupNameFild));
156-
JniUtfString lineupName(env, jlineupName);
157-
if (jlineupName != nullptr)
158-
{
159-
lineupInfo.lineupName = Optional<CharSpan>(lineupName.charSpan());
160-
}
148+
jfieldID operatorNameFild = env->GetFieldID(channelLineupClazz, "operatorName", "Ljava/lang/String;");
149+
jstring joperatorName = static_cast<jstring>(env->GetObjectField(channelLineupObject, operatorNameFild));
150+
JniUtfString operatorName(env, joperatorName);
151+
if (joperatorName != nullptr)
152+
{
153+
lineupInfo.operatorName = operatorName.charSpan();
154+
}
161155

162-
jfieldID postalCodeFild = env->GetFieldID(channelLineupClazz, "postalCode", "Ljava/lang/String;");
163-
jstring jpostalCode = static_cast<jstring>(env->GetObjectField(channelLineupObject, postalCodeFild));
164-
JniUtfString postalCode(env, jpostalCode);
165-
if (jpostalCode != nullptr)
166-
{
167-
lineupInfo.postalCode = Optional<CharSpan>(postalCode.charSpan());
168-
}
156+
jfieldID lineupNameFild = env->GetFieldID(channelLineupClazz, "lineupName", "Ljava/lang/String;");
157+
jstring jlineupName = static_cast<jstring>(env->GetObjectField(channelLineupObject, lineupNameFild));
158+
JniUtfString lineupName(env, jlineupName);
159+
if (jlineupName != nullptr)
160+
{
161+
lineupInfo.lineupName = Optional<CharSpan>(lineupName.charSpan());
162+
}
163+
164+
jfieldID postalCodeFild = env->GetFieldID(channelLineupClazz, "postalCode", "Ljava/lang/String;");
165+
jstring jpostalCode = static_cast<jstring>(env->GetObjectField(channelLineupObject, postalCodeFild));
166+
JniUtfString postalCode(env, jpostalCode);
167+
if (jpostalCode != nullptr)
168+
{
169+
lineupInfo.postalCode = Optional<CharSpan>(postalCode.charSpan());
170+
}
169171

170-
jfieldID lineupInfoTypeFild = env->GetFieldID(channelLineupClazz, "lineupInfoType", "I");
171-
jint jlineupInfoType = (env->GetIntField(channelLineupObject, lineupInfoTypeFild));
172-
lineupInfo.lineupInfoType = static_cast<app::Clusters::Channel::LineupInfoTypeEnum>(jlineupInfoType);
172+
jfieldID lineupInfoTypeFild = env->GetFieldID(channelLineupClazz, "lineupInfoType", "I");
173+
jint jlineupInfoType = (env->GetIntField(channelLineupObject, lineupInfoTypeFild));
174+
lineupInfo.lineupInfoType = static_cast<app::Clusters::Channel::LineupInfoTypeEnum>(jlineupInfoType);
173175

174-
err = aEncoder.Encode(lineupInfo);
176+
err = aEncoder.Encode(lineupInfo);
177+
}
178+
else
179+
{
180+
err = aEncoder.EncodeNull();
181+
}
175182
}
176183

177184
exit:
@@ -195,41 +202,49 @@ CHIP_ERROR ChannelManager::HandleGetCurrentChannel(AttributeValueEncoder & aEnco
195202

196203
{
197204
jobject channelInfoObject = env->CallObjectMethod(mChannelManagerObject, mGetCurrentChannelMethod);
198-
jclass channelClass = env->GetObjectClass(channelInfoObject);
199-
200-
jfieldID getCallSignField = env->GetFieldID(channelClass, "callSign", "Ljava/lang/String;");
201-
jstring jcallSign = static_cast<jstring>(env->GetObjectField(channelInfoObject, getCallSignField));
202-
JniUtfString callsign(env, jcallSign);
203-
if (jcallSign != nullptr)
205+
if (channelInfoObject != nullptr)
204206
{
205-
channelInfo.callSign = Optional<CharSpan>(callsign.charSpan());
206-
}
207+
jclass channelClass = env->GetObjectClass(channelInfoObject);
207208

208-
jfieldID getNameField = env->GetFieldID(channelClass, "name", "Ljava/lang/String;");
209-
jstring jname = static_cast<jstring>(env->GetObjectField(channelInfoObject, getNameField));
210-
JniUtfString name(env, jname);
211-
if (jname != nullptr)
212-
{
213-
channelInfo.name = Optional<CharSpan>(name.charSpan());
214-
}
209+
jfieldID getCallSignField = env->GetFieldID(channelClass, "callSign", "Ljava/lang/String;");
210+
jstring jcallSign = static_cast<jstring>(env->GetObjectField(channelInfoObject, getCallSignField));
211+
JniUtfString callsign(env, jcallSign);
212+
if (jcallSign != nullptr)
213+
{
214+
channelInfo.callSign = Optional<CharSpan>(callsign.charSpan());
215+
}
215216

216-
jfieldID getJaffiliateCallSignField = env->GetFieldID(channelClass, "affiliateCallSign", "Ljava/lang/String;");
217-
jstring jaffiliateCallSign = static_cast<jstring>(env->GetObjectField(channelInfoObject, getJaffiliateCallSignField));
218-
JniUtfString affiliateCallSign(env, jaffiliateCallSign);
219-
if (jaffiliateCallSign != nullptr)
220-
{
221-
channelInfo.affiliateCallSign = Optional<CharSpan>(affiliateCallSign.charSpan());
222-
}
217+
jfieldID getNameField = env->GetFieldID(channelClass, "name", "Ljava/lang/String;");
218+
jstring jname = static_cast<jstring>(env->GetObjectField(channelInfoObject, getNameField));
219+
JniUtfString name(env, jname);
220+
if (jname != nullptr)
221+
{
222+
channelInfo.name = Optional<CharSpan>(name.charSpan());
223+
}
224+
225+
jfieldID getJaffiliateCallSignField = env->GetFieldID(channelClass, "affiliateCallSign", "Ljava/lang/String;");
226+
jstring jaffiliateCallSign = static_cast<jstring>(env->GetObjectField(channelInfoObject, getJaffiliateCallSignField));
227+
JniUtfString affiliateCallSign(env, jaffiliateCallSign);
228+
if (jaffiliateCallSign != nullptr)
229+
{
230+
channelInfo.affiliateCallSign = Optional<CharSpan>(affiliateCallSign.charSpan());
231+
}
223232

224-
jfieldID majorNumField = env->GetFieldID(channelClass, "majorNumber", "I");
225-
jint jmajorNum = env->GetIntField(channelInfoObject, majorNumField);
226-
channelInfo.majorNumber = static_cast<uint16_t>(jmajorNum);
233+
jfieldID majorNumField = env->GetFieldID(channelClass, "majorNumber", "I");
234+
jint jmajorNum = env->GetIntField(channelInfoObject, majorNumField);
235+
channelInfo.majorNumber = static_cast<uint16_t>(jmajorNum);
227236

228-
jfieldID minorNumField = env->GetFieldID(channelClass, "minorNumber", "I");
229-
jint jminorNum = env->GetIntField(channelInfoObject, minorNumField);
230-
channelInfo.minorNumber = static_cast<uint16_t>(jminorNum);
237+
jfieldID minorNumField = env->GetFieldID(channelClass, "minorNumber", "I");
238+
jint jminorNum = env->GetIntField(channelInfoObject, minorNumField);
239+
channelInfo.minorNumber = static_cast<uint16_t>(jminorNum);
231240

232-
err = aEncoder.Encode(channelInfo);
241+
err = aEncoder.Encode(channelInfo);
242+
}
243+
else
244+
{
245+
err = aEncoder.EncodeNull();
246+
return err;
247+
}
233248
}
234249

235250
exit:

examples/tv-app/android/java/src/com/tcl/chip/tvapp/ChannelManagerStub.java

+14
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public class ChannelManagerStub implements ChannelManager {
2323
private static final String TAG = ChannelManagerStub.class.getSimpleName();
2424

2525
private int endpoint;
26+
private int mCurrentChannel = 0;
2627

2728
public ChannelManagerStub(int endpoint) {
2829
this.endpoint = endpoint;
@@ -38,6 +39,12 @@ public ChannelInfo[] getChannelList() {
3839

3940
@Override
4041
public ChannelLineupInfo getLineup() {
42+
// for null lineup test
43+
if (mCurrentChannel == 100) {
44+
Log.d(TAG, "getChannelLineup: null at " + endpoint);
45+
return null;
46+
}
47+
4148
ChannelLineupInfo lineupInfo = new ChannelLineupInfo("operator", "lineup", "postalCode");
4249
Log.d(TAG, "getChannelLineup: " + lineupInfo + " at " + endpoint);
4350
return lineupInfo;
@@ -46,6 +53,11 @@ public ChannelLineupInfo getLineup() {
4653
@Override
4754
public ChannelInfo getCurrentChannel() {
4855
Log.d(TAG, "getCurrentChannel: at " + endpoint);
56+
// for null channel test
57+
if (mCurrentChannel == 100) {
58+
return null;
59+
}
60+
4961
return new ChannelInfo(1, 1, "HDMI", "callSign", "affiliateCallSign");
5062
}
5163

@@ -72,6 +84,8 @@ public boolean changeChannelByNumber(int majorNumber, int minorNumber) {
7284
+ " at "
7385
+ endpoint);
7486

87+
mCurrentChannel = majorNumber;
88+
7589
// for failed test
7690
if (majorNumber == 1 && minorNumber == 1) {
7791
return false;

scripts/examples/gn_android_example.sh

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
# limitations under the License.
1717
#
1818

19-
set -e
19+
set -ex
2020

2121
# Build script for GN examples GitHub workflow.
2222

@@ -74,8 +74,8 @@ gn gen --check --fail-on-unused-args --root="$EXAMPLE_DIR" "$OUTPUT_DIR" --args=
7474

7575
ninja -C "$OUTPUT_DIR" "${NINJA_ARGS[@]}"
7676

77-
cp -rf "$OUTPUT_DIR/lib/jni/." "$EXAMPLE_DIR/App/app/libs/jniLibs/"
78-
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/platform/android/AndroidPlatform.jar" "$EXAMPLE_DIR/App/app/libs/"
79-
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/app/server/java/CHIPAppServer.jar" "$EXAMPLE_DIR/App/app/libs/"
80-
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/setup_payload/java/SetupPayloadParser.jar" "$EXAMPLE_DIR/App/app/libs/"
81-
cp -f "$OUTPUT_DIR/lib/TvApp.jar" "$EXAMPLE_DIR/App/app/libs/"
77+
cp -rf "$OUTPUT_DIR/lib/jni/." "$EXAMPLE_DIR/App/platform-app/libs/jniLibs/"
78+
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/platform/android/AndroidPlatform.jar" "$EXAMPLE_DIR/App/platform-app/libs/"
79+
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/app/server/java/CHIPAppServer.jar" "$EXAMPLE_DIR/App/platform-app/libs/"
80+
cp -f "$OUTPUT_DIR/lib/third_party/connectedhomeip/src/setup_payload/java/SetupPayloadParser.jar" "$EXAMPLE_DIR/App/platform-app/libs/"
81+
cp -f "$OUTPUT_DIR/lib/TvApp.jar" "$EXAMPLE_DIR/App/platform-app/libs/"

0 commit comments

Comments
 (0)