diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/components/browser_ui/util | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-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')
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 |