Skip to content

Commit 2bbc19d

Browse files
jsharkeyAndroid (Google) Code Review
authored andcommitted
Merge "Avoid emitting broken ASCII."
2 parents 1c6b82b + eaaf396 commit 2bbc19d

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

core/java/android/util/TimeUtils.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@
1818

1919
import android.content.res.Resources;
2020
import android.content.res.XmlResourceParser;
21+
import android.text.format.DateUtils;
22+
23+
import com.android.internal.util.XmlUtils;
2124

22-
import libcore.util.ZoneInfoDB;
2325
import org.xmlpull.v1.XmlPullParser;
2426
import org.xmlpull.v1.XmlPullParserException;
2527

@@ -28,10 +30,10 @@
2830
import java.util.ArrayList;
2931
import java.util.Calendar;
3032
import java.util.Collection;
31-
import java.util.TimeZone;
3233
import java.util.Date;
34+
import java.util.TimeZone;
3335

34-
import com.android.internal.util.XmlUtils;
36+
import libcore.util.ZoneInfoDB;
3537

3638
/**
3739
* A class containing utility methods related to time zones.
@@ -245,6 +247,8 @@ public static String getTimeZoneDatabaseVersion() {
245247
private static final Object sFormatSync = new Object();
246248
private static char[] sFormatStr = new char[HUNDRED_DAY_FIELD_LEN+5];
247249

250+
private static final long LARGEST_DURATION = (1000 * DateUtils.DAY_IN_MILLIS) - 1;
251+
248252
static private int accumField(int amt, int suffix, boolean always, int zeropad) {
249253
if (amt > 99 || (always && zeropad >= 3)) {
250254
return 3+suffix;
@@ -307,6 +311,10 @@ private static int formatDurationLocked(long duration, int fieldLen) {
307311
duration = -duration;
308312
}
309313

314+
if (duration > LARGEST_DURATION) {
315+
duration = LARGEST_DURATION;
316+
}
317+
310318
int millis = (int)(duration%1000);
311319
int seconds = (int) Math.floor(duration / 1000);
312320
int days = 0, hours = 0, minutes = 0;

core/tests/coretests/src/android/util/TimeUtilsTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
import junit.framework.TestCase;
2020

21-
import android.util.TimeUtils;
22-
2321
import java.util.Calendar;
2422
import java.util.TimeZone;
2523

@@ -442,6 +440,13 @@ public void testFormatDuration() {
442440
assertFormatDuration("+10s24ms", 10024);
443441
}
444442

443+
public void testFormatHugeDuration() {
444+
//assertFormatDuration("+15542d1h11m11s555ms", 1342833071555L);
445+
// TODO: improve formatDuration() API
446+
assertFormatDuration("+999d23h59m59s999ms", 1342833071555L);
447+
assertFormatDuration("-999d23h59m59s999ms", -1342833071555L);
448+
}
449+
445450
private void assertFormatDuration(String expected, long duration) {
446451
StringBuilder sb = new StringBuilder();
447452
TimeUtils.formatDuration(duration, sb);

0 commit comments

Comments
 (0)