summaryrefslogtreecommitdiff
path: root/chromium/components/browser_ui/util
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/browser_ui/util
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/browser_ui/util')
-rw-r--r--chromium/components/browser_ui/util/android/BUILD.gn8
-rw-r--r--chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarFactory.java44
-rw-r--r--chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarUtils.java57
-rw-r--r--chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/StringUtils.java52
4 files changed, 161 insertions, 0 deletions
diff --git a/chromium/components/browser_ui/util/android/BUILD.gn b/chromium/components/browser_ui/util/android/BUILD.gn
index 5b7a7d3e0a4..3e582066cba 100644
--- a/chromium/components/browser_ui/util/android/BUILD.gn
+++ b/chromium/components/browser_ui/util/android/BUILD.gn
@@ -10,6 +10,9 @@ android_library("java") {
"java/src/org/chromium/components/browser_ui/util/ComposedBrowserControlsVisibilityDelegate.java",
"java/src/org/chromium/components/browser_ui/util/ConversionUtils.java",
"java/src/org/chromium/components/browser_ui/util/DownloadUtils.java",
+ "java/src/org/chromium/components/browser_ui/util/date/CalendarFactory.java",
+ "java/src/org/chromium/components/browser_ui/util/date/CalendarUtils.java",
+ "java/src/org/chromium/components/browser_ui/util/date/StringUtils.java",
]
deps = [
@@ -17,6 +20,7 @@ android_library("java") {
"//base:base_java",
"//components/embedder_support/android:util_java",
"//content/public/android:content_java",
+ "//third_party/android_deps:androidx_core_core_java",
]
}
@@ -44,5 +48,9 @@ java_library("junit") {
"//base:base_java_test_support",
"//base:base_junit_test_support",
"//base/test:test_support_java",
+ "//content/public/android:content_java",
+ "//third_party/android_deps:robolectric_all_java",
+ "//third_party/junit",
+ "//third_party/mockito:mockito_java",
]
}
diff --git a/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarFactory.java b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarFactory.java
new file mode 100644
index 00000000000..af194842f39
--- /dev/null
+++ b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarFactory.java
@@ -0,0 +1,44 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.util.date;
+
+import org.chromium.base.task.AsyncTask;
+import org.chromium.base.task.BackgroundOnlyAsyncTask;
+
+import java.util.Calendar;
+import java.util.concurrent.ExecutionException;
+
+/** Helper class to simplify querying for a {@link Calendar} instance. */
+public final class CalendarFactory {
+ private static final AsyncTask<Calendar> sCalendarBuilder =
+ new CalendarBuilder().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+
+ private CalendarFactory() {}
+
+ /**
+ *
+ * @return A unique {@link Calendar} instance. This version will (1) not be handed out to any
+ * other caller and (2) will be completely reset.
+ */
+ public static Calendar get() {
+ Calendar calendar = null;
+ try {
+ calendar = (Calendar) sCalendarBuilder.get().clone();
+ } catch (InterruptedException | ExecutionException e) {
+ // We've tried our best. If AsyncTask really does not work, we give up. :(
+ calendar = Calendar.getInstance();
+ }
+
+ calendar.clear();
+ return calendar;
+ }
+
+ private static class CalendarBuilder extends BackgroundOnlyAsyncTask<Calendar> {
+ @Override
+ protected Calendar doInBackground() {
+ return Calendar.getInstance();
+ }
+ }
+}
diff --git a/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarUtils.java b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarUtils.java
new file mode 100644
index 00000000000..8f22e69d090
--- /dev/null
+++ b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/CalendarUtils.java
@@ -0,0 +1,57 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.util.date;
+
+import java.util.Calendar;
+
+/** A set of utility methods meant to make interacting with a {@link Calendar} instance easier. */
+public final class CalendarUtils {
+ private static final class LazyHolder {
+ private static Calendar sCalendar1 = CalendarFactory.get();
+ private static Calendar sCalendar2 = CalendarFactory.get();
+ }
+
+ private CalendarUtils() {}
+
+ /**
+ * Helper method to return the start of the day according to the localized {@link Calendar}.
+ * This instance will have no hour, minute, second, etc. associated with it. Only year, month,
+ * and day of month.
+ * @param t The timestamp (in milliseconds) since epoch.
+ * @return A {@link Calendar} instance representing the beginning of the day denoted by
+ * {@code t}.
+ */
+ public static Calendar getStartOfDay(long t) {
+ LazyHolder.sCalendar1.setTimeInMillis(t);
+
+ int year = LazyHolder.sCalendar1.get(Calendar.YEAR);
+ int month = LazyHolder.sCalendar1.get(Calendar.MONTH);
+ int day = LazyHolder.sCalendar1.get(Calendar.DATE);
+ LazyHolder.sCalendar1.clear();
+ LazyHolder.sCalendar1.set(year, month, day, 0, 0, 0);
+
+ return LazyHolder.sCalendar1;
+ }
+
+ /**
+ * Helper method determining whether or not two timestamps occur on the same localized calendar
+ * day.
+ * @param t1 A timestamp (in milliseconds) since epoch.
+ * @param t2 A timestamp (in milliseconds) since epoch.
+ * @return Whether or not {@code t1} and {@code t2} represent times on the same localized
+ * calendar day.
+ */
+ public static boolean isSameDay(long t1, long t2) {
+ LazyHolder.sCalendar1.setTimeInMillis(t1);
+ LazyHolder.sCalendar2.setTimeInMillis(t2);
+ return isSameDay(LazyHolder.sCalendar1, LazyHolder.sCalendar2);
+ }
+
+ /** @return Whether {@code cal1} and {@code cal2} have the same localized calendar day. */
+ public static boolean isSameDay(Calendar cal1, Calendar cal2) {
+ return cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR)
+ && cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);
+ }
+} \ No newline at end of file
diff --git a/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/StringUtils.java b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/StringUtils.java
new file mode 100644
index 00000000000..510d03d0fdc
--- /dev/null
+++ b/chromium/components/browser_ui/util/android/java/src/org/chromium/components/browser_ui/util/date/StringUtils.java
@@ -0,0 +1,52 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.browser_ui.util.date;
+
+import android.content.Context;
+import android.text.format.DateUtils;
+
+import org.chromium.base.ContextUtils;
+import org.chromium.components.browser_ui.util.R;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/** Helper methods to deal with converting dates to various strings. */
+public class StringUtils {
+ private static final class LazyHolder {
+ private static Calendar sCalendar1 = CalendarFactory.get();
+ private static Calendar sCalendar2 = CalendarFactory.get();
+ }
+
+ private StringUtils() {}
+
+ /**
+ * Converts {@code date} into a string meant to be used as a list header.
+ * @param date The {@link Date} to convert.
+ * @return The {@link CharSequence} representing the header.
+ */
+ public static CharSequence dateToHeaderString(Date date) {
+ Context context = ContextUtils.getApplicationContext();
+
+ LazyHolder.sCalendar1.setTimeInMillis(System.currentTimeMillis());
+ LazyHolder.sCalendar2.setTime(date);
+
+ StringBuilder builder = new StringBuilder();
+ if (CalendarUtils.isSameDay(LazyHolder.sCalendar1, LazyHolder.sCalendar2)) {
+ builder.append(context.getString(R.string.today)).append(" - ");
+ } else {
+ LazyHolder.sCalendar1.add(Calendar.DATE, -1);
+ if (CalendarUtils.isSameDay(LazyHolder.sCalendar1, LazyHolder.sCalendar2)) {
+ builder.append(context.getString(R.string.yesterday)).append(" - ");
+ }
+ }
+
+ builder.append(DateUtils.formatDateTime(context, date.getTime(),
+ DateUtils.FORMAT_ABBREV_WEEKDAY | DateUtils.FORMAT_ABBREV_MONTH
+ | DateUtils.FORMAT_SHOW_YEAR));
+
+ return builder;
+ }
+} \ No newline at end of file