blob: dda866471e84b51d716c796121b902269889e3a2 [file] [log] [blame]
// 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.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import org.chromium.chrome.browser.keyboard_accessory.R;
import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData;
import org.chromium.chrome.browser.keyboard_accessory.data.UserInfoField;
import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabModel.AccessorySheetDataPiece;
import org.chromium.chrome.browser.keyboard_accessory.sheet_tabs.AccessorySheetTabViewBinder.ElementViewHolder;
import org.chromium.ui.modelutil.ListModel;
import org.chromium.ui.widget.ChipView;
/**
* This stateless class provides methods to bind a {@link ListModel<AccessorySheetDataPiece>}
* to the {@link RecyclerView} used as view of a tab for the address accessory sheet component.
*/
class AddressAccessorySheetViewBinder {
static ElementViewHolder create(ViewGroup parent, @AccessorySheetDataPiece.Type int viewType) {
switch (viewType) {
case AccessorySheetDataPiece.Type.TITLE:
return new AccessorySheetTabViewBinder.TitleViewHolder(
parent, R.layout.keyboard_accessory_sheet_tab_title);
case AccessorySheetDataPiece.Type.ADDRESS_INFO:
return new AddressInfoViewHolder(parent);
case AccessorySheetDataPiece.Type.FOOTER_COMMAND:
return AccessorySheetTabViewBinder.create(parent, viewType);
}
assert false : "Unhandled type of data piece: " + viewType;
return null;
}
/**
* Holds a View representing a set of address data.
*/
static class AddressInfoViewHolder
extends ElementViewHolder<KeyboardAccessoryData.UserInfo, AddressAccessoryInfoView> {
AddressInfoViewHolder(ViewGroup parent) {
super(parent, R.layout.keyboard_accessory_sheet_tab_address_info);
}
@Override
protected void bind(KeyboardAccessoryData.UserInfo info, AddressAccessoryInfoView view) {
bindChipView(view.getNameFull(), info.getFields().get(0));
bindChipView(view.getCompanyName(), info.getFields().get(1));
bindChipView(view.getAddressHomeLine1(), info.getFields().get(2));
bindChipView(view.getAddressHomeLine2(), info.getFields().get(3));
bindChipView(view.getAddressHomeZip(), info.getFields().get(4));
bindChipView(view.getAddressHomeCity(), info.getFields().get(5));
bindChipView(view.getAddressHomeState(), info.getFields().get(6));
bindChipView(view.getAddressHomeCountry(), info.getFields().get(7));
bindChipView(view.getPhoneHomeWholeNumber(), info.getFields().get(8));
bindChipView(view.getEmailAddress(), info.getFields().get(9));
}
void bindChipView(ChipView chip, UserInfoField field) {
chip.getPrimaryTextView().setText(field.getDisplayText());
chip.getPrimaryTextView().setContentDescription(field.getA11yDescription());
if (!field.isSelectable() || field.getDisplayText().isEmpty()) {
chip.setVisibility(View.GONE);
return;
}
chip.setVisibility(View.VISIBLE);
chip.setOnClickListener(src -> field.triggerSelection());
chip.setClickable(true);
chip.setEnabled(true);
}
}
static void initializeView(RecyclerView view, AccessorySheetTabModel model) {
view.setAdapter(AddressAccessorySheetCoordinator.createAdapter(model));
view.addItemDecoration(new AddressAccessoryInfoView.DynamicBottomSpacer());
}
}