Call the new added UCE APIs instead because of the UCE APIs modification
Bug: 180126217
Test: atest ImsServiceTest RcsUceAdapterTest EabControllerTest
Change-Id: I22a455b043a6e76e3d35a6b37d022c44003d2454
diff --git a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
index 9ea29e8..ce78ecb 100644
--- a/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
+++ b/src/java/com/android/ims/rcs/uce/eab/EabControllerImpl.java
@@ -49,6 +49,7 @@
import com.android.internal.annotations.VisibleForTesting;
import java.time.Instant;
+import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.GregorianCalendar;
@@ -376,7 +377,14 @@
rcsContactPresenceTupleBuilder.setServiceCapabilities(serviceCapabilities);
}
if (timeStamp != null) {
- rcsContactPresenceTupleBuilder.setTimestamp(timeStamp);
+ try {
+ Instant instant = Instant.ofEpochSecond(Long.parseLong(timeStamp));
+ rcsContactPresenceTupleBuilder.setTime(instant);
+ } catch (NumberFormatException ex) {
+ Log.w(TAG, "Create presence tuple: NumberFormatException");
+ } catch (DateTimeParseException e) {
+ Log.w(TAG, "Create presence tuple: parse timestamp failed");
+ }
}
return rcsContactPresenceTupleBuilder.build();
@@ -557,21 +565,8 @@
// Using the current timestamp if the timestamp doesn't populate
Long timestamp;
- if (tuple.getTimestamp() != null) {
- try {
- Time time = new Time();
- time.parse3339(tuple.getTimestamp());
-
- GregorianCalendar date = new GregorianCalendar(
- time.year, time.month, time.monthDay,
- time.hour, time.minute, time.second);
- date.setTimeZone(TimeZone.getTimeZone("UTC"));
- timestamp = date.getTime().getTime() / 1000;
- } catch (TimeFormatException ex) {
- Log.d(TAG, "Fail on parsing the timestamp. "
- + "Timestamp: " + tuple.getTimestamp());
- timestamp = Instant.now().getEpochSecond();
- }
+ if (tuple.getTime() != null) {
+ timestamp = tuple.getTime().getEpochSecond();
} else {
timestamp = Instant.now().getEpochSecond();
}
diff --git a/src/java/com/android/ims/rcs/uce/presence/pidfparser/PidfParser.java b/src/java/com/android/ims/rcs/uce/presence/pidfparser/PidfParser.java
index 087dc9f..774a48e 100644
--- a/src/java/com/android/ims/rcs/uce/presence/pidfparser/PidfParser.java
+++ b/src/java/com/android/ims/rcs/uce/presence/pidfparser/PidfParser.java
@@ -41,6 +41,9 @@
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
+import java.time.Instant;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
@@ -201,7 +204,13 @@
// Timestamp
String timestamp = PidfParserUtils.getTupleTimestamp(tuple);
if (!TextUtils.isEmpty(timestamp)) {
- builder.setTimestamp(timestamp);
+ try {
+ Instant instant = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(
+ timestamp, Instant::from);
+ builder.setTime(instant);
+ } catch (DateTimeParseException e) {
+ Log.w(LOG_TAG, "getRcsContactPresenceTuple: Parse timestamp failed " + e);
+ }
}
// Set service description
diff --git a/src/java/com/android/ims/rcs/uce/presence/publish/PublishProcessorState.java b/src/java/com/android/ims/rcs/uce/presence/publish/PublishProcessorState.java
index 6362dd7..a3a2640 100644
--- a/src/java/com/android/ims/rcs/uce/presence/publish/PublishProcessorState.java
+++ b/src/java/com/android/ims/rcs/uce/presence/publish/PublishProcessorState.java
@@ -100,6 +100,9 @@
// Get the delay time to allow to execute the publish request.
public long getDelayTimeToAllowPublish() {
synchronized (mLock) {
+ if (mAllowedTimestamp == null) {
+ mAllowedTimestamp = Instant.now();
+ }
// Setup the delay to the time which publish request is allowed to execute.
long delayTime = ChronoUnit.MILLIS.between(Instant.now(), mAllowedTimestamp);
if (delayTime < 0) {
diff --git a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
index 54925c2..af52217 100644
--- a/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
+++ b/tests/src/com/android/ims/rcs/uce/eab/EabControllerTest.java
@@ -49,7 +49,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.text.SimpleDateFormat;
+import java.time.temporal.ChronoUnit;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
@@ -153,11 +154,9 @@
GregorianCalendar date = new GregorianCalendar();
date.setTimeZone(TimeZone.getTimeZone("UTC"));
date.add(Calendar.DATE, -120);
- String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
- .format(date.getTime());
List<RcsContactUceCapability> contactList = new ArrayList<>();
- contactList.add(createPresenceNonRcsCapability(timestamp));
+ contactList.add(createPresenceNonRcsCapability(Instant.now()));
mEabController.saveCapabilities(contactList);
@@ -177,11 +176,7 @@
// Set non-rcs capabilities expiration to 119 days
mBundle.putInt(KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT, 119 * 24 * 60 * 60);
// Set timestamp to 120 days age
- GregorianCalendar date = new GregorianCalendar();
- date.setTimeZone(TimeZone.getTimeZone("UTC"));
- date.add(Calendar.DATE, -120);
- String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
- .format(date.getTime());
+ Instant timestamp = Instant.now().minus(120, ChronoUnit.DAYS);
List<RcsContactUceCapability> contactList = new ArrayList<>();
contactList.add(createPresenceNonRcsCapability(timestamp));
@@ -288,18 +283,13 @@
}
private RcsContactUceCapability createPresenceCapability(boolean isExpired) {
- String timestamp;
- GregorianCalendar date = new GregorianCalendar();
- date.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Instant timestamp;
if (isExpired) {
- date.add(Calendar.DATE, -120);
+ timestamp = Instant.now().minus(120, ChronoUnit.DAYS);
} else {
- date.add(Calendar.DATE, 120);
+ timestamp = Instant.now().plus(120, ChronoUnit.DAYS);
}
- timestamp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
- .format(date.getTime());
-
RcsContactPresenceTuple.ServiceCapabilities.Builder serviceCapabilitiesBuilder =
new RcsContactPresenceTuple.ServiceCapabilities.Builder(TEST_AUDIO_CAPABLE,
TEST_VIDEO_CAPABLE);
@@ -309,7 +299,7 @@
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
.setServiceCapabilities(serviceCapabilitiesBuilder.build())
- .setTimestamp(timestamp)
+ .setTime(timestamp)
.build();
RcsContactPresenceTuple tupleWithEmptyServiceCapabilities =
@@ -317,7 +307,7 @@
TEST_SERVICE_VERSION)
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
- .setTimestamp(timestamp)
+ .setTime(timestamp)
.build();
RcsContactUceCapability.PresenceBuilder builder =
@@ -328,7 +318,7 @@
return builder.build();
}
- private RcsContactUceCapability createPresenceNonRcsCapability(String timestamp) {
+ private RcsContactUceCapability createPresenceNonRcsCapability(Instant timestamp) {
RcsContactPresenceTuple.ServiceCapabilities.Builder serviceCapabilitiesBuilder =
new RcsContactPresenceTuple.ServiceCapabilities.Builder(false, false);
RcsContactPresenceTuple tupleWithServiceCapabilities =
@@ -337,7 +327,7 @@
.setServiceDescription(TEST_SERVICE_DESCRIPTION)
.setContactUri(TEST_CONTACT_URI)
.setServiceCapabilities(serviceCapabilitiesBuilder.build())
- .setTimestamp(timestamp)
+ .setTime(timestamp)
.build();
RcsContactUceCapability.PresenceBuilder builder =
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 5b5c4b3..73581ee 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
@@ -102,7 +102,7 @@
assertEquals("1.0", presenceTuple1.getServiceVersion());
assertEquals(serviceDescription, presenceTuple1.getServiceDescription());
assertEquals(Uri.parse(contact), presenceTuple1.getContactUri());
- assertEquals("2001-01-01T01:00:000Z", presenceTuple1.getTimestamp());
+ assertEquals("2001-01-01T01:00:00Z", presenceTuple1.getTime().toString());
assertTrue(presenceTuple1.getServiceCapabilities().isAudioCapable());
assertFalse(presenceTuple1.getServiceCapabilities().isVideoCapable());
}
@@ -138,7 +138,7 @@
assertEquals("1.0", presenceTuple1.getServiceVersion());
assertEquals(serviceDescription1, presenceTuple1.getServiceDescription());
assertEquals(Uri.parse(contact), presenceTuple1.getContactUri());
- assertEquals("2001-01-01T01:00:000Z", presenceTuple1.getTimestamp());
+ assertEquals("2001-01-01T01:00:00Z", presenceTuple1.getTime().toString());
assertNull(presenceTuple1.getServiceCapabilities());
// Verify the second tuple information
@@ -149,7 +149,7 @@
assertFalse(presenceTuple2.getServiceCapabilities().isVideoCapable());
assertEquals(serviceDescription2, presenceTuple2.getServiceDescription());
assertEquals(Uri.parse(contact), presenceTuple2.getContactUri());
- assertEquals("2001-02-02T01:00:000Z", presenceTuple2.getTimestamp());
+ assertEquals("2001-02-02T01:00:00Z", presenceTuple2.getTime().toString());
assertNotNull(presenceTuple2.getServiceCapabilities());
assertEquals(isAudioSupported, presenceTuple2.getServiceCapabilities().isAudioCapable());
assertEquals(isVideoSupported, presenceTuple2.getServiceCapabilities().isVideoCapable());
@@ -236,7 +236,7 @@
.append("<caps:video>").append(isVideoSupported).append("</caps:video>")
.append("</caps:servcaps>")
.append("<contact>").append(contact).append("</contact>")
- .append("<timestamp>2001-01-01T01:00:000Z</timestamp>")
+ .append("<timestamp>2001-01-01T01:00:00.00Z</timestamp>")
.append("</tuple></presence>");
return pidfBuilder.toString();
}
@@ -258,7 +258,7 @@
+ "<op:description>" + serviceDescription1 + "</op:description>"
+ "</op:service-description>"
+ "<contact>" + contact + "</contact>"
- + "<timestamp>2001-01-01T01:00:000Z</timestamp>"
+ + "<timestamp>2001-01-01T01:00:00.00Z</timestamp>"
+ "</tuple>"
// tuple 2
+ "<tuple id=\"a1\">"
@@ -276,7 +276,7 @@
+ "<caps:video>" + videoSupported + "</caps:video>"
+ "</caps:servcaps>"
+ "<contact>" + contact + "</contact>"
- + "<timestamp>2001-02-02T01:00:000Z</timestamp>"
+ + "<timestamp>2001-02-02T01:00:00.00Z</timestamp>"
+ "</tuple>"
+ "</presence>";
}
@@ -289,7 +289,7 @@
final String basicStatus = RcsContactPresenceTuple.TUPLE_BASIC_STATUS_OPEN;
final String version = "1.0";
final String description = "description test";
- final String nowTime = Instant.now().toString();
+ final Instant nowTime = Instant.now();
// init the capabilities
ServiceCapabilities.Builder servCapsBuilder =
@@ -301,7 +301,7 @@
basicStatus, RcsContactPresenceTuple.SERVICE_ID_MMTEL, version);
tupleBuilder.setContactUri(contact)
.setServiceDescription(description)
- .setTimestamp(nowTime)
+ .setTime(nowTime)
.setServiceCapabilities(servCapsBuilder.build());
PresenceBuilder presenceBuilder = new PresenceBuilder(contact,