From 49ca77978e6d48a47d4c74afb1c2768f86e5d265 Mon Sep 17 00:00:00 2001 From: Nancy Chen Date: Fri, 19 Dec 2014 17:55:48 -0800 Subject: Call duration should be verbalized as hours, minutes, seconds. Currently the call duration in the InCallUI is read as a time. It should be read in terms of hours, minutes, seconds. Updated contentDescription to match this specification. Bug: 18761699 Change-Id: I5b6eded63471c905638e05a5b5336403568f77e9 --- src/com/android/incallui/CallCardFragment.java | 7 +++- src/com/android/incallui/CallCardPresenter.java | 9 ++-- src/com/android/incallui/InCallDateUtils.java | 56 +++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/com/android/incallui/InCallDateUtils.java diff --git a/src/com/android/incallui/CallCardFragment.java b/src/com/android/incallui/CallCardFragment.java index c70bd6ed..4bc98557 100644 --- a/src/com/android/incallui/CallCardFragment.java +++ b/src/com/android/incallui/CallCardFragment.java @@ -32,6 +32,7 @@ import android.telecom.DisconnectCause; 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.view.animation.AnimationUtils; 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 @@ public class CallCardFragment extends BaseFragment } 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 @@ public class CallCardPresenter extends Presenter 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 @@ public class CallCardPresenter extends Presenter 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/src/com/android/incallui/InCallDateUtils.java b/src/com/android/incallui/InCallDateUtils.java new file mode 100644 index 00000000..88c5354c --- /dev/null +++ b/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(); + } + +} -- cgit v1.2.3