4
4
import android .content .SharedPreferences ;
5
5
import android .util .JsonReader ;
6
6
import android .util .JsonWriter ;
7
+ import com .matter .tv .app .api .SupportedCluster ;
7
8
import com .matter .tv .server .model .ContentApp ;
8
9
import java .io .IOException ;
9
10
import java .io .StringReader ;
10
11
import java .io .StringWriter ;
12
+ import java .util .ArrayList ;
11
13
import java .util .Collections ;
12
14
import java .util .HashMap ;
15
+ import java .util .HashSet ;
16
+ import java .util .List ;
13
17
import java .util .Map ;
18
+ import java .util .Set ;
14
19
15
20
public class EndpointsDataStore {
16
21
@@ -21,6 +26,11 @@ public class EndpointsDataStore {
21
26
private static final String KEY_PRODUCTID = "PID" ;
22
27
private static final String KEY_VERSION = "VER" ;
23
28
private static final String KEY_ENDPOINTID = "EPID" ;
29
+ private static final String KEY_SUPPORTED_CLUSTERS = "supportedClusters" ;
30
+ private static final String KEY_CLUSTER_IDENTIFIER = "clusterIdentifier" ;
31
+ private static final String KEY_FEATURES = "features" ;
32
+ private static final String KEY_OPTIONAL_COMMAND_IDENTIFIERS = "optionalCommandIdentifiers" ;
33
+ private static final String KEY_OPTIONAL_ATTRIBUTES_IDENTIFIERS = "optionalAttributesIdentifiers" ;
24
34
private static EndpointsDataStore instance ;
25
35
private final SharedPreferences discoveredEndpoints ;
26
36
Map <String , ContentApp > persistedContentApps = new HashMap <>();
@@ -57,19 +67,20 @@ private String serializeContentApp(ContentApp app) {
57
67
StringWriter stringWriter = new StringWriter ();
58
68
JsonWriter jsonWriter = new JsonWriter (stringWriter );
59
69
try {
60
- jsonWriter
61
- .beginObject ()
62
- .name (KEY_VENDORID )
63
- .value (app .getVendorId ())
64
- .name (KEY_VENDORNAME )
65
- .value (app .getVendorName ())
66
- .name (KEY_PRODUCTID )
67
- .value (app .getProductId ())
68
- .name (KEY_VERSION )
69
- .value (app .getVersion ())
70
- .name (KEY_ENDPOINTID )
71
- .value (app .getEndpointId ())
72
- .endObject ();
70
+ jsonWriter .beginObject ();
71
+ jsonWriter .name (KEY_VENDORID );
72
+ jsonWriter .value (app .getVendorId ());
73
+ jsonWriter .name (KEY_VENDORNAME );
74
+ jsonWriter .value (app .getVendorName ());
75
+ jsonWriter .name (KEY_PRODUCTID );
76
+ jsonWriter .value (app .getProductId ());
77
+ jsonWriter .name (KEY_VERSION );
78
+ jsonWriter .value (app .getVersion ());
79
+ jsonWriter .name (KEY_ENDPOINTID );
80
+ jsonWriter .value (app .getEndpointId ());
81
+ jsonWriter .name (KEY_SUPPORTED_CLUSTERS );
82
+ serializeSupportedClusters (jsonWriter , app .getSupportedClusters ());
83
+ jsonWriter .endObject ();
73
84
jsonWriter .flush ();
74
85
jsonWriter .close ();
75
86
} catch (IOException e ) {
@@ -88,6 +99,7 @@ private ContentApp deserializeContentApp(String appName, String appMetadata) {
88
99
int vendorId = 0 ;
89
100
int productId = 0 ;
90
101
int endpoint = ContentApp .INVALID_ENDPOINTID ;
102
+ Set <SupportedCluster > supportedClusters = new HashSet <>();
91
103
while (jsonReader .hasNext ()) {
92
104
String name = jsonReader .nextName ();
93
105
switch (name ) {
@@ -106,14 +118,99 @@ private ContentApp deserializeContentApp(String appName, String appMetadata) {
106
118
case KEY_ENDPOINTID :
107
119
endpoint = jsonReader .nextInt ();
108
120
break ;
121
+ case KEY_SUPPORTED_CLUSTERS :
122
+ supportedClusters = deserializeSupportedClusters (jsonReader );
123
+ break ;
109
124
}
110
125
}
111
- app = new ContentApp (appName , vendorName , vendorId , productId , version );
126
+ app = new ContentApp (appName , vendorName , vendorId , productId , version , supportedClusters );
112
127
jsonReader .endObject ();
113
128
jsonReader .close ();
114
129
} catch (IOException e ) {
115
130
// Cannot happen
116
131
}
117
132
return app ;
118
133
}
134
+
135
+ private void serializeSupportedClusters (
136
+ JsonWriter jsonWriter , Set <SupportedCluster > supportedClusters ) throws IOException {
137
+ if (supportedClusters != null ) {
138
+ jsonWriter .beginArray ();
139
+ for (SupportedCluster supportedCluster : supportedClusters ) {
140
+ if (supportedCluster != null ) {
141
+ serializeSupportedCluster (jsonWriter , supportedCluster );
142
+ }
143
+ }
144
+ jsonWriter .endArray ();
145
+ }
146
+ }
147
+
148
+ private Set <SupportedCluster > deserializeSupportedClusters (JsonReader jsonReader )
149
+ throws IOException {
150
+ Set <SupportedCluster > supportedClusters = new HashSet <>();
151
+ jsonReader .beginArray ();
152
+ while (jsonReader .hasNext ()) {
153
+ supportedClusters .add (deserializeSupportedCluster (jsonReader ));
154
+ }
155
+ jsonReader .endArray ();
156
+ return supportedClusters ;
157
+ }
158
+
159
+ private void serializeSupportedCluster (JsonWriter jsonWriter , SupportedCluster supportedCluster )
160
+ throws IOException {
161
+ jsonWriter .beginObject ();
162
+ jsonWriter .name (KEY_CLUSTER_IDENTIFIER );
163
+ jsonWriter .value (supportedCluster .clusterIdentifier );
164
+ jsonWriter .name (KEY_FEATURES );
165
+ jsonWriter .value (supportedCluster .features );
166
+ jsonWriter .name (KEY_OPTIONAL_COMMAND_IDENTIFIERS );
167
+ serializeIntArray (jsonWriter , supportedCluster .optionalCommandIdentifiers );
168
+ jsonWriter .name (KEY_OPTIONAL_ATTRIBUTES_IDENTIFIERS );
169
+ serializeIntArray (jsonWriter , supportedCluster .optionalAttributesIdentifiers );
170
+ jsonWriter .endObject ();
171
+ }
172
+
173
+ private SupportedCluster deserializeSupportedCluster (JsonReader jsonReader ) throws IOException {
174
+ SupportedCluster supportedCluster = new SupportedCluster ();
175
+ jsonReader .beginObject ();
176
+ while (jsonReader .hasNext ()) {
177
+ String name = jsonReader .nextName ();
178
+ switch (name ) {
179
+ case KEY_CLUSTER_IDENTIFIER :
180
+ supportedCluster .clusterIdentifier = jsonReader .nextInt ();
181
+ break ;
182
+ case KEY_FEATURES :
183
+ supportedCluster .features = jsonReader .nextInt ();
184
+ break ;
185
+ case KEY_OPTIONAL_COMMAND_IDENTIFIERS :
186
+ supportedCluster .optionalCommandIdentifiers = deserializeIntArray (jsonReader );
187
+ break ;
188
+ case KEY_OPTIONAL_ATTRIBUTES_IDENTIFIERS :
189
+ supportedCluster .optionalAttributesIdentifiers = deserializeIntArray (jsonReader );
190
+ break ;
191
+ }
192
+ }
193
+ jsonReader .endObject ();
194
+ return supportedCluster ;
195
+ }
196
+
197
+ private void serializeIntArray (JsonWriter jsonWriter , int [] array ) throws IOException {
198
+ jsonWriter .beginArray ();
199
+ if (array != null ) {
200
+ for (int value : array ) {
201
+ jsonWriter .value (value );
202
+ }
203
+ }
204
+ jsonWriter .endArray ();
205
+ }
206
+
207
+ private int [] deserializeIntArray (JsonReader jsonReader ) throws IOException {
208
+ List <Integer > dynamicArray = new ArrayList <>();
209
+ jsonReader .beginArray ();
210
+ while (jsonReader .hasNext ()) {
211
+ dynamicArray .add (jsonReader .nextInt ());
212
+ }
213
+ jsonReader .endArray ();
214
+ return dynamicArray .stream ().mapToInt (Integer ::intValue ).toArray ();
215
+ }
119
216
}
0 commit comments