diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java index 1060bd84d1f6c..bcce61dc00aab 100644 --- a/core/java/android/text/format/DateUtils.java +++ b/core/java/android/text/format/DateUtils.java @@ -606,6 +606,30 @@ public class DateUtils } } + /** + * Return given duration in a human-friendly format. For example, "4 + * minutes" or "1 second". Returns only largest meaningful unit of time, + * from seconds up to hours. + * + * @hide + */ + public static CharSequence formatDuration(long millis) { + final Resources res = Resources.getSystem(); + if (millis >= HOUR_IN_MILLIS) { + final int hours = (int) ((millis + 1800000) / HOUR_IN_MILLIS); + return res.getQuantityString( + com.android.internal.R.plurals.duration_hours, hours, hours); + } else if (millis >= MINUTE_IN_MILLIS) { + final int minutes = (int) ((millis + 30000) / MINUTE_IN_MILLIS); + return res.getQuantityString( + com.android.internal.R.plurals.duration_minutes, minutes, minutes); + } else { + final int seconds = (int) ((millis + 500) / SECOND_IN_MILLIS); + return res.getQuantityString( + com.android.internal.R.plurals.duration_seconds, seconds, seconds); + } + } + /** * Formats an elapsed time in the form "MM:SS" or "H:MM:SS" * for display on the call-in-progress screen. diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 57b5e4944efff..d1a7703d7138c 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2840,6 +2840,21 @@ years + + + 1 second + %d seconds + + + + 1 minute + %d minutes + + + + 1 hour + %d hours + Video problem diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 68587321b2078..1d29d8ce2b359 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -870,6 +870,9 @@ + + + diff --git a/core/tests/coretests/src/android/text/format/DateUtilsTest.java b/core/tests/coretests/src/android/text/format/DateUtilsTest.java new file mode 100644 index 0000000000000..cf42bb1c003a0 --- /dev/null +++ b/core/tests/coretests/src/android/text/format/DateUtilsTest.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.text.format; + +import android.test.suitebuilder.annotation.SmallTest; + +import junit.framework.TestCase; + +public class DateUtilsTest extends TestCase { + @SmallTest + public void testFormatDurationSeconds() throws Exception { + assertEquals("0 seconds", DateUtils.formatDuration(0)); + assertEquals("0 seconds", DateUtils.formatDuration(1)); + assertEquals("0 seconds", DateUtils.formatDuration(499)); + assertEquals("1 second", DateUtils.formatDuration(500)); + assertEquals("1 second", DateUtils.formatDuration(1000)); + assertEquals("2 seconds", DateUtils.formatDuration(1500)); + } + + @SmallTest + public void testFormatDurationMinutes() throws Exception { + assertEquals("59 seconds", DateUtils.formatDuration(59000)); + assertEquals("60 seconds", DateUtils.formatDuration(59500)); + assertEquals("1 minute", DateUtils.formatDuration(60000)); + assertEquals("2 minutes", DateUtils.formatDuration(120000)); + } + + @SmallTest + public void testFormatDurationHours() throws Exception { + assertEquals("59 minutes", DateUtils.formatDuration(3540000)); + assertEquals("1 hour", DateUtils.formatDuration(3600000)); + assertEquals("48 hours", DateUtils.formatDuration(172800000)); + } +}