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,