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 @@ ...@@ -544,6 +544,7 @@
<!-- Download manager dimensions --> <!-- Download manager dimensions -->
<dimen name="download_manager_ideal_image_width">150dp</dimen> <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_max_image_item_width_wide_screen">300dp</dimen>
<dimen name="download_manager_wide_screen_threshold">600dp</dimen> <dimen name="download_manager_wide_screen_threshold">600dp</dimen>
<dimen name="download_manager_image_padding">2dp</dimen> <dimen name="download_manager_image_padding">2dp</dimen>
......
...@@ -395,7 +395,7 @@ class DateOrderedListMediator { ...@@ -395,7 +395,7 @@ class DateOrderedListMediator {
DateOrderedListObserver dateOrderedListObserver) { DateOrderedListObserver dateOrderedListObserver) {
mOfflineItemFilter = offlineItemFilter; mOfflineItemFilter = offlineItemFilter;
mDateOrderedListObserver = dateOrderedListObserver; mDateOrderedListObserver = dateOrderedListObserver;
calculateEmptyState(); new Handler().post(() -> calculateEmptyState());
} }
@Override @Override
......
...@@ -6,8 +6,10 @@ package org.chromium.chrome.browser.download.home.list; ...@@ -6,8 +6,10 @@ package org.chromium.chrome.browser.download.home.list;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect; import android.graphics.Rect;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
...@@ -23,6 +25,8 @@ import org.chromium.chrome.browser.download.home.list.holder.ListItemViewHolder; ...@@ -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.ForwardingListObservable;
import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor; import org.chromium.chrome.browser.modelutil.PropertyModelChangeProcessor;
import org.chromium.chrome.browser.modelutil.RecyclerViewAdapter; 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 * The View component of a DateOrderedList. This takes the DateOrderedListModel and creates the
...@@ -40,6 +44,7 @@ class DateOrderedListView { ...@@ -40,6 +44,7 @@ class DateOrderedListView {
private final int mWideScreenThreshold; private final int mWideScreenThreshold;
private final RecyclerView mView; private final RecyclerView mView;
private final UiConfig mUiConfig;
/** Creates an instance of a {@link DateOrderedListView} representing {@code model}. */ /** Creates an instance of a {@link DateOrderedListView} representing {@code model}. */
public DateOrderedListView(Context context, DownloadManagerUiConfig config, public DateOrderedListView(Context context, DownloadManagerUiConfig config,
...@@ -66,6 +71,7 @@ class DateOrderedListView { ...@@ -66,6 +71,7 @@ class DateOrderedListView {
@Override @Override
protected void onConfigurationChanged(Configuration newConfig) { protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig); super.onConfigurationChanged(newConfig);
mUiConfig.updateDisplayStyle();
if (newConfig.orientation == mScreenOrientation) return; if (newConfig.orientation == mScreenOrientation) return;
mScreenOrientation = newConfig.orientation; mScreenOrientation = newConfig.orientation;
...@@ -92,6 +98,13 @@ class DateOrderedListView { ...@@ -92,6 +98,13 @@ class DateOrderedListView {
dateOrderedListObserver.onListScroll(mView.canScrollVertically(-1)); 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. */ /** @return The Android {@link View} representing this widget. */
...@@ -99,6 +112,24 @@ class DateOrderedListView { ...@@ -99,6 +112,24 @@ class DateOrderedListView {
return mView; 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 { private class GridLayoutManagerImpl extends GridLayoutManager {
/** Creates an instance of a {@link GridLayoutManagerImpl}. */ /** Creates an instance of a {@link GridLayoutManagerImpl}. */
public GridLayoutManagerImpl(Context context) { public GridLayoutManagerImpl(Context context) {
......
...@@ -5,11 +5,13 @@ ...@@ -5,11 +5,13 @@
package org.chromium.chrome.browser.download.home.toolbar; package org.chromium.chrome.browser.download.home.toolbar;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.download.home.list.ListItem; 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.browser.widget.selection.SelectableListToolbar;
import org.chromium.chrome.download.R; import org.chromium.chrome.download.R;
...@@ -19,6 +21,7 @@ import java.util.List; ...@@ -19,6 +21,7 @@ import java.util.List;
* Handles toolbar functionality for the download home. * Handles toolbar functionality for the download home.
*/ */
public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> { public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> {
private UiConfig mUiConfig;
private View mTitleBar; private View mTitleBar;
public DownloadHomeToolbar(Context context, AttributeSet attrs) { public DownloadHomeToolbar(Context context, AttributeSet attrs) {
...@@ -30,6 +33,16 @@ public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> { ...@@ -30,6 +33,16 @@ public class DownloadHomeToolbar extends SelectableListToolbar<ListItem> {
protected void onFinishInflate() { protected void onFinishInflate() {
super.onFinishInflate(); super.onFinishInflate();
mTitleBar = findViewById(R.id.title_bar); 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; ...@@ -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.download.home.metrics.UmaUtils;
import org.chromium.chrome.browser.widget.FadingShadow; import org.chromium.chrome.browser.widget.FadingShadow;
import org.chromium.chrome.browser.widget.FadingShadowView; 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.SelectableListToolbar;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate; import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver; import org.chromium.chrome.browser.widget.selection.SelectionDelegate.SelectionObserver;
...@@ -70,7 +69,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> { ...@@ -70,7 +69,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
private final ToolbarListActionDelegate mListActionDelegate; private final ToolbarListActionDelegate mListActionDelegate;
private final ToolbarActionDelegate mDelegate; private final ToolbarActionDelegate mDelegate;
private final UiConfig mUiConfig;
private final ViewGroup mView; private final ViewGroup mView;
private final DownloadHomeToolbar mToolbar; private final DownloadHomeToolbar mToolbar;
private final FadingShadowView mShadow; private final FadingShadowView mShadow;
...@@ -113,8 +111,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> { ...@@ -113,8 +111,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
mToolbar = mView.findViewById(R.id.toolbar); mToolbar = mView.findViewById(R.id.toolbar);
mShadow = mView.findViewById(R.id.shadow); mShadow = mView.findViewById(R.id.shadow);
mUiConfig = new UiConfig(mView);
mToolbar.initialize(selectionDelegate, 0 /* titleResId */, null /* drawerLayout */, mToolbar.initialize(selectionDelegate, 0 /* titleResId */, null /* drawerLayout */,
normalMenuGroupId, R.id.selection_mode_menu_group, R.color.modern_primary_color, normalMenuGroupId, R.id.selection_mode_menu_group, R.color.modern_primary_color,
hasCloseButton); hasCloseButton);
...@@ -124,7 +120,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> { ...@@ -124,7 +120,6 @@ public class ToolbarCoordinator implements SelectionObserver<ListItem> {
mToolbar.getMenu().setGroupVisible(normalMenuGroupId, true); mToolbar.getMenu().setGroupVisible(normalMenuGroupId, true);
mToolbar.initializeSearchView( mToolbar.initializeSearchView(
mSearchDelegate, R.string.download_manager_search, searchMenuId); mSearchDelegate, R.string.download_manager_search, searchMenuId);
mToolbar.configureWideDisplayStyle(mUiConfig);
if (isLocationEnabled) ToolbarUtils.setupTrackerForDownloadSettingsIPH(mToolbar); 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