Commit af0ca97a authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Download Home : Fixed toolbar bugs on orientation change

Fixed several bugs :
1 - On orientation change, toolbar needs to readjust its contents.
2 - Search menu item visibility needs to be correctly initialized
    based on the contents.
3 - The downloads area (recycler view and toolbar) will be limited
    to 600dp on wide screen.

Bug: 899139
Change-Id: I5eaad5c68d6ff4d268ac0c7da4489a591f8bf29f
Reviewed-on: https://chromium-review.googlesource.com/c/1303401Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604838}
parent 0d663e86
......@@ -544,6 +544,7 @@
<!-- Download manager dimensions -->
<dimen name="download_manager_ideal_image_width">150dp</dimen>
<dimen name="download_manager_recycler_view_min_padding_wide_screen">16dp</dimen>
<dimen name="download_manager_max_image_item_width_wide_screen">300dp</dimen>
<dimen name="download_manager_wide_screen_threshold">600dp</dimen>
<dimen name="download_manager_image_padding">2dp</dimen>
......
......@@ -395,7 +395,7 @@ class DateOrderedListMediator {
DateOrderedListObserver dateOrderedListObserver) {
mOfflineItemFilter = offlineItemFilter;
mDateOrderedListObserver = dateOrderedListObserver;
calculateEmptyState();
new Handler().post(() -> calculateEmptyState());
}
@Override
......
......@@ -6,8 +6,10 @@ package org.chromium.chrome.browser.download.home.list;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
......@@ -23,6 +25,8 @@ import org.chromium.chrome.browser.download.home.list.holder.ListItemViewHolder;
import org.chromium.chrome.browser.modelutil.ForwardingListObservable;
import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor;
import org.chromium.chrome.browser.modelutil.RecyclerViewAdapter;
import org.chromium.chrome.browser.widget.displaystyle.HorizontalDisplayStyle;
import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
/**
* The View component of a DateOrderedList. This takes the DateOrderedListModel and creates the
......@@ -40,6 +44,7 @@ class DateOrderedListView {
private final int mWideScreenThreshold;
private final RecyclerView mView;
private final UiConfig mUiConfig;
/** Creates an instance of a {@link DateOrderedListView} representing {@code model}. */
public DateOrderedListView(Context context, DownloadManagerUiConfig config,
......@@ -66,6 +71,7 @@ class DateOrderedListView {
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mUiConfig.updateDisplayStyle();
if (newConfig.orientation == mScreenOrientation) return;
mScreenOrientation = newConfig.orientation;
......@@ -92,6 +98,13 @@ class DateOrderedListView {
dateOrderedListObserver.onListScroll(mView.canScrollVertically(-1));
}
});
mUiConfig = new UiConfig(mView);
mUiConfig.addObserver((newDisplayStyle) -> {
int padding = getPaddingForDisplayStyle(newDisplayStyle, context.getResources());
ViewCompat.setPaddingRelative(
mView, padding, mView.getPaddingTop(), padding, mView.getPaddingBottom());
});
}
/** @return The Android {@link View} representing this widget. */
......@@ -99,6 +112,24 @@ class DateOrderedListView {
return mView;
}
/**
* @return The start and end padding of the recycler view for the given display style.
*/
private static int getPaddingForDisplayStyle(
UiConfig.DisplayStyle displayStyle, Resources resources) {
int padding = 0;
if (displayStyle.horizontal == HorizontalDisplayStyle.WIDE) {
int screenWidthDp = resources.getConfiguration().screenWidthDp;
padding = (int) (((screenWidthDp - UiConfig.WIDE_DISPLAY_STYLE_MIN_WIDTH_DP) / 2.f)
* resources.getDisplayMetrics().density);
padding = (int) Math.max(
resources.getDimensionPixelSize(
R.dimen.download_manager_recycler_view_min_padding_wide_screen),
padding);
}
return padding;
}
private class GridLayoutManagerImpl extends GridLayoutManager {
/** Creates an instance of a {@link GridLayoutManagerImpl}. */
public GridLayoutManagerImpl(Context context) {
......
......@@ -5,11 +5,13 @@
package org.chromium.chrome.browser.download.home.toolbar;
import android.content.Context;
import android.content.res.Configuration;
import android.util.AttributeSet;
import android.view.View;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.download.home.list.ListItem;
import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
import org.chromium.chrome.browser.widget.selection.SelectableListToolbar;
import org.chromium.chrome.download.R;
......@@ -19,6 +21,7 @@ import java.util.List;
* Handles toolbar functionality for the download home.
*/
public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> {
private UiConfig mUiConfig;
private View mTitleBar;
public DownloadHomeToolbar(Context context, AttributeSet attrs) {
......@@ -30,6 +33,16 @@ public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> {
protected void onFinishInflate() {
super.onFinishInflate();
mTitleBar = findViewById(R.id.title_bar);
post(() -> {
mUiConfig = new UiConfig(this);
configureWideDisplayStyle(mUiConfig);
});
}
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (mUiConfig != null) mUiConfig.updateDisplayStyle();
}
/**
......
......@@ -16,7 +16,6 @@ import org.chromium.chrome.browser.download.home.list.ListItem;
import org.chromium.chrome.browser.download.home.metrics.UmaUtils;
import org.chromium.chrome.browser.widget.FadingShadow;
import org.chromium.chrome.browser.widget.FadingShadowView;
import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
import org.chromium.chrome.browser.widget.selection.SelectableListToolbar;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver;
......@@ -70,7 +69,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
private final ToolbarListActionDelegate mListActionDelegate;
private final ToolbarActionDelegate mDelegate;
private final UiConfig mUiConfig;
private final ViewGroup mView;
private final DownloadHomeToolbar mToolbar;
private final FadingShadowView mShadow;
......@@ -113,8 +111,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
mToolbar = mView.findViewById(R.id.toolbar);
mShadow = mView.findViewById(R.id.shadow);
mUiConfig = new UiConfig(mView);
mToolbar.initialize(selectionDelegate, 0 /* titleResId */, null /* drawerLayout */,
normalMenuGroupId, R.id.selection_mode_menu_group, R.color.modern_primary_color,
hasCloseButton);
......@@ -124,7 +120,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
mToolbar.getMenu().setGroupVisible(normalMenuGroupId, true);
mToolbar.initializeSearchView(
mSearchDelegate, R.string.download_manager_search, searchMenuId);
mToolbar.configureWideDisplayStyle(mUiConfig);
if (isLocationEnabled) ToolbarUtils.setupTrackerForDownloadSettingsIPH(mToolbar);
......
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