Skip to content

Commit 322aa77

Browse files
committed
Refactor to Parcelable classes
1 parent e169c18 commit 322aa77

8 files changed

Lines changed: 226 additions & 27 deletions

File tree

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package com.smartdevicelink.protocol;
2+
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
import com.livio.BSON.BsonEncoder;
7+
import com.smartdevicelink.transport.utl.TransportRecord;
8+
import com.smartdevicelink.util.DebugTool;
9+
10+
import java.util.HashMap;
11+
12+
public class SdlPacket extends BaseSdlPacket implements Parcelable {
13+
private static final int EXTRA_PARCEL_DATA_LENGTH = 24;
14+
15+
public SdlPacket(int version, boolean encryption, int frameType,
16+
int serviceType, int frameInfo, int sessionId,
17+
int dataSize, int messageId, byte[] payload) {
18+
super(version, encryption, frameType, serviceType, frameInfo, sessionId, dataSize, messageId, payload);
19+
}
20+
21+
public SdlPacket(int version, boolean encryption, int frameType,
22+
int serviceType, int frameInfo, int sessionId,
23+
int dataSize, int messageId, byte[] payload, int offset, int bytesToWrite) {
24+
super(version, encryption, frameType, serviceType, frameInfo, sessionId, dataSize, messageId, payload, offset, bytesToWrite);
25+
}
26+
27+
protected SdlPacket() {
28+
super();
29+
}
30+
31+
protected SdlPacket(BaseSdlPacket packet) {
32+
super(packet);
33+
}
34+
35+
/* ***************************************************************************************************************************************************
36+
* *********************************************************** Parceable Overrides *****************************************************************
37+
*****************************************************************************************************************************************************/
38+
39+
40+
41+
//I think this is FIFO...right?
42+
public SdlPacket(Parcel p) {
43+
this.version = p.readInt();
44+
this.encryption = (p.readInt() == 0) ? false : true;
45+
this.frameType = p.readInt();
46+
this.serviceType = p.readInt();
47+
this.frameInfo = p.readInt();
48+
this.sessionId = p.readInt();
49+
this.dataSize = p.readInt();
50+
this.messageId = p.readInt();
51+
if(p.readInt() == 1){ //We should have a payload attached
52+
payload = new byte[dataSize];
53+
p.readByteArray(payload);
54+
}
55+
56+
this.priorityCoefficient = p.readInt();
57+
58+
if(p.dataAvail() > EXTRA_PARCEL_DATA_LENGTH) { //See note on constant for why not 0
59+
try {
60+
messagingVersion = p.readInt();
61+
if (messagingVersion >= 2) {
62+
if (p.readInt() == 1) { //We should have a transport type attached
63+
this.transportRecord = (TransportRecord) p.readParcelable(TransportRecord.class.getClassLoader());
64+
}
65+
}
66+
}catch (RuntimeException e){
67+
DebugTool.logError("Error creating packet from parcel", e);
68+
}
69+
}
70+
}
71+
72+
73+
@Override
74+
public int describeContents() {
75+
return 0;
76+
}
77+
78+
@Override
79+
public void writeToParcel(Parcel dest, int flags) {
80+
81+
dest.writeInt(version);
82+
dest.writeInt(encryption? 1 : 0);
83+
dest.writeInt(frameType);
84+
dest.writeInt(serviceType);
85+
dest.writeInt(frameInfo);
86+
dest.writeInt(sessionId);
87+
dest.writeInt(dataSize);
88+
dest.writeInt(messageId);
89+
dest.writeInt(payload!=null? 1 : 0);
90+
if(payload!=null){
91+
dest.writeByteArray(payload);
92+
}
93+
dest.writeInt(priorityCoefficient);
94+
95+
///Additions after initial creation
96+
if(messagingVersion > 1){
97+
dest.writeInt(messagingVersion);
98+
99+
dest.writeInt(transportRecord!=null? 1 : 0);
100+
if(transportRecord != null){
101+
dest.writeParcelable(transportRecord,0);
102+
}
103+
}
104+
105+
}
106+
107+
public static final Parcelable.Creator<SdlPacket> CREATOR = new Parcelable.Creator<SdlPacket>() {
108+
public SdlPacket createFromParcel(Parcel in) {
109+
return new SdlPacket(in);
110+
}
111+
112+
@Override
113+
public SdlPacket[] newArray(int size) {
114+
return new SdlPacket[size];
115+
}
116+
117+
};
118+
119+
public void putTag(String tag, Object data){
120+
if(bsonPayload == null){
121+
bsonPayload = new HashMap<>();
122+
}
123+
bsonPayload.put(tag, data);
124+
}
125+
126+
public Object getTag(String tag){
127+
if(payload == null){
128+
return null;
129+
}else if(bsonPayload == null || bsonPayload.isEmpty()){
130+
bsonPayload = BsonEncoder.decodeFromBytes(payload);
131+
}
132+
133+
if(bsonPayload == null){
134+
return null;
135+
}
136+
137+
return bsonPayload.get(tag);
138+
}
139+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.smartdevicelink.transport.utl;
2+
3+
import android.os.Parcel;
4+
import android.os.Parcelable;
5+
6+
import com.smartdevicelink.transport.enums.TransportType;
7+
8+
public class TransportRecord extends BaseTransportRecord implements Parcelable {
9+
10+
private TransportType type;
11+
private String address;
12+
13+
public TransportRecord(TransportType transportType, String address) {
14+
super(transportType, address);
15+
this.type = transportType;
16+
this.address = address;
17+
}
18+
19+
@Override
20+
public int describeContents() {
21+
return 0;
22+
}
23+
24+
@Override
25+
public void writeToParcel(Parcel dest, int flags) {
26+
dest.writeInt(type!=null? 1 : 0);
27+
if(type != null){
28+
dest.writeString(type.name());
29+
}
30+
31+
dest.writeInt(address !=null? 1 : 0);
32+
if(address != null){
33+
dest.writeString(address);
34+
}
35+
}
36+
37+
public static final Parcelable.Creator<TransportRecord> CREATOR = new Parcelable.Creator<TransportRecord>() {
38+
public TransportRecord createFromParcel(Parcel in) {
39+
TransportType type = null;
40+
String address = "";
41+
if (in.readInt() == 1) { //We should have a transport type attached
42+
String transportName = in.readString();
43+
if(transportName != null){
44+
type = TransportType.valueOf(transportName);
45+
}
46+
}
47+
48+
if (in.readInt() == 1) { //We should have a transport address attached
49+
address = in.readString();
50+
}
51+
return new TransportRecord(type, address);
52+
}
53+
54+
@Override
55+
public TransportRecord[] newArray(int size) {
56+
return new TransportRecord[size];
57+
}
58+
59+
};
60+
}

base/src/main/java/com/smartdevicelink/protocol/SdlPacket.java renamed to base/src/main/java/com/smartdevicelink/protocol/BaseSdlPacket.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
* Any other binder transactions must include an additional int flag into their bundle or the parsing
4848
* of this object will fail.
4949
*/
50-
public class SdlPacket implements Parcelable{
50+
public class BaseSdlPacket implements Parcelable{
5151

5252
/**
5353
* This is the amount of bytes added to the bundle from the router service for a specific int
@@ -122,9 +122,9 @@ public class SdlPacket implements Parcelable{
122122
int messagingVersion = 1;
123123
TransportRecord transportRecord;
124124

125-
public SdlPacket(int version, boolean encryption, int frameType,
126-
int serviceType, int frameInfo, int sessionId,
127-
int dataSize, int messageId, byte[] payload) {
125+
public BaseSdlPacket(int version, boolean encryption, int frameType,
126+
int serviceType, int frameInfo, int sessionId,
127+
int dataSize, int messageId, byte[] payload) {
128128
this.version = version;
129129
this.encryption = encryption;
130130
this.frameType = frameType;
@@ -140,9 +140,9 @@ public SdlPacket(int version, boolean encryption, int frameType,
140140
}
141141
}
142142

143-
public SdlPacket(int version, boolean encryption, int frameType,
144-
int serviceType, int frameInfo, int sessionId,
145-
int dataSize, int messageId, byte[] payload, int offset,int bytesToWrite) {
143+
public BaseSdlPacket(int version, boolean encryption, int frameType,
144+
int serviceType, int frameInfo, int sessionId,
145+
int dataSize, int messageId, byte[] payload, int offset, int bytesToWrite) {
146146
this.version = version;
147147
this.encryption = encryption;
148148
this.frameType = frameType;
@@ -166,7 +166,7 @@ public SdlPacket(int version, boolean encryption, int frameType,
166166
* <p>Frame Info
167167
* <p>
168168
*/
169-
protected SdlPacket(){
169+
protected BaseSdlPacket(){
170170
//Package only empty constructor
171171
this.version = 1;
172172
this.encryption = false;
@@ -183,7 +183,7 @@ protected SdlPacket(){
183183
* Creates a new packet based on previous packet definitions. Will not copy payload.
184184
* @param packet an instance of the packet that should be copied.
185185
*/
186-
protected SdlPacket(SdlPacket packet){
186+
protected BaseSdlPacket(BaseSdlPacket packet){
187187
this.version = packet.version;
188188
this.encryption = packet.encryption;
189189
this.frameType = packet.frameType;
@@ -369,7 +369,7 @@ public void setMessagingVersion(int version){
369369

370370

371371
//I think this is FIFO...right?
372-
public SdlPacket(Parcel p) {
372+
public BaseSdlPacket(Parcel p) {
373373
this.version = p.readInt();
374374
this.encryption = (p.readInt() == 0) ? false : true;
375375
this.frameType = p.readInt();
@@ -434,14 +434,14 @@ public void writeToParcel(Parcel dest, int flags) {
434434

435435
}
436436

437-
public static final Parcelable.Creator<SdlPacket> CREATOR = new Parcelable.Creator<SdlPacket>() {
438-
public SdlPacket createFromParcel(Parcel in) {
439-
return new SdlPacket(in);
437+
public static final Parcelable.Creator<BaseSdlPacket> CREATOR = new Parcelable.Creator<BaseSdlPacket>() {
438+
public BaseSdlPacket createFromParcel(Parcel in) {
439+
return new BaseSdlPacket(in);
440440
}
441441

442442
@Override
443-
public SdlPacket[] newArray(int size) {
444-
return new SdlPacket[size];
443+
public BaseSdlPacket[] newArray(int size) {
444+
return new BaseSdlPacket[size];
445445
}
446446

447447
};

base/src/main/java/com/smartdevicelink/transport/utl/TransportRecord.java renamed to base/src/main/java/com/smartdevicelink/transport/utl/BaseTransportRecord.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@
3737

3838
import com.smartdevicelink.transport.enums.TransportType;
3939

40-
public class TransportRecord implements Parcelable{
40+
public class BaseTransportRecord implements Parcelable{
4141

4242
private TransportType type;
4343
private String address;
4444

45-
public TransportRecord(TransportType transportType, String address){
45+
public BaseTransportRecord(TransportType transportType, String address){
4646
this.type = transportType;
4747
this.address = address;
4848
}
@@ -61,8 +61,8 @@ public boolean equals(Object obj) {
6161
return false;
6262
}
6363

64-
if (obj instanceof TransportRecord) {
65-
TransportRecord record = (TransportRecord) obj;
64+
if (obj instanceof BaseTransportRecord) {
65+
BaseTransportRecord record = (BaseTransportRecord) obj;
6666
return record.type != null && record.type.equals(type) //Transport type is the same
6767
&& ((record.address == null && address == null) //Both addresses are null
6868
|| (record.address != null && record.address.equals(address))); //Or they match
@@ -81,7 +81,7 @@ public String toString(){
8181
return builder.toString();
8282
}
8383

84-
public TransportRecord(Parcel p){
84+
public BaseTransportRecord(Parcel p){
8585
if (p.readInt() == 1) { //We should have a transport type attached
8686
String transportName = p.readString();
8787
if(transportName != null){
@@ -112,14 +112,14 @@ public void writeToParcel(Parcel dest, int flags) {
112112
}
113113
}
114114

115-
public static final Parcelable.Creator<TransportRecord> CREATOR = new Parcelable.Creator<TransportRecord>() {
116-
public TransportRecord createFromParcel(Parcel in) {
117-
return new TransportRecord(in);
115+
public static final Parcelable.Creator<BaseTransportRecord> CREATOR = new Parcelable.Creator<BaseTransportRecord>() {
116+
public BaseTransportRecord createFromParcel(Parcel in) {
117+
return new BaseTransportRecord(in);
118118
}
119119

120120
@Override
121-
public TransportRecord[] newArray(int size) {
122-
return new TransportRecord[size];
121+
public BaseTransportRecord[] newArray(int size) {
122+
return new BaseTransportRecord[size];
123123
}
124124

125125
};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../../../../base/src/main/java/com/smartdevicelink/protocol/BaseSdlPacket.java

baseAndroid/src/main/java/com/smartdevicelink/protocol/SdlPacket.java

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../../../../../base/src/main/java/com/smartdevicelink/transport/utl/BaseTransportRecord.java

baseAndroid/src/main/java/com/smartdevicelink/transport/utl/TransportRecord.java

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)