summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarmad Hashmi <mhashmi@google.com>2016-02-10 02:11:09 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-02-10 02:11:09 +0000
commit569cb462299511dc2229ed15cfd8606ae249830c (patch)
tree1ef712e2e6374a6f20c33092d745dcf878bfe97b
parent9ba15b1a5ad47a69bf2b8654debddc3c27ae790c (diff)
parent6b6c6b756c54ef97c8ef6b445152dfaa1c42a5eb (diff)
Merge "Collapsed and expanded voicemail cards show duration." into ub-contactsdialer-master-dev
am: 6b6c6b756c * commit '6b6c6b756c54ef97c8ef6b445152dfaa1c42a5eb': Collapsed and expanded voicemail cards show duration.
-rw-r--r--res/values/strings.xml6
-rw-r--r--src/com/android/dialer/calllog/PhoneCallDetailsHelper.java32
-rw-r--r--tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java40
3 files changed, 69 insertions, 9 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ed88b960f..ae63df3bf 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -455,6 +455,12 @@
The date will be replaced by 'Today' for voicemails created on the current day. For example: Today at 2:49 PM -->
<string name="voicemailCallLogDateTimeFormat"><xliff:g id="date" example="Jul 25, 2014">%1$s</xliff:g> at <xliff:g id="time" example="2:49 PM">%2$s</xliff:g></string>
+ <!-- Format for duration of voicemails which are displayed when viewing voicemail logs. For example "01:22" -->
+ <string name="voicemailDurationFormat"><xliff:g id="minutes" example="10">%1$02d</xliff:g>:<xliff:g id="seconds" example="20">%2$02d</xliff:g></string>
+
+ <!-- A format string used for displaying the date, time and duration for a voicemail call log. For example: Jul 25, 2014 at 2:49 PM • 00:34 -->
+ <string name="voicemailCallLogDateTimeFormatWithDuration"><xliff:g id="dateAndTime" example="Jul 25, 2014 at 2:49PM">%1$s</xliff:g> \u2022 <xliff:g id="duration" example="01:22">%2$s</xliff:g></string>
+
<!-- Dialog message which is shown when the user tries to make a phone call
to prohibited phone numbers [CHAR LIMIT=NONE] -->
<string name="dialog_phone_call_prohibited_message" msgid="4313552620858880999">Can\'t call this number</string>
diff --git a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
index e6b850872..be02e4c1b 100644
--- a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
@@ -40,6 +40,7 @@ import com.android.dialer.util.DialerUtils;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.concurrent.TimeUnit;
/**
* Helper class to fill in the views in {@link PhoneCallDetailsViews}.
@@ -110,10 +111,8 @@ public class PhoneCallDetailsHelper {
callCount = null;
}
- CharSequence callLocationAndDate = getCallLocationAndDate(details);
-
- // Set the call count, location and date.
- setCallCountAndDate(views, callCount, callLocationAndDate);
+ // Set the call count, location, date and if voicemail, set the duration.
+ setDetailText(views, callCount, details);
// Set the account label if it exists.
String accountLabel = mCallLogCache.getAccountLabel(details.accountHandle);
@@ -314,10 +313,11 @@ public class PhoneCallDetailsHelper {
}
}
- /** Sets the call count and date. */
- private void setCallCountAndDate(PhoneCallDetailsViews views, Integer callCount,
- CharSequence dateText) {
+ /** Sets the call count, date, and if it is a voicemail, sets the duration. */
+ private void setDetailText(PhoneCallDetailsViews views, Integer callCount,
+ PhoneCallDetails details) {
// Combine the count (if present) and the date.
+ CharSequence dateText = getCallLocationAndDate(details);
final CharSequence text;
if (callCount != null) {
text = mResources.getString(
@@ -326,6 +326,22 @@ public class PhoneCallDetailsHelper {
text = dateText;
}
- views.callLocationAndDate.setText(text);
+ if (details.callTypes[0] == Calls.VOICEMAIL_TYPE) {
+ views.callLocationAndDate.setText(mResources.getString(
+ R.string.voicemailCallLogDateTimeFormatWithDuration, text,
+ getVoicemailDuration(details)));
+ } else {
+ views.callLocationAndDate.setText(text);
+ }
+
+ }
+
+ private String getVoicemailDuration(PhoneCallDetails details) {
+ long minutes = TimeUnit.SECONDS.toMinutes(details.duration);
+ long seconds = details.duration - TimeUnit.MINUTES.toSeconds(minutes);
+ if (minutes > 99) {
+ minutes = 99;
+ }
+ return mResources.getString(R.string.voicemailDurationFormat, minutes, seconds);
}
}
diff --git a/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
index b6202b904..4e00a462b 100644
--- a/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
@@ -34,6 +34,8 @@ import com.android.dialer.util.LocaleTestUtils;
import java.util.GregorianCalendar;
import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Unit tests for {@link PhoneCallDetailsHelper}.
@@ -141,7 +143,27 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
public void testVoicemailLocationNotShownWithDate() {
setVoicemailPhoneCallDetailsWithDate(TEST_DATE);
- assertLocationAndDateExactEquals("Jun 3 at 1:00 PM");
+ assertLocationAndDateExactEquals("Jun 3 at 1:00 PM • 99:20");
+ }
+
+ public void testVoicemailDuration() {
+ setVoicemailPhoneCallDetailsWithDuration(100);
+ assertDurationExactEquals("01:40");
+ }
+
+ public void testVoicemailDuration_Capped() {
+ setVoicemailPhoneCallDetailsWithDuration(TEST_DURATION);
+ assertDurationExactEquals("99:20");
+ }
+
+ public void testVoicemailDuration_Zero() {
+ setVoicemailPhoneCallDetailsWithDuration(0);
+ assertDurationExactEquals("00:00");
+ }
+
+ public void testVoicemailDuration_EvenMinute() {
+ setVoicemailPhoneCallDetailsWithDuration(60);
+ assertDurationExactEquals("01:00");
}
/** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */
@@ -346,6 +368,14 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
assertEquals(text, mViews.callLocationAndDate.getText());
}
+ /** Asserts that the duration is exactly as included in the location and date text field. */
+ private void assertDurationExactEquals(String text) {
+ Matcher matcher = Pattern.compile("(.*) (\\u2022) (\\d{2}:\\d{2})").matcher(
+ mViews.callLocationAndDate.getText());
+ assertEquals(true, matcher.matches());
+ assertEquals(text, matcher.group(3));
+ }
+
/** Asserts that the video icon is shown. */
private void assertIsVideoCall(boolean isVideoCall) {
assertEquals(isVideoCall, mViews.callTypeIcons.isVideoShown());
@@ -407,6 +437,14 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
mHelper.setPhoneCallDetails(mViews, details);
}
+ /** Sets the voice mail details with default values and the given duration. */
+ private void setVoicemailPhoneCallDetailsWithDuration(long duration) {
+ PhoneCallDetails details = getPhoneCallDetails();
+ details.duration = duration;
+ details.callTypes = new int[] {Calls.VOICEMAIL_TYPE};
+ mHelper.setPhoneCallDetails(mViews, details);
+ }
+
/** Sets the phone call details with default values and the given call types using icons. */
private void setPhoneCallDetailsWithCallTypeIcons(int... callTypes) {
PhoneCallDetails details = getPhoneCallDetails();