From 995036f4e4bdb35f0dea2abf70d012190c7b2266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Wed, 7 Oct 2015 10:48:42 +0200 Subject: [PATCH] Fix regression introduced in 37e23e8d5082 The idea was good, but it applied the second-precise date format everywhere. This broke dates on apps and apks, which have the format yyyy-MM-dd on the index. Fix this by having two sets of funcs in Utils, one for dates (precise to a day) and one for times (precise to a second). We should use the latter for dates we ourselves measure, like the last repo update time. --- .../src/org/fdroid/fdroid/RepoUpdater.java | 4 +-- F-Droid/src/org/fdroid/fdroid/Utils.java | 28 ++++++++++++++++--- F-Droid/src/org/fdroid/fdroid/data/Repo.java | 4 +-- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/F-Droid/src/org/fdroid/fdroid/RepoUpdater.java b/F-Droid/src/org/fdroid/fdroid/RepoUpdater.java index 4e07dbb6c..bf6a06511 100644 --- a/F-Droid/src/org/fdroid/fdroid/RepoUpdater.java +++ b/F-Droid/src/org/fdroid/fdroid/RepoUpdater.java @@ -191,7 +191,7 @@ public class RepoUpdater { private ContentValues prepareRepoDetailsForSaving(RepoXMLHandler handler, String etag) { ContentValues values = new ContentValues(); - values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatDate(new Date(), "")); + values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatTime(new Date(), "")); if (repo.lastetag == null || !repo.lastetag.equals(etag)) { values.put(RepoProvider.DataColumns.LAST_ETAG, etag); @@ -305,7 +305,7 @@ public class RepoUpdater { if (trustNewSigningCertificate) { Utils.debugLog(TAG, "Saving new signing certificate in the database for " + repo.address); ContentValues values = new ContentValues(2); - values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatDate(new Date(), "")); + values.put(RepoProvider.DataColumns.LAST_UPDATED, Utils.formatTime(new Date(), "")); values.put(RepoProvider.DataColumns.PUBLIC_KEY, Hasher.hex(rawCertFromJar)); RepoProvider.Helper.update(context, repo, values); } diff --git a/F-Droid/src/org/fdroid/fdroid/Utils.java b/F-Droid/src/org/fdroid/fdroid/Utils.java index 4ede25547..c4f306179 100644 --- a/F-Droid/src/org/fdroid/fdroid/Utils.java +++ b/F-Droid/src/org/fdroid/fdroid/Utils.java @@ -58,6 +58,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.Certificate; import java.security.cert.CertificateEncodingException; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -76,6 +77,9 @@ public final class Utils { // The date format used for storing dates (e.g. lastupdated, added) in the // database. private static final SimpleDateFormat DATE_FORMAT = + new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); + + private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss", Locale.ENGLISH); private static final String[] FRIENDLY_SIZE_FORMAT = { @@ -562,24 +566,40 @@ public final class Utils { return result; } - public static Date parseDate(String str, Date fallback) { + private static Date parseDateFormat(DateFormat format, String str, Date fallback) { if (str == null || str.length() == 0) { return fallback; } Date result; try { - result = DATE_FORMAT.parse(str); + result = format.parse(str); } catch (ParseException e) { result = fallback; } return result; } - public static String formatDate(Date date, String fallback) { + private static String formatDateFormat(DateFormat format, Date date, String fallback) { if (date == null) { return fallback; } - return DATE_FORMAT.format(date); + return format.format(date); + } + + public static Date parseDate(String str, Date fallback) { + return parseDateFormat(DATE_FORMAT, str, fallback); + } + + public static String formatDate(Date date, String fallback) { + return formatDateFormat(DATE_FORMAT, date, fallback); + } + + public static Date parseTime(String str, Date fallback) { + return parseDateFormat(TIME_FORMAT, str, fallback); + } + + public static String formatTime(Date date, String fallback) { + return formatDateFormat(TIME_FORMAT, date, fallback); } // Need this to add the unimplemented support for ordered and unordered diff --git a/F-Droid/src/org/fdroid/fdroid/data/Repo.java b/F-Droid/src/org/fdroid/fdroid/data/Repo.java index 28979ec6c..14c5f1781 100644 --- a/F-Droid/src/org/fdroid/fdroid/data/Repo.java +++ b/F-Droid/src/org/fdroid/fdroid/data/Repo.java @@ -65,7 +65,7 @@ public class Repo extends ValueObject { inuse = cursor.getInt(i) == 1; break; case RepoProvider.DataColumns.LAST_UPDATED: - lastUpdated = Utils.parseDate(cursor.getString(i), null); + lastUpdated = Utils.parseTime(cursor.getString(i), null); break; case RepoProvider.DataColumns.MAX_AGE: maxage = cursor.getInt(i); @@ -160,7 +160,7 @@ public class Repo extends ValueObject { if (values.containsKey(RepoProvider.DataColumns.LAST_UPDATED)) { final String dateString = values.getAsString(RepoProvider.DataColumns.LAST_UPDATED); - lastUpdated = Utils.parseDate(dateString, null); + lastUpdated = Utils.parseTime(dateString, null); } if (values.containsKey(RepoProvider.DataColumns.MAX_AGE)) {