Commit d21b6c90 authored by Friedrich Horschig's avatar Friedrich Horschig Committed by Commit Bot

[Mfill Android] Deduplicate Bottom spacer and move into separate class

The spacing around the footer hasn't been consistent across all sheets.
This CL generalizes the class that was introduced by two of the three
sheets and uses this spacing class in all of them.

To fully fix the footer spacing, overscroll is now extended from 8dip
to 64dip as shown in the mocks in the linked bug.

Bug: 997611
Change-Id: I33f813b174a887f496413240efeebdaea3844426
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1768466Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Commit-Queue: Friedrich [CET] <fhorschig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#690344}
parent 99bf5708
......@@ -65,6 +65,7 @@ android_library("internal_java") {
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessoryInfoView.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetCoordinator.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/CreditCardAccessorySheetViewBinder.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/DynamicInfoViewBottomSpacer.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessoryInfoView.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetCoordinator.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/sheet_tabs/PasswordAccessorySheetModernViewBinder.java",
......
......@@ -10,4 +10,4 @@
android:layout_height="match_parent"
android:layout_width="match_parent"
android:clipToPadding="false"
android:paddingBottom="8dp"/>
android:paddingBottom="@dimen/keyboard_accessory_sheet_footer_trailing_margin"/>
......@@ -10,4 +10,4 @@
android:layout_height="match_parent"
android:layout_width="match_parent"
android:clipToPadding="false"
android:paddingBottom="8dp"/>
android:paddingBottom="@dimen/keyboard_accessory_sheet_footer_trailing_margin"/>
......@@ -10,4 +10,4 @@
android:layout_height="match_parent"
android:layout_width="match_parent"
android:clipToPadding="false"
android:paddingBottom="8dp"/>
android:paddingBottom="@dimen/keyboard_accessory_sheet_footer_trailing_margin"/>
......@@ -15,6 +15,7 @@
<dimen name="keyboard_accessory_chip_vertical_margin">8dp</dimen>
<!--dimen name="keyboard_accessory_sheet_height">330dp</dimen-->
<dimen name="keyboard_accessory_sheet_divider_margin">24dp</dimen>
<dimen name="keyboard_accessory_sheet_footer_trailing_margin">64dp</dimen>
<dimen name="keyboard_accessory_sheet_padding">8dp</dimen>
<dimen name="keyboard_accessory_sheet_top_margin">16dp</dimen>
<dimen name="keyboard_accessory_sheet_bottom_margin">8dp</dimen>
......
......@@ -5,10 +5,7 @@
package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
import android.content.Context;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import org.chromium.chrome.browser.keyboard_accessory.R;
......@@ -29,26 +26,6 @@ class AddressAccessoryInfoView extends LinearLayout {
private ChipView mPhoneHomeWholeNumber;
private ChipView mEmailAddress;
/**
* This decoration adds a space between the last AddressAccessoryInfoView and the first
* non-AddressAccessoryInfoView. This allows to define a margin below the whole list of
* AddressAccessoryInfoViews without having to wrap them in a new layout. This would reduce
* the reusability of single info containers in a RecyclerView.
*/
public static class DynamicBottomSpacer extends RecyclerView.ItemDecoration {
@Override
public void getItemOffsets(
Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (view instanceof AddressAccessoryInfoView) return;
int previous = parent.indexOfChild(view) - 1;
if (previous < 0) return;
if (!(parent.getChildAt(previous) instanceof AddressAccessoryInfoView)) return;
outRect.top = view.getContext().getResources().getDimensionPixelSize(
R.dimen.keyboard_accessory_suggestion_padding);
}
}
/**
* Constructor for inflating from XML.
*/
......
......@@ -74,6 +74,6 @@ class AddressAccessorySheetViewBinder {
static void initializeView(RecyclerView view, AccessorySheetTabModel model) {
view.setAdapter(AddressAccessorySheetCoordinator.createAdapter(model));
view.addItemDecoration(new AddressAccessoryInfoView.DynamicBottomSpacer());
view.addItemDecoration(new DynamicInfoViewBottomSpacer(AddressAccessoryInfoView.class));
}
}
......@@ -103,5 +103,6 @@ class CreditCardAccessorySheetViewBinder {
new SimpleRecyclerViewMcp<>(model, AccessorySheetDataPiece::getType,
AccessorySheetTabViewBinder.ElementViewHolder::bind),
CreditCardAccessorySheetViewBinder::create));
view.addItemDecoration(new DynamicInfoViewBottomSpacer(CreditCardAccessoryInfoView.class));
}
}
// Copyright 2019 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.keyboard_accessory.sheet_tabs;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import org.chromium.chrome.browser.keyboard_accessory.R;
/**
* This decoration adds a space between the last info view and the first non-info view. This allows
* to define a margin below the whole list of info views without having to wrap them in a new
* layout. This would reduce the reusability of single info containers in a RecyclerView.
*/
class DynamicInfoViewBottomSpacer extends RecyclerView.ItemDecoration {
private final Class mInfoViewClass;
DynamicInfoViewBottomSpacer(Class infoViewClass) {
mInfoViewClass = infoViewClass;
}
@Override
public void getItemOffsets(
Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (isUserInfoView(view)) return;
int previous = parent.indexOfChild(view) - 1;
if (previous < 0) return;
if (!isUserInfoView(parent.getChildAt(previous))) return;
outRect.top = view.getContext().getResources().getDimensionPixelSize(
R.dimen.keyboard_accessory_suggestion_padding);
}
private boolean isUserInfoView(View view) {
return view.getClass().isAssignableFrom(mInfoViewClass);
}
}
......@@ -6,14 +6,11 @@ package org.chromium.chrome.browser.keyboard_accessory.sheet_tabs;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.support.v7.content.res.AppCompatResources;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
......@@ -30,26 +27,6 @@ class PasswordAccessoryInfoView extends LinearLayout {
private ChipView mUsername;
private ChipView mPassword;
/**
* This decoration adds a space between the last PasswordAccessoryInfoView and the first
* non-PasswordAccessoryInfoView. This allows to define a margin below the whole list of
* PasswordAccessoryInfoViews without having to wrap them in a new layout. This would reduce
* the reusability of single info containers in a RecyclerView.
*/
public static class DynamicBottomSpacer extends RecyclerView.ItemDecoration {
@Override
public void getItemOffsets(
Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (view instanceof PasswordAccessoryInfoView) return;
int previous = parent.indexOfChild(view) - 1;
if (previous < 0) return;
if (!(parent.getChildAt(previous) instanceof PasswordAccessoryInfoView)) return;
outRect.top = view.getContext().getResources().getDimensionPixelSize(
R.dimen.keyboard_accessory_suggestion_padding);
}
}
/**
* Constructor for inflating from XML.
*/
......
......@@ -75,6 +75,6 @@ class PasswordAccessorySheetModernViewBinder {
static void initializeView(RecyclerView view, AccessorySheetTabModel model) {
view.setAdapter(PasswordAccessorySheetCoordinator.createModernAdapter(model));
view.addItemDecoration(new PasswordAccessoryInfoView.DynamicBottomSpacer());
view.addItemDecoration(new DynamicInfoViewBottomSpacer(PasswordAccessoryInfoView.class));
}
}
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