Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/widget/RadioButtonLayout.java

Issue 2850063002: ❄ Split off RadioButtonLayout from InfoBarControls (Closed)
Patch Set: Fix again Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser.widget;
6
7 import android.content.Context;
8 import android.support.annotation.Nullable;
9 import android.util.AttributeSet;
10 import android.view.LayoutInflater;
11 import android.view.View;
12 import android.widget.RadioButton;
13 import android.widget.RadioGroup;
14
15 import org.chromium.chrome.R;
16
17 import java.util.List;
18
19 /**
20 * Manages a group of exclusive RadioButtons, automatically inserting a margin i n between the rows
21 * to prevent them from squishing together.
22 *
23 * -------------------------------------------------
24 * | O | MESSAGE #1 |
25 * | O | MESSAGE #N |
26 * -------------------------------------------------
27 */
28 public final class RadioButtonLayout extends RadioGroup {
29 public static final int INVALID_INDEX = -1;
30
31 private final int mMarginBetweenRows;
32
33 public RadioButtonLayout(Context context) {
34 this(context, null);
35 }
36
37 public RadioButtonLayout(Context context, AttributeSet attrs) {
38 super(context, attrs);
39 mMarginBetweenRows = context.getResources().getDimensionPixelSize(
40 R.dimen.infobar_control_margin_between_rows);
41 }
42
43 /**
44 * Adds a set of standard radio buttons for the given messages and adds them to the layout.
45 *
46 * @param messages Messages to display for the options.
47 * @param tags Optional list of tags to attach to the buttons.
48 */
49 public void addOptions(List<CharSequence> messages, @Nullable List<?> tags) {
50 if (tags != null) assert tags.size() == messages.size();
51
52 for (int i = 0; i < messages.size(); i++) {
53 RadioButton button = (RadioButton) LayoutInflater.from(getContext())
54 .inflate(R.layout.radio_button_layout_e lement, null);
55 button.setText(messages.get(i));
56 if (tags != null) button.setTag(tags.get(i));
57
58 addView(button, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutPa rams.WRAP_CONTENT));
59 }
60
61 updateMargins();
62 }
63
64 /**
65 * Marks a RadioButton child as being checked.
66 *
67 * Android doesn't provide a way of generating View IDs on the fly before AP I level 17, so this
68 * function requires passing in the child's index. Passing in {@link #INVAL ID_INDEX} marks them
69 * all as de-selected.
70 *
71 * @param childIndex Index of the child to select.
72 */
73 public void selectChildAtIndex(int childIndex) {
74 int childCount = getChildCount();
75 for (int i = 0; i < childCount; i++) {
76 RadioButton child = (RadioButton) getChildAt(i);
77 child.setChecked(i == childIndex);
78 }
79 }
80
81 /** Sets margins between each of the radio buttons. */
82 private void updateMargins() {
83 int childCount = getChildCount();
84 for (int i = 0; i < childCount; i++) {
85 View child = getChildAt(i);
86 int margin = (i < childCount - 1) ? mMarginBetweenRows : 0;
87 ((MarginLayoutParams) child.getLayoutParams()).bottomMargin = margin ;
88 }
89 }
90 }
OLDNEW
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/widget/PromoDialogLayout.java ('k') | chrome/android/java_sources.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698