Commit 64e736bc authored by David Trainor's avatar David Trainor Committed by Commit Bot

Remove separators in new Downloads Home v2

Remove date and filter type separators from the new downloads home UI.

BUG=893918

Change-Id: Ie52e136d056c6b89f34830de90d4f3701535fa59
Reviewed-on: https://chromium-review.googlesource.com/c/1277967
Commit-Queue: David Trainor <dtrainor@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#599791}
parent aa055e65
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<View
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/HorizontalDivider"
android:minHeight="2dp" />
\ No newline at end of file
...@@ -9,11 +9,16 @@ ...@@ -9,11 +9,16 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<View
android:id="@+id/divider"
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/HorizontalDivider" />
<Space <Space
android:id="@+id/top_space" android:id="@+id/top_space"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/download_manager_section_title_padding_top" /> android:layout_height="@dimen/download_manager_section_title_padding_top"
android:layout_below="@+id/divider" />
<TextView <TextView
android:id="@+id/date" android:id="@+id/date"
......
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
style="@style/HorizontalDivider"
android:layout_marginStart="16dp" />
</FrameLayout>
\ No newline at end of file
...@@ -12,7 +12,6 @@ import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterObserve ...@@ -12,7 +12,6 @@ import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterObserve
import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterSource; import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterSource;
import org.chromium.chrome.browser.download.home.list.ListItem.OfflineItemListItem; import org.chromium.chrome.browser.download.home.list.ListItem.OfflineItemListItem;
import org.chromium.chrome.browser.download.home.list.ListItem.SectionHeaderListItem; import org.chromium.chrome.browser.download.home.list.ListItem.SectionHeaderListItem;
import org.chromium.chrome.browser.download.home.list.ListItem.SeparatorViewListItem;
import org.chromium.components.offline_items_collection.ContentId; import org.chromium.components.offline_items_collection.ContentId;
import org.chromium.components.offline_items_collection.OfflineItem; import org.chromium.components.offline_items_collection.OfflineItem;
import org.chromium.components.offline_items_collection.OfflineItemFilter; import org.chromium.components.offline_items_collection.OfflineItemFilter;
...@@ -148,9 +147,8 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -148,9 +147,8 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
} }
// Flattens out the hierarchical data and adds items to the model in the order they should be // Flattens out the hierarchical data and adds items to the model in the order they should be
// displayed. Date header, section header, date separator and section separators are added // displayed. Date headers and section headers are added wherever necessary. The existing items
// wherever necessary. The existing items in the model are replaced by the new set of items // in the model are replaced by the new set of items computed.
// computed.
private void pushItemsToModel() { private void pushItemsToModel() {
List<ListItem> listItems = new ArrayList<>(); List<ListItem> listItems = new ArrayList<>();
int dateIndex = 0; int dateIndex = 0;
...@@ -164,8 +162,10 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -164,8 +162,10 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
// Add a section header. // Add a section header.
if (!mHideAllHeaders) { if (!mHideAllHeaders) {
SectionHeaderListItem sectionHeaderItem = new SectionHeaderListItem( SectionHeaderListItem sectionHeaderItem = new SectionHeaderListItem(filter,
filter, date.getTime(), sectionIndex == 0, date.equals(JUST_NOW_DATE)); date.getTime(), sectionIndex == 0 /* showDate */,
date.equals(JUST_NOW_DATE) /* isJustNow */,
sectionIndex == 0 && dateIndex > 0 /* showDivider */);
sectionHeaderItem.showTitle = !mHideSectionHeaders; sectionHeaderItem.showTitle = !mHideSectionHeaders;
sectionHeaderItem.showMenu = filter == OfflineItemFilter.FILTER_IMAGE; sectionHeaderItem.showMenu = filter == OfflineItemFilter.FILTER_IMAGE;
sectionHeaderItem.items = new ArrayList<>(section.items.values()); sectionHeaderItem.items = new ArrayList<>(section.items.values());
...@@ -182,17 +182,9 @@ class DateOrderedListMutator implements OfflineItemFilterObserver { ...@@ -182,17 +182,9 @@ class DateOrderedListMutator implements OfflineItemFilterObserver {
listItems.add(item); listItems.add(item);
} }
// Add a section separator if needed.
if (!mHideAllHeaders && sectionIndex < dateGroup.sections.size() - 1) {
listItems.add(new SeparatorViewListItem(date.getTime(), filter));
}
sectionIndex++; sectionIndex++;
} }
// Add a date separator if needed.
if (!mHideAllHeaders && dateIndex < mDateGroups.size() - 1) {
listItems.add(new SeparatorViewListItem(date.getTime()));
}
dateIndex++; dateIndex++;
} }
......
...@@ -79,20 +79,22 @@ public abstract class ListItem { ...@@ -79,20 +79,22 @@ public abstract class ListItem {
public boolean showTitle; public boolean showTitle;
public boolean showMenu; public boolean showMenu;
public boolean isJustNow; public boolean isJustNow;
public boolean showDivider;
public List<OfflineItem> items; public List<OfflineItem> items;
/** /**
* Creates a {@link SectionHeaderListItem} instance for a given {@code filter} and * Creates a {@link SectionHeaderListItem} instance for a given {@code filter} and
* {@code timestamp}. * {@code timestamp}.
*/ */
public SectionHeaderListItem( public SectionHeaderListItem(int filter, long timestamp, boolean showDate,
int filter, long timestamp, boolean showDate, boolean isJustNow) { boolean isJustNow, boolean showDivider) {
super(isJustNow && showDate ? StableIds.JUST_NOW_SECTION super(isJustNow && showDate ? StableIds.JUST_NOW_SECTION
: generateStableId(timestamp, filter), : generateStableId(timestamp, filter),
new Date(timestamp)); new Date(timestamp));
this.filter = filter; this.filter = filter;
this.showDate = showDate; this.showDate = showDate;
this.isJustNow = isJustNow; this.isJustNow = isJustNow;
this.showDivider = showDivider;
} }
@VisibleForTesting @VisibleForTesting
...@@ -102,44 +104,6 @@ public abstract class ListItem { ...@@ -102,44 +104,6 @@ public abstract class ListItem {
} }
} }
/** A {@link ListItem} representing a divider that separates sections and dates. */
public static class SeparatorViewListItem extends DateListItem {
private final boolean mIsDateDivider;
/**
* Creates a separator to be shown at the end of a given date.
* @param timestamp The date corresponding to this group of downloads.
*/
public SeparatorViewListItem(long timestamp) {
super(generateStableId(timestamp), new Date(timestamp));
mIsDateDivider = true;
}
/**
* Creates a separator to be shown at the end of a section for a given section on a given
* date.
* @param timestamp The date corresponding to the section.
* @param filter The type of downloads contained in this section.
*/
public SeparatorViewListItem(long timestamp, int filter) {
super(generateStableId(timestamp, filter), new Date(timestamp));
mIsDateDivider = false;
}
/** Whether this view represents a date divider. */
public boolean isDateDivider() {
return mIsDateDivider;
}
private static long generateStableId(long timestamp) {
return ((long) (new Date(timestamp).hashCode())) + DATE_SEPARATOR_HASH_CODE_OFFSET;
}
private static long generateStableId(long timestamp, int filter) {
return generateStableId(timestamp) + filter + SECTION_SEPARATOR_HASH_CODE_OFFSET;
}
}
/** A {@link ListItem} that involves a {@link OfflineItem}. */ /** A {@link ListItem} that involves a {@link OfflineItem}. */
public static class OfflineItemListItem extends DateListItem { public static class OfflineItemListItem extends DateListItem {
public OfflineItem item; public OfflineItem item;
......
...@@ -26,8 +26,7 @@ public class ListUtils { ...@@ -26,8 +26,7 @@ public class ListUtils {
/** The potential types of list items that could be displayed. */ /** The potential types of list items that could be displayed. */
@IntDef({ViewType.DATE, ViewType.IN_PROGRESS, ViewType.GENERIC, ViewType.VIDEO, ViewType.IMAGE, @IntDef({ViewType.DATE, ViewType.IN_PROGRESS, ViewType.GENERIC, ViewType.VIDEO, ViewType.IMAGE,
ViewType.CUSTOM_VIEW, ViewType.PREFETCH, ViewType.SECTION_HEADER, ViewType.CUSTOM_VIEW, ViewType.PREFETCH, ViewType.SECTION_HEADER,
ViewType.SEPARATOR_DATE, ViewType.SEPARATOR_SECTION, ViewType.IN_PROGRESS_VIDEO, ViewType.IN_PROGRESS_VIDEO, ViewType.IN_PROGRESS_IMAGE})
ViewType.IN_PROGRESS_IMAGE})
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface ViewType { public @interface ViewType {
int DATE = 0; int DATE = 0;
...@@ -38,10 +37,8 @@ public class ListUtils { ...@@ -38,10 +37,8 @@ public class ListUtils {
int CUSTOM_VIEW = 5; int CUSTOM_VIEW = 5;
int PREFETCH = 6; int PREFETCH = 6;
int SECTION_HEADER = 7; int SECTION_HEADER = 7;
int SEPARATOR_DATE = 8; int IN_PROGRESS_VIDEO = 8;
int SEPARATOR_SECTION = 9; int IN_PROGRESS_IMAGE = 9;
int IN_PROGRESS_VIDEO = 10;
int IN_PROGRESS_IMAGE = 11;
} }
/** Converts a given list of {@link ListItem}s to a list of {@link OfflineItem}s. */ /** Converts a given list of {@link ListItem}s to a list of {@link OfflineItem}s. */
...@@ -66,10 +63,6 @@ public class ListUtils { ...@@ -66,10 +63,6 @@ public class ListUtils {
public static @ViewType int getViewTypeForItem(ListItem item, DownloadManagerUiConfig config) { public static @ViewType int getViewTypeForItem(ListItem item, DownloadManagerUiConfig config) {
if (item instanceof ViewListItem) return ViewType.CUSTOM_VIEW; if (item instanceof ViewListItem) return ViewType.CUSTOM_VIEW;
if (item instanceof ListItem.SectionHeaderListItem) return ViewType.SECTION_HEADER; if (item instanceof ListItem.SectionHeaderListItem) return ViewType.SECTION_HEADER;
if (item instanceof ListItem.SeparatorViewListItem) {
ListItem.SeparatorViewListItem separator = (ListItem.SeparatorViewListItem) item;
return separator.isDateDivider() ? ViewType.SEPARATOR_DATE : ViewType.SEPARATOR_SECTION;
}
if (item instanceof OfflineItemListItem) { if (item instanceof OfflineItemListItem) {
OfflineItemListItem offlineItem = (OfflineItemListItem) item; OfflineItemListItem offlineItem = (OfflineItemListItem) item;
......
...@@ -43,10 +43,6 @@ public abstract class ListItemViewHolder extends ViewHolder { ...@@ -43,10 +43,6 @@ public abstract class ListItemViewHolder extends ViewHolder {
return PrefetchViewHolder.create(parent); return PrefetchViewHolder.create(parent);
case ListUtils.ViewType.SECTION_HEADER: case ListUtils.ViewType.SECTION_HEADER:
return SectionTitleViewHolder.create(parent); return SectionTitleViewHolder.create(parent);
case ListUtils.ViewType.SEPARATOR_DATE:
return SeparatorViewHolder.create(parent, true);
case ListUtils.ViewType.SEPARATOR_SECTION:
return SeparatorViewHolder.create(parent, false);
case ListUtils.ViewType.IN_PROGRESS_VIDEO: case ListUtils.ViewType.IN_PROGRESS_VIDEO:
return InProgressVideoViewHolder.create(parent); return InProgressVideoViewHolder.create(parent);
case ListUtils.ViewType.IN_PROGRESS_IMAGE: case ListUtils.ViewType.IN_PROGRESS_IMAGE:
......
...@@ -30,6 +30,7 @@ import java.util.List; ...@@ -30,6 +30,7 @@ import java.util.List;
* A {@link ViewHolder} specifically meant to display a section header. * A {@link ViewHolder} specifically meant to display a section header.
*/ */
public class SectionTitleViewHolder extends ListItemViewHolder implements ListMenuButton.Delegate { public class SectionTitleViewHolder extends ListItemViewHolder implements ListMenuButton.Delegate {
private final View mDivider;
private final TextView mDate; private final TextView mDate;
private final TextView mTitle; private final TextView mTitle;
private final ListMenuButton mMore; private final ListMenuButton mMore;
...@@ -54,6 +55,7 @@ public class SectionTitleViewHolder extends ListItemViewHolder implements ListMe ...@@ -54,6 +55,7 @@ public class SectionTitleViewHolder extends ListItemViewHolder implements ListMe
private SectionTitleViewHolder(View view) { private SectionTitleViewHolder(View view) {
super(view); super(view);
mDivider = view.findViewById(R.id.divider);
mDate = (TextView) view.findViewById(R.id.date); mDate = (TextView) view.findViewById(R.id.date);
mTitle = (TextView) view.findViewById(R.id.title); mTitle = (TextView) view.findViewById(R.id.title);
mMore = (ListMenuButton) view.findViewById(R.id.more); mMore = (ListMenuButton) view.findViewById(R.id.more);
...@@ -75,6 +77,7 @@ public class SectionTitleViewHolder extends ListItemViewHolder implements ListMe ...@@ -75,6 +77,7 @@ public class SectionTitleViewHolder extends ListItemViewHolder implements ListMe
} }
updateTopBottomSpacing(sectionItem.showMenu); updateTopBottomSpacing(sectionItem.showMenu);
mDivider.setVisibility(sectionItem.showDivider ? ViewGroup.VISIBLE : ViewGroup.GONE);
mDate.setVisibility(sectionItem.showDate ? View.VISIBLE : View.GONE); mDate.setVisibility(sectionItem.showDate ? View.VISIBLE : View.GONE);
mTitle.setVisibility((sectionItem.showTitle ? View.VISIBLE : View.GONE)); mTitle.setVisibility((sectionItem.showTitle ? View.VISIBLE : View.GONE));
if (mMore != null) mMore.setVisibility(sectionItem.showMenu ? View.VISIBLE : View.GONE); if (mMore != null) mMore.setVisibility(sectionItem.showMenu ? View.VISIBLE : View.GONE);
......
// 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.chrome.browser.download.home.list.holder;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import org.chromium.chrome.browser.download.home.list.ListItem;
import org.chromium.chrome.browser.modelutil.PropertyModel;
import org.chromium.chrome.download.R;
/**
* A {@link ViewHolder} specifically meant to display a separator.
*/
public class SeparatorViewHolder extends ListItemViewHolder {
/**
* Creates a new {@link SeparatorViewHolder} instance.
* @param isDateDivider Whether the divider is between dates or individual sections.
*/
public static SeparatorViewHolder create(ViewGroup parent, boolean isDateDivider) {
View dividerView =
LayoutInflater.from(parent.getContext())
.inflate(isDateDivider ? R.layout.download_manager_date_separator
: R.layout.download_manager_section_separator,
null);
return new SeparatorViewHolder(dividerView);
}
private SeparatorViewHolder(View view) {
super(view);
}
// ListItemViewHolder implementation.
@Override
public void bind(PropertyModel properties, ListItem item) {}
}
...@@ -531,7 +531,6 @@ chrome_java_sources = [ ...@@ -531,7 +531,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java", "java/src/org/chromium/chrome/browser/download/home/list/holder/OfflineItemViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/list/holder/PrefetchViewHolder.java", "java/src/org/chromium/chrome/browser/download/home/list/holder/PrefetchViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/list/holder/SectionTitleViewHolder.java", "java/src/org/chromium/chrome/browser/download/home/list/holder/SectionTitleViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/list/holder/SeparatorViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/list/holder/VideoViewHolder.java", "java/src/org/chromium/chrome/browser/download/home/list/holder/VideoViewHolder.java",
"java/src/org/chromium/chrome/browser/download/home/list/view/AspectRatioFrameLayout.java", "java/src/org/chromium/chrome/browser/download/home/list/view/AspectRatioFrameLayout.java",
"java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java", "java/src/org/chromium/chrome/browser/download/home/list/view/AsyncImageView.java",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment