| Index: chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
|
| index 39e657a41b7531b10c6c96a79217c2f424006145..5b19a2252289438fc9cd63a9cd6b518d6820cc2d 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/selection/SelectableListLayout.java
|
| @@ -5,6 +5,8 @@
|
| package org.chromium.chrome.browser.widget.selection;
|
|
|
| import android.content.Context;
|
| +import android.content.res.Configuration;
|
| +import android.content.res.Resources;
|
| import android.graphics.drawable.Drawable;
|
| import android.support.v4.widget.DrawerLayout;
|
| import android.support.v7.widget.LinearLayoutManager;
|
| @@ -24,20 +26,24 @@ import org.chromium.chrome.R;
|
| import org.chromium.chrome.browser.widget.FadingShadow;
|
| import org.chromium.chrome.browser.widget.FadingShadowView;
|
| import org.chromium.chrome.browser.widget.LoadingView;
|
| +import org.chromium.chrome.browser.widget.displaystyle.DisplayStyleObserver;
|
| +import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
|
| import org.chromium.ui.base.DeviceFormFactor;
|
|
|
| import javax.annotation.Nullable;
|
|
|
| /**
|
| * Contains UI elements common to selectable list views: a loading view, empty view, selection
|
| - * toolbar, shadow, and recycler view.
|
| + * toolbar, shadow, and RecyclerView.
|
| *
|
| * After the SelectableListLayout is inflated, it should be initialized through calls to
|
| * #initializeRecyclerView(), #initializeToolbar(), and #initializeEmptyView().
|
| *
|
| * @param <E> The type of the selectable items this layout holds.
|
| */
|
| -public class SelectableListLayout<E> extends RelativeLayout {
|
| +public class SelectableListLayout<E> extends RelativeLayout implements DisplayStyleObserver {
|
| + private static final int WIDE_DISPLAY_MIN_PADDING_DP = 16;
|
| +
|
| private Adapter<RecyclerView.ViewHolder> mAdapter;
|
| private ViewStub mToolbarStub;
|
| private TextView mEmptyView;
|
| @@ -45,6 +51,8 @@ public class SelectableListLayout<E> extends RelativeLayout {
|
| private RecyclerView mRecyclerView;
|
| SelectableListToolbar<E> mToolbar;
|
|
|
| + private UiConfig mUiConfig;
|
| +
|
| private final AdapterDataObserver mAdapterObserver = new AdapterDataObserver() {
|
| @Override
|
| public void onChanged() {
|
| @@ -83,6 +91,13 @@ public class SelectableListLayout<E> extends RelativeLayout {
|
| setFocusableInTouchMode(true);
|
| }
|
|
|
| + @Override
|
| + protected void onConfigurationChanged(Configuration newConfig) {
|
| + super.onConfigurationChanged(newConfig);
|
| +
|
| + if (mUiConfig != null) mUiConfig.updateDisplayStyle();
|
| + }
|
| +
|
| /**
|
| * Initializes the RecyclerView.
|
| *
|
| @@ -170,4 +185,55 @@ public class SelectableListLayout<E> extends RelativeLayout {
|
| public void onDestroyed() {
|
| mAdapter.unregisterAdapterDataObserver(mAdapterObserver);
|
| }
|
| +
|
| + /**
|
| + * When this layout has a wide display style, it will be width constrained to
|
| + * {@link UiConfig#WIDE_DISPLAY_STYLE_MIN_WIDTH_DP}. If the current screen width is greater than
|
| + * UiConfig#WIDE_DISPLAY_STYLE_MIN_WIDTH_DP, the SelectableListLayout will be visually centered
|
| + * by adding padding to both sides.
|
| + *
|
| + * This method should be called after the toolbar and RecyclerView are initialized.
|
| + *
|
| + * @param wideDisplayToolbarLateralOffsetPx The offset to use for the toolbar's lateral padding
|
| + * when in {@link UiConfig#DISPLAY_STYLE_WIDE}.
|
| + */
|
| + public void setHasWideDisplayStyle(int wideDisplayToolbarLateralOffsetPx) {
|
| + mUiConfig = new UiConfig(this);
|
| + mToolbar.setHasWideDisplayStyle(wideDisplayToolbarLateralOffsetPx, mUiConfig);
|
| + mUiConfig.addObserver(this);
|
| + }
|
| +
|
| + /**
|
| + * @return The {@link UiConfig} associated with this View if one has been created, or null.
|
| + */
|
| + @Nullable
|
| + public UiConfig getUiConfig() {
|
| + return mUiConfig;
|
| + }
|
| +
|
| + @Override
|
| + public void onDisplayStyleChanged(int newDisplayStyle) {
|
| + int padding = getPaddingForDisplayStyle(newDisplayStyle, getResources());
|
| +
|
| + ApiCompatibilityUtils.setPaddingRelative(mRecyclerView,
|
| + padding, mRecyclerView.getPaddingTop(),
|
| + padding, mRecyclerView.getPaddingBottom());
|
| + }
|
| +
|
| + /**
|
| + * @param displayStyle See UiConfig.DisplayStyle.
|
| + * @param resources The {@link Resources} used to retrieve configuration and display metrics.
|
| + * @return The lateral padding to use for the current display style.
|
| + */
|
| + public static int getPaddingForDisplayStyle(int displayStyle, Resources resources) {
|
| + int padding = 0;
|
| + if (displayStyle == UiConfig.DISPLAY_STYLE_WIDE) {
|
| + int screenWidthDp = resources.getConfiguration().screenWidthDp;
|
| + float dpToPx = resources.getDisplayMetrics().density;
|
| + padding = (int) (((screenWidthDp - UiConfig.WIDE_DISPLAY_STYLE_MIN_WIDTH_DP) / 2.f)
|
| + * dpToPx);
|
| + padding = (int) Math.max(WIDE_DISPLAY_MIN_PADDING_DP * dpToPx, padding);
|
| + }
|
| + return padding;
|
| + }
|
| }
|
|
|