diff options
author | James.cf Lin <jamescflin@google.com> | 2021-06-04 14:17:48 +0800 |
---|---|---|
committer | James.cf Lin <jamescflin@google.com> | 2021-06-07 10:44:59 +0800 |
commit | e587196f53c7871fcd006d9e0cc8205fea50c088 (patch) | |
tree | 26ec14dc2acc51a19c7d60209eebd7d49f535b6e | |
parent | 4b733da9db01754962d4e4c80040f762352978cb (diff) | |
download | ims-e587196f53c7871fcd006d9e0cc8205fea50c088.tar.gz |
Fix the status of tuple cannot be parsed because there are some whitespace characters before the Basic tag
Bug: 186075898
Test: atest RcsUceAdapterTest; atest PidfParserTest
Change-Id: I05b3f461d8e6ab0025df5230f8c4b97fee8f024d
3 files changed, 112 insertions, 57 deletions
diff --git a/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Basic.java b/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Basic.java index 49c0aa34..a4f487a6 100644 --- a/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Basic.java +++ b/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Basic.java @@ -17,8 +17,10 @@ package com.android.ims.rcs.uce.presence.pidfparser.pidf; import android.annotation.StringDef; +import android.util.Log; import com.android.ims.rcs.uce.presence.pidfparser.ElementBase; +import com.android.ims.rcs.uce.util.UceUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -32,6 +34,8 @@ import java.lang.annotation.RetentionPolicy; * The "basic" element of the pidf. */ public class Basic extends ElementBase { + private static final String LOG_TAG = UceUtils.getLogPrefix() + "Basic"; + /** The name of this element */ public static final String ELEMENT_NAME = "basic"; @@ -104,6 +108,8 @@ public class Basic extends ElementBase { } else { mBasic = null; } + } else { + Log.d(LOG_TAG, "The eventType is not TEXT=" + eventType); } // Move to the end tag. diff --git a/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Status.java b/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Status.java index 988a1a73..92ad5d68 100644 --- a/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Status.java +++ b/src/java/com/android/ims/rcs/uce/presence/pidfparser/pidf/Status.java @@ -16,7 +16,10 @@ package com.android.ims.rcs.uce.presence.pidfparser.pidf; +import android.util.Log; + import com.android.ims.rcs.uce.presence.pidfparser.ElementBase; +import com.android.ims.rcs.uce.util.UceUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -28,6 +31,8 @@ import java.io.IOException; * The "status" element of the pidf. */ public class Status extends ElementBase { + private static final String LOG_TAG = UceUtils.getLogPrefix() + "Status"; + /** The name of this element */ public static final String ELEMENT_NAME = "status"; @@ -76,14 +81,16 @@ public class Status extends ElementBase { throw new XmlPullParserException("Incorrect element: " + namespace + ", " + name); } - // Move to the next event to get the Basic tag. - int eventType = parser.next(); + // Move to the next tag to get the Basic element. + int eventType = parser.nextTag(); // Get the value if the event type is text. if (eventType == XmlPullParser.START_TAG) { Basic basic = new Basic(); basic.parse(parser); mBasic = basic; + } else { + Log.d(LOG_TAG, "The eventType is not START_TAG=" + eventType); } // Move to the end tag. diff --git a/tests/src/com/android/ims/rcs/uce/presence/pidfparser/PidfParserTest.java b/tests/src/com/android/ims/rcs/uce/presence/pidfparser/PidfParserTest.java index 41f0a3ad..f8038be1 100644 --- a/tests/src/com/android/ims/rcs/uce/presence/pidfparser/PidfParserTest.java +++ b/tests/src/com/android/ims/rcs/uce/presence/pidfparser/PidfParserTest.java @@ -130,20 +130,36 @@ public class PidfParserTest extends ImsTestBase { final RcsContactPresenceTuple.Builder tuple3Builder = new RcsContactPresenceTuple.Builder( "open", + "org.openmobilealliance:ChatSession", + "2.0"); + tuple3Builder.setServiceDescription("Session Mode Messaging") + .setContactUri(Uri.parse(contact)); + + final RcsContactPresenceTuple.Builder tuple4Builder = new RcsContactPresenceTuple.Builder( + "open", + "org.openmobilealliance:File-Transfer", + "1.0"); + tuple4Builder.setServiceDescription("File Transfer") + .setContactUri(Uri.parse(contact)); + + final RcsContactPresenceTuple.Builder tuple5Builder = new RcsContactPresenceTuple.Builder( + "open", "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.mmtel", "1.0"); - tuple3Builder.setServiceDescription("VoLTE service"); + tuple5Builder.setServiceDescription("VoLTE service"); ServiceCapabilities.Builder capBuilder = new ServiceCapabilities.Builder(true, true); - tuple3Builder.setServiceCapabilities(capBuilder.build()) + tuple5Builder.setServiceCapabilities(capBuilder.build()) .setContactUri(Uri.parse(contact)); - final List<RcsContactPresenceTuple> expectedTupleList = new ArrayList<>(3); + final List<RcsContactPresenceTuple> expectedTupleList = new ArrayList<>(5); expectedTupleList.add(tuple1Builder.build()); expectedTupleList.add(tuple2Builder.build()); expectedTupleList.add(tuple3Builder.build()); + expectedTupleList.add(tuple4Builder.build()); + expectedTupleList.add(tuple5Builder.build()); // Create the newline included PIDF data - String pidfData = getPidfDataWithNewlineCharacters(contact); + String pidfData = getPidfDataWithNewlineAndWhitespaceCharacters(); // Convert to the class RcsContactUceCapability RcsContactUceCapability capabilities = PidfParser.getRcsContactUceCapability(pidfData); @@ -330,58 +346,84 @@ public class PidfParserTest extends ImsTestBase { return pidfBuilder.toString(); } - private String getPidfDataWithNewlineCharacters(String contact) { + private String getPidfDataWithNewlineAndWhitespaceCharacters() { String pidf = "<presence xmlns=\"urn:ietf:params:xml:ns:pidf\" " - + "xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\" " - + "xmlns:b=\"urn:ietf:params:xml:ns:pidf:caps\" " - + "entity=\"" + contact + "\">\n" - // The first tuple - + "<tuple id=\"DiscoveryPres\">\n" - + "<status>\n" - + "<basic>open</basic>\n" - + "</status>\n" - + "<op:service-description>\n" - + "<op:service-id>" - + "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcse.dp</op:service-id>\n" - + "<op:version>1.0</op:version>\n" - + "<op:description>DiscoveryPresence</op:description>\n" - + "</op:service-description>\n" - + "<contact>tel:+11234567890</contact>\n" - + "</tuple>\n" - // The second tuple - + "<tuple id=\"VoLTE\">\n" - + "<status>\n" - + "<basic>open</basic>\n" - + "</status>\n" - + "<b:servcaps>\n" - + "<b:audio>true</b:audio>\n" - + "<b:video>true</b:video>\n" - + "<b:duplex>\n" - + "<b:supported>\n" - + "<b:full/>\n" - + "</b:supported>\n" - + "</b:duplex>\n" - + "</b:servcaps>\n" - + "<op:service-description>\n" - + "<op:service-id>org.3gpp.urn:urn-7:3gpp-service.ims.icsi.mmtel</op:service-id>\n" - + "<op:version>1.0</op:version>\n" - + "<op:description>VoLTE service</op:description>\n" - + "</op:service-description>\n" - + "<contact>tel:+11234567890</contact>\n" - + "</tuple>\n" - // The third tuple - + "<tuple id=\"StandaloneMsg\">\n" - + "<status>\n" - + "<basic>open</basic>\n" - + "</status>\n" - + "<op:service-description>\n" - + "<op:service-id>org.openmobilealliance:StandaloneMsg</op:service-id>\n" - + "<op:version>2.0</op:version>\n" - + "<op:description>StandaloneMsg</op:description>\n" - + "</op:service-description>\n" - + "<contact>tel:+11234567890</contact>\n" - + "</tuple>\n" - + "</presence>"; + + "xmlns:op=\"urn:oma:xml:prs:pidf:oma-pres\" " + + "xmlns:b=\"urn:ietf:params:xml:ns:pidf:caps\" " + + "entity=\"tel:+11234567890\">\n" + // Tuple: Discovery + + " <tuple id=\"DiscoveryPres\">\n\t" + + " <status>\n\t" + + " <basic>open</basic>\n\t" + + " </status>\n\t" + + " <op:service-description>\n\t" + + " <op:service-id>org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcse.dp" + + "</op:service-id>\n\t" + + " <op:version>1.0</op:version>\n\t" + + " <op:description>DiscoveryPresence</op:description>\n\t" + + " </op:service-description>\n\t" + + " <contact>tel:+11234567890</contact>\n\t" + + " </tuple>\n\t" + // Tuple: VoLTE + + " <tuple id=\"VoLTE\">\n" + + " <status>\n" + + " <basic>open</basic>\n" + + " </status>\n" + + " <b:servcaps>\n" + + " <b:audio>true</b:audio>\n" + + " <b:video>true</b:video>\n" + + " <b:duplex>\n" + + " <b:supported>\n" + + " <b:full/>\n" + + " </b:supported>\n" + + " </b:duplex>\n" + + " </b:servcaps>\n" + + " <op:service-description>\n" + + " <op:service-id>org.3gpp.urn:urn-7:3gpp-service.ims.icsi.mmtel" + + "</op:service-id>\n" + + " <op:version>1.0</op:version>\n" + + " <op:description>VoLTE service</op:description>\n" + + " </op:service-description>\n" + + " <contact>tel:+11234567890</contact>\n" + + " </tuple>\n" + // Tuple: Standalone Message + + " <tuple id=\"StandaloneMsg\">\n" + + " <status>\n" + + " <basic>open</basic>\n" + + " </status>\n" + + " <op:service-description>\n" + + " <op:service-id>org.openmobilealliance:StandaloneMsg</op:service-id>\n" + + " <op:version>2.0</op:version>\n" + + " <op:description>StandaloneMsg</op:description>\n" + + " </op:service-description>\n" + + " <contact>tel:+11234567890</contact>\n" + + " </tuple>\n" + // Tuple: Session Mode Message + + " <tuple id=\"SessModeMessa\">\n" + + " <status>\n" + + " <basic>open</basic>\n" + + " </status>\n" + + " <op:service-description>\n" + + " <op:service-id>org.openmobilealliance:ChatSession</op:service-id>\n" + + " <op:version>2.0</op:version>\n" + + " <op:description>Session Mode Messaging</op:description>\n" + + " </op:service-description>\n" + + " <contact>tel:+11234567890</contact>\n" + + " </tuple>\n" + // Tuple: File Transfer + + " <tuple id=\"FileTransfer\">\n" + + " <status>\n" + + " <basic>open</basic>\n" + + " </status>\n" + + " <op:service-description>\n" + + " <op:service-id>org.openmobilealliance:File-Transfer</op:service-id>\n" + + " <op:version>1.0</op:version>\n" + + " <op:description>File Transfer</op:description>\n" + + " </op:service-description>\n" + + " <contact>tel:+11234567890</contact>\n" + + " </tuple>\n" + + " </presence>"; + return pidf; } |