diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index c70bd6e..4bc9855 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -32,6 +32,7 @@
 import android.telecom.VideoProfile;
 import android.telephony.PhoneNumberUtils;
 import android.text.TextUtils;
+import android.text.format.DateUtils;
 import android.view.Display;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -47,6 +48,7 @@
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.TextView;
+
 import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.common.widget.FloatingActionButtonController;
 import com.android.incallui.service.PhoneNumberService;
@@ -592,12 +594,15 @@
     }
 
     @Override
-    public void setPrimaryCallElapsedTime(boolean show, String callTimeElapsed) {
+    public void setPrimaryCallElapsedTime(boolean show, long duration) {
         if (show) {
             if (mElapsedTime.getVisibility() != View.VISIBLE) {
                 AnimUtils.fadeIn(mElapsedTime, AnimUtils.DEFAULT_DURATION);
             }
+            String callTimeElapsed = DateUtils.formatElapsedTime(duration / 1000);
+            String durationDescription = InCallDateUtils.formatDetailedDuration(duration);
             mElapsedTime.setText(callTimeElapsed);
+            mElapsedTime.setContentDescription(durationDescription);
         } else {
             // hide() animation has no effect if it is already hidden.
             AnimUtils.fadeOut(mElapsedTime, AnimUtils.DEFAULT_DURATION);
diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java
index a039637..0d04f48 100644
--- a/InCallUI/src/com/android/incallui/CallCardPresenter.java
+++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java
@@ -33,7 +33,6 @@
 import android.telephony.PhoneNumberUtils;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.text.format.DateUtils;
 
 import com.android.incallui.ContactInfoCache.ContactCacheEntry;
 import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
@@ -226,7 +225,7 @@
         } else {
             Log.d(this, "Canceling the calltime timer");
             mCallTimer.cancel();
-            ui.setPrimaryCallElapsedTime(false, null);
+            ui.setPrimaryCallElapsedTime(false, 0);
         }
 
         // Set the call state
@@ -357,13 +356,13 @@
 
         if (ui == null || mPrimary == null || mPrimary.getState() != Call.State.ACTIVE) {
             if (ui != null) {
-                ui.setPrimaryCallElapsedTime(false, null);
+                ui.setPrimaryCallElapsedTime(false, 0);
             }
             mCallTimer.cancel();
         } else {
             final long callStart = mPrimary.getConnectTimeMillis();
             final long duration = System.currentTimeMillis() - callStart;
-            ui.setPrimaryCallElapsedTime(true, DateUtils.formatElapsedTime(duration / 1000));
+            ui.setPrimaryCallElapsedTime(true, duration);
         }
     }
 
@@ -734,7 +733,7 @@
         void setCallState(int state, int videoState, int sessionModificationState,
                 DisconnectCause disconnectCause, String connectionLabel,
                 Drawable connectionIcon, String gatewayNumber);
-        void setPrimaryCallElapsedTime(boolean show, String duration);
+        void setPrimaryCallElapsedTime(boolean show, long duration);
         void setPrimaryName(String name, boolean nameIsNumber);
         void setPrimaryImage(Drawable image);
         void setPrimaryPhoneNumber(String phoneNumber);
diff --git a/InCallUI/src/com/android/incallui/InCallDateUtils.java b/InCallUI/src/com/android/incallui/InCallDateUtils.java
new file mode 100644
index 0000000..88c5354
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/InCallDateUtils.java
@@ -0,0 +1,56 @@
+package com.android.incallui;
+
+import android.content.res.Resources;
+
+/**
+ * Methods to parse time and date information in the InCallUi
+ */
+public class InCallDateUtils {
+    public InCallDateUtils() {
+
+    }
+
+    /**
+     * Return given duration in a human-friendly format. For example, "4
+     * minutes 3 seconds" or "3 hours 1 second". Returns the hours, minutes and seconds in that
+     * order if they exist.
+     */
+    public static String formatDetailedDuration(long millis) {
+        int hours = 0;
+        int minutes = 0;
+        int seconds = 0;
+        int elapsedSeconds = (int) (millis / 1000);
+        if (elapsedSeconds >= 3600) {
+            hours = elapsedSeconds / 3600;
+            elapsedSeconds -= hours * 3600;
+        }
+        if (elapsedSeconds >= 60) {
+            minutes = elapsedSeconds / 60;
+            elapsedSeconds -= minutes * 60;
+        }
+        seconds = elapsedSeconds;
+
+        final Resources res = Resources.getSystem();
+        StringBuilder duration = new StringBuilder();
+        if (hours > 0) {
+            duration.append(res.getQuantityString(
+                    com.android.internal.R.plurals.duration_hours, hours, hours));
+        }
+        if (minutes > 0) {
+            if (hours > 0) {
+                duration.append(' ');
+            }
+            duration.append(res.getQuantityString(
+                    com.android.internal.R.plurals.duration_minutes, minutes, minutes));
+        }
+        if (seconds > 0) {
+            if (hours > 0 || minutes > 0) {
+                duration.append(' ');
+            }
+            duration.append(res.getQuantityString(
+                    com.android.internal.R.plurals.duration_seconds, seconds, seconds));
+        }
+        return duration.toString();
+    }
+
+}
