From d0f94b57c4fec76efa64ab4d357739905d4c23d5 Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Tue, 5 May 2020 19:32:24 +0200 Subject: [PATCH] Fixes #3321 Fixes #3320 Fixes #3317 Downloads list improvements (#3326) * Improve downloads sorting Reset scroll position after changing sorting * Fix sorting restoration --- .../vrbrowser/browser/SettingsStore.java | 2 +- .../ui/views/library/DownloadsView.java | 89 +++++++++++++------ .../library/SortingContextMenuWidget.java | 2 +- 3 files changed, 64 insertions(+), 29 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java b/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java index dc155e19b..de61fae3c 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/browser/SettingsStore.java @@ -101,7 +101,7 @@ SettingsStore getInstance(final @NonNull Context aContext) { public final static boolean BYPASS_CACHE_ON_RELOAD = false; public final static boolean MULTI_E10S = false; public final static int DOWNLOADS_STORAGE_DEFAULT = INTERNAL; - public final static int DOWNLOADS_SORTING_ORDER_DEFAULT = SortingContextMenuWidget.SORT_FILENAME_AZ; + public final static int DOWNLOADS_SORTING_ORDER_DEFAULT = SortingContextMenuWidget.SORT_DATE_ASC; // Enable telemetry by default (opt-out). public final static boolean CRASH_REPORTING_DEFAULT = false; diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/library/DownloadsView.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/library/DownloadsView.java index 5e06bb03c..6bb30446c 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/library/DownloadsView.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/library/DownloadsView.java @@ -82,7 +82,7 @@ protected void initialize() { ViewModelProvider.AndroidViewModelFactory.getInstance(((VRBrowserActivity) getContext()).getApplication())) .get(DownloadsViewModel.class); - mSortingComparator = mAZFileNameComparator; + mSortingComparator = getSorting(SettingsStore.getInstance(getContext()).getDownloadsSortingOrder()); updateUI(); } @@ -319,27 +319,9 @@ protected void showSortingContextMenu(@NonNull View view) { SortingContextMenuWidget menu = new SortingContextMenuWidget(getContext()); menu.setItemDelegate(item -> { - switch (item) { - case SortingContextMenuWidget.SORT_FILENAME_AZ: - mSortingComparator = mAZFileNameComparator; - break; - case SortingContextMenuWidget.SORT_FILENAME_ZA: - mSortingComparator = mZAFilenameComparator; - break; - case SortingContextMenuWidget.SORT_DATE_ASC: - mSortingComparator = mDownloadDateAscComparator; - break; - case SortingContextMenuWidget.SORT_DATE_DESC: - mSortingComparator = mDownloadDateDescComparator; - break; - case SortingContextMenuWidget.SORT_SIZE_ASC: - mSortingComparator = mDownloadSizeAscComparator; - break; - case SortingContextMenuWidget.SORT_SIZE_DESC: - mSortingComparator = mDownloadSizeDescComparator; - break; - } + mSortingComparator = getSorting(item); onDownloadsUpdate(mDownloadsManager.getDownloads()); + mBinding.downloadsList.scrollToPosition(0); }); menu.getPlacement().parentHandle = window.getHandle(); @@ -352,14 +334,67 @@ protected void showSortingContextMenu(@NonNull View view) { menu.show(UIWidget.REQUEST_FOCUS); } + private Comparator getSorting(@SortingContextMenuWidget.Order int order) { + switch (order) { + case SortingContextMenuWidget.SORT_FILENAME_AZ: + return mAZFileNameComparator; + case SortingContextMenuWidget.SORT_FILENAME_ZA: + return mZAFilenameComparator; + case SortingContextMenuWidget.SORT_DATE_ASC: + return mDownloadDateAscComparator; + case SortingContextMenuWidget.SORT_DATE_DESC: + return mDownloadDateDescComparator; + case SortingContextMenuWidget.SORT_SIZE_ASC: + return mDownloadSizeAscComparator; + case SortingContextMenuWidget.SORT_SIZE_DESC: + return mDownloadSizeDescComparator; + } + + return mDownloadIdComparator; + } + // DownloadsManager.DownloadsListener - private Comparator mAZFileNameComparator = (o1, o2) -> o1.getFilename().compareTo(o2.getFilename()); - private Comparator mZAFilenameComparator = (o1, o2) -> o2.getFilename().compareTo(o1.getFilename()); - private Comparator mDownloadDateAscComparator = (o1, o2) -> (int)(o1.getLastModified() - o2.getLastModified()); - private Comparator mDownloadDateDescComparator = (o1, o2) -> (int)(o2.getLastModified() - o1.getLastModified()); - private Comparator mDownloadSizeAscComparator = (o1, o2) -> (int)(o1.getSizeBytes() - o2.getSizeBytes()); - private Comparator mDownloadSizeDescComparator = (o1, o2) -> (int)(o2.getSizeBytes() - o1.getSizeBytes()); + private Comparator mDownloadIdComparator = (o1, o2) -> (int)(o1.getId() - o2.getId()); + + private Comparator mAZFileNameComparator = (o1, o2) -> { + int nameDiff = o1.getFilename().compareTo(o2.getFilename()); + if (nameDiff == 0) { + return mDownloadIdComparator.compare(o1, o2); + + } else { + return nameDiff; + } + }; + private Comparator mZAFilenameComparator = (o1, o2) -> { + int nameDiff = o2.getFilename().compareTo(o1.getFilename()); + if (nameDiff == 0) { + return mDownloadIdComparator.compare(o1, o2); + + } else { + return nameDiff; + } + }; + private Comparator mDownloadDateAscComparator = (o1, o2) -> mDownloadIdComparator.compare(o1, o2); + private Comparator mDownloadDateDescComparator = (o1, o2) -> mDownloadIdComparator.compare(o2, o1); + private Comparator mDownloadSizeAscComparator = (o1, o2) -> { + int sizeDiff = (int)(o1.getSizeBytes() - o2.getSizeBytes()); + if (sizeDiff == 0) { + return mDownloadIdComparator.compare(o1, o2); + + } else { + return sizeDiff; + } + }; + private Comparator mDownloadSizeDescComparator = (o1, o2) -> { + int sizeDiff = (int)(o2.getSizeBytes() - o1.getSizeBytes()); + if (sizeDiff == 0) { + return mDownloadIdComparator.compare(o1, o2); + + } else { + return sizeDiff; + } + }; @Override public void onDownloadsUpdate(@NonNull List downloads) { diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/menus/library/SortingContextMenuWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/menus/library/SortingContextMenuWidget.java index 9680fcf89..3a7b07665 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/menus/library/SortingContextMenuWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/menus/library/SortingContextMenuWidget.java @@ -15,7 +15,7 @@ public class SortingContextMenuWidget extends MenuWidget { - @IntDef(value = {SORT_FILENAME_AZ, SORT_FILENAME_ZA, SORT_DATE_ASC, SORT_DATE_DESC}) + @IntDef(value = {SORT_FILENAME_AZ, SORT_FILENAME_ZA, SORT_DATE_ASC, SORT_DATE_DESC, SORT_SIZE_ASC, SORT_SIZE_DESC}) public @interface Order {} public static final int SORT_FILENAME_AZ = 0; public static final int SORT_FILENAME_ZA = 1;