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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogContentView.java

Issue 12942004: Add Glue as delegate to AutofillDialog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Static fix Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.autofill; 5 package org.chromium.chrome.browser.autofill;
6 6
7 import java.util.ArrayList; 7 import java.util.ArrayList;
8 import java.util.List; 8 import java.util.List;
9 9
10 import android.content.Context; 10 import android.content.Context;
11 import android.graphics.BitmapFactory;
12 import android.text.TextUtils; 11 import android.text.TextUtils;
13 import android.util.AttributeSet; 12 import android.util.AttributeSet;
14 import android.view.View; 13 import android.view.View;
15 import android.view.ViewGroup; 14 import android.view.ViewGroup;
16 import android.view.animation.Animation; 15 import android.view.animation.Animation;
17 import android.view.animation.AnimationSet; 16 import android.view.animation.AnimationSet;
18 import android.view.animation.ScaleAnimation; 17 import android.view.animation.ScaleAnimation;
19 import android.view.animation.TranslateAnimation; 18 import android.view.animation.TranslateAnimation;
20 import android.widget.AdapterView;
21 import android.widget.ArrayAdapter; 19 import android.widget.ArrayAdapter;
22 import android.widget.ImageView; 20 import android.widget.ImageView;
23 import android.widget.LinearLayout; 21 import android.widget.LinearLayout;
24 import android.widget.Spinner; 22 import android.widget.Spinner;
25 import android.widget.TextView; 23 import android.widget.TextView;
26 import android.widget.AdapterView.OnItemSelectedListener; 24 import android.widget.AdapterView.OnItemSelectedListener;
27 25
28 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.NUM_S ECTIONS; 26 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.NUM_S ECTIONS;
29 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_CC; 27 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_CC;
30 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_CC_BILLING; 28 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_CC_BILLING;
31 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_BILLING; 29 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_BILLING;
32 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_SHIPPING; 30 import static org.chromium.chrome.browser.autofill.AutofillDialogConstants.SECTI ON_SHIPPING;
33 31
34 import org.chromium.chrome.R; 32 import org.chromium.chrome.R;
35 33
36 /** 34 /**
37 * This is the parent layout that contains the layouts for different states of 35 * This is the parent layout that contains the layouts for different states of
38 * autofill dialog. In principle it shouldn't contain any logic related with the 36 * autofill dialog. In principle it shouldn't contain any logic related with the
39 * actual workflow, but rather respond to any UI update messages coming to it 37 * actual workflow, but rather respond to any UI update messages coming to it
40 * from the AutofillDialog. 38 * from the AutofillDialog.
41 */ 39 */
42 public class AutofillDialogContentView extends LinearLayout { 40 public class AutofillDialogContentView extends LinearLayout {
43 private static final int ANIMATION_DURATION_MS = 1000; 41 private static final int ANIMATION_DURATION_MS = 1000;
44 // TODO(yusufo): Remove all placeholders here and also in related layout xml files. 42 // TODO(yusufo): Remove all placeholders here and also in related layout xml files.
45 private final AutofillDialogMenuItem[][] mDefaultMenuItems =
46 new AutofillDialogMenuItem[NUM_SECTIONS][];
47 static final int INVALID_LAYOUT = -1; 43 static final int INVALID_LAYOUT = -1;
48 static final int LAYOUT_EDITING_SHIPPING = 0; 44 static final int LAYOUT_EDITING_SHIPPING = 0;
49 static final int LAYOUT_EDITING_CC = 1; 45 static final int LAYOUT_EDITING_CC = 1;
50 static final int LAYOUT_EDITING_BILLING = 2; 46 static final int LAYOUT_EDITING_BILLING = 2;
51 static final int LAYOUT_EDITING_CC_BILLING = 3; 47 static final int LAYOUT_EDITING_CC_BILLING = 3;
52 static final int LAYOUT_FETCHING = 4; 48 static final int LAYOUT_FETCHING = 4;
53 static final int LAYOUT_STEADY = 5; 49 static final int LAYOUT_STEADY = 5;
54 private final Runnable mDismissSteadyLayoutRunnable = new Runnable() { 50 private final Runnable mDismissSteadyLayoutRunnable = new Runnable() {
55 @Override 51 @Override
56 public void run() { 52 public void run() {
57 mSteadyLayout.setVisibility(GONE); 53 mSteadyLayout.setVisibility(GONE);
58 } 54 }
59 }; 55 };
60 private Spinner[] mSpinners = new Spinner[NUM_SECTIONS]; 56 private Spinner[] mSpinners = new Spinner[NUM_SECTIONS];
61 private AutofillDialogMenuAdapter[] mAdapters = new AutofillDialogMenuAdapte r[NUM_SECTIONS]; 57 private AutofillDialogMenuAdapter[] mAdapters = new AutofillDialogMenuAdapte r[NUM_SECTIONS];
62 private ViewGroup mSteadyLayout; 58 private ViewGroup mSteadyLayout;
63 private ViewGroup[] mEditLayouts = new ViewGroup[NUM_SECTIONS]; 59 private ViewGroup[] mEditLayouts = new ViewGroup[NUM_SECTIONS];
64 private int mCurrentLayout = -1; 60 private int mCurrentLayout = -1;
65 61
66 public AutofillDialogContentView(Context context, AttributeSet attrs) { 62 public AutofillDialogContentView(Context context, AttributeSet attrs) {
67 super(context, attrs); 63 super(context, attrs);
68 AutofillDialogMenuItem[] billingItems = {
69 new AutofillDialogMenuItem(0,
70 getResources().getString(R.string.autofill_new_billing)) ,
71 new AutofillDialogMenuItem(0,
72 getResources().getString(R.string.autofill_edit_billing) )
73 };
74 AutofillDialogMenuItem[] shippingItems = {
75 new AutofillDialogMenuItem(0,
76 getResources().getString(R.string.autofill_new_shipping) ),
77 new AutofillDialogMenuItem(0,
78 getResources().getString(R.string.autofill_edit_shipping ))
79 };
80
81 mDefaultMenuItems[SECTION_CC_BILLING] = billingItems;
82 mDefaultMenuItems[SECTION_SHIPPING] = shippingItems;
83 } 64 }
84 65
85 @Override 66 @Override
86 protected void onFinishInflate () { 67 protected void onFinishInflate () {
87 mSteadyLayout = (ViewGroup) findViewById(R.id.general_layout); 68 mSteadyLayout = (ViewGroup) findViewById(R.id.general_layout);
88 69
89 for (int i = 0; i < AutofillDialogConstants.NUM_SECTIONS; i++) { 70 for (int i = 0; i < AutofillDialogConstants.NUM_SECTIONS; i++) {
90 mEditLayouts[i] = (ViewGroup) findViewById( 71 mEditLayouts[i] = (ViewGroup) findViewById(
91 AutofillDialogUtils.getLayoutIDForSection(i)); 72 AutofillDialogUtils.getLayoutIDForSection(i));
92 int id = AutofillDialogUtils.getSpinnerIDForSection(i); 73 int id = AutofillDialogUtils.getSpinnerIDForSection(i);
93 mSpinners[i] = (Spinner) findViewById(id); 74 mSpinners[i] = (Spinner) findViewById(id);
94 AutofillDialogMenuAdapter adapter = new AutofillDialogMenuAdapter(ge tContext(), 75 AutofillDialogMenuAdapter adapter = new AutofillDialogMenuAdapter(ge tContext(),
95 new ArrayList<AutofillDialogMenuItem>()); 76 new ArrayList<AutofillDialogMenuItem>());
96 mAdapters[i] = adapter; 77 mAdapters[i] = adapter;
97 if (id == AutofillDialogUtils.INVALID_ID) continue; 78 if (id == AutofillDialogUtils.INVALID_ID) continue;
98 mSpinners[i].setAdapter(adapter); 79 mSpinners[i].setAdapter(adapter);
99 } 80 }
100 81
101 createAndAddPlaceHolders();
102 changeLayoutTo(LAYOUT_FETCHING); 82 changeLayoutTo(LAYOUT_FETCHING);
103 } 83 }
104 84
105 // TODO(yusufo): Remove this method once glue implements fetching data.
106 private void createAndAddPlaceHolders() {
107 AutofillDialogMenuItem[] ccItems = new AutofillDialogMenuItem[1];
108 ccItems[0] = new AutofillDialogMenuItem(
109 0, "XXXX-XXXX-XXXX-1000", "Additional info required",
110 BitmapFactory.decodeResource(getResources(), R.drawable. visa));
111 AutofillDialogMenuItem[] addressItems = new AutofillDialogMenuItem[1];
112 addressItems[0] = new AutofillDialogMenuItem(
113 0, "Place Holder", "1600 Amphitheatre Pkwy", null);
114 updateMenuItemsForSection(SECTION_CC_BILLING, ccItems);
115 updateMenuItemsForSection(SECTION_SHIPPING, addressItems);
116 }
117
118 @Override 85 @Override
119 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { 86 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
120 super.onMeasure(widthMeasureSpec, heightMeasureSpec); 87 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
121 Spinner ccSpinner = mSpinners[SECTION_CC_BILLING]; 88 Spinner ccSpinner = mSpinners[SECTION_CC_BILLING];
122 Spinner addressSpinner = mSpinners[SECTION_SHIPPING]; 89 Spinner addressSpinner = mSpinners[SECTION_SHIPPING];
123 ccSpinner.setDropDownWidth(ccSpinner.getMeasuredWidth()); 90 ccSpinner.setDropDownWidth(ccSpinner.getMeasuredWidth());
124 ccSpinner.setDropDownVerticalOffset(-ccSpinner.getMeasuredHeight()); 91 ccSpinner.setDropDownVerticalOffset(-ccSpinner.getMeasuredHeight());
125 addressSpinner.setDropDownWidth(addressSpinner.getMeasuredWidth()); 92 addressSpinner.setDropDownWidth(addressSpinner.getMeasuredWidth());
126 addressSpinner.setDropDownVerticalOffset(-addressSpinner.getMeasuredHeig ht()); 93 addressSpinner.setDropDownVerticalOffset(-addressSpinner.getMeasuredHeig ht());
127 } 94 }
128 95
129 /** 96 /**
130 * Set the listener for all the dropdown members in the layout. 97 * Set the listener for all the dropdown members in the layout.
131 * @param listener The listener object to attach to the dropdowns. 98 * @param listener The listener object to attach to the dropdowns.
132 */ 99 */
133 public void setOnItemSelectedListener(OnItemSelectedListener listener) { 100 public void setOnItemSelectedListener(OnItemSelectedListener listener) {
134 for (int i = 0; i < NUM_SECTIONS; i++) { 101 for (int i = 0; i < NUM_SECTIONS; i++) {
135 if (mSpinners[i] != null) mSpinners[i].setOnItemSelectedListener(lis tener); 102 if (mSpinners[i] != null) mSpinners[i].setOnItemSelectedListener(lis tener);
136 } 103 }
137 } 104 }
138 105
139 /** 106 /**
140 * @param spinner The dropdown that was selected by the user. 107 * @return Whether the current layout is one of the editing layouts.
141 * @param section The section that the dropdown corresponds to.
142 * @param position The position for the selected item in the dropdown.
143 * @return Whether the selection should cause a layout state change.
144 */ 108 */
145 public boolean selectionShouldChangeLayout(AdapterView<?> spinner, int secti on, int position) { 109 public boolean isInEditingMode() {
146 int numDefaultItems = mDefaultMenuItems[section] != null ? 110 return mCurrentLayout != INVALID_LAYOUT &&
147 mDefaultMenuItems[section].length : 0; 111 mCurrentLayout != LAYOUT_STEADY &&
148 return position >= spinner.getCount() - numDefaultItems; 112 mCurrentLayout != LAYOUT_FETCHING;
149 } 113 }
150 114
151 /** 115 /**
152 * @return The current layout the content is showing. 116 * @return The current section if we are in editing mode, INVALID_SECTION ot herwise.
153 */ 117 */
154 // TODO(yusufo): Consider restricting this access more to checks rather than the 118 public int getCurrentSection() {
155 // current value. 119 return getSectionForLayoutMode(mCurrentLayout);
156 public int getCurrentLayout() {
157 return mCurrentLayout;
158 } 120 }
159 121
160 /** 122 /**
161 * Updates a dropdown with the given items and adds default items to the end . 123 * Updates a dropdown with the given items and adds default items to the end .
162 * @param items The {@link AutofillDialogMenuItem} array to update the dropd own with. 124 * @param items The {@link AutofillDialogMenuItem} array to update the dropd own with.
163 */ 125 */
164 public void updateMenuItemsForSection(int section, AutofillDialogMenuItem[] items) { 126 public void updateMenuItemsForSection(int section, List<AutofillDialogMenuIt em> items) {
165 AutofillDialogMenuAdapter adapter = mAdapters[section]; 127 AutofillDialogMenuAdapter adapter = mAdapters[section];
166 adapter.clear(); 128 adapter.clear();
167 adapter.addAll(items); 129 adapter.addAll(items);
168 if (mDefaultMenuItems[section] != null) adapter.addAll(mDefaultMenuItems [section]);
169 } 130 }
170 131
171 /** 132 /**
172 * Transitions the layout shown to a given layout. 133 * Transitions the layout shown to a given layout.
173 * @param mode The layout mode to transition to. 134 * @param mode The layout mode to transition to.
174 */ 135 */
175 public void changeLayoutTo(int mode) { 136 public void changeLayoutTo(int mode) {
176 assert(mode != INVALID_LAYOUT); 137 assert(mode != INVALID_LAYOUT);
177 if (mode == mCurrentLayout || mode == INVALID_LAYOUT) return; 138 if (mode == mCurrentLayout || mode == INVALID_LAYOUT) return;
178 139
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 line2.setVisibility(VISIBLE); 304 line2.setVisibility(VISIBLE);
344 line2.setText(item.mLine2); 305 line2.setText(item.mLine2);
345 } else { 306 } else {
346 line2.setVisibility(GONE); 307 line2.setVisibility(GONE);
347 } 308 }
348 } 309 }
349 return convertView; 310 return convertView;
350 } 311 }
351 } 312 }
352 } 313 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698