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

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

Issue 14018004: [Android] Refactor NativeView to be able to use it for AutofillDialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 android.content.Context; 7 import android.content.Context;
8 import android.content.res.Configuration; 8 import android.content.res.Configuration;
9 import android.graphics.Paint; 9 import android.graphics.Paint;
10 import android.graphics.Point; 10 import android.graphics.Point;
11 import android.graphics.Rect; 11 import android.graphics.Rect;
12 import android.graphics.drawable.Drawable; 12 import android.graphics.drawable.Drawable;
13 import android.view.LayoutInflater; 13 import android.view.LayoutInflater;
14 import android.view.View; 14 import android.view.View;
15 import android.view.WindowManager; 15 import android.view.WindowManager;
16 import android.widget.AdapterView; 16 import android.widget.AdapterView;
17 import android.widget.FrameLayout; 17 import android.widget.FrameLayout;
18 import android.widget.ListPopupWindow; 18 import android.widget.ListPopupWindow;
19 import android.widget.TextView; 19 import android.widget.TextView;
20 20
21 import java.util.ArrayList; 21 import java.util.ArrayList;
22 22
23 import org.chromium.chrome.R; 23 import org.chromium.chrome.R;
24 import org.chromium.content.browser.ContainerViewDelegate;
25 import org.chromium.ui.gfx.DeviceDisplayInfo; 24 import org.chromium.ui.gfx.DeviceDisplayInfo;
25 import org.chromium.ui.ViewAndroidDelegate;
26 import org.chromium.ui.WindowAndroid; 26 import org.chromium.ui.WindowAndroid;
27 27
28 /** 28 /**
29 * The Autofill suggestion popup that lists relevant suggestions. 29 * The Autofill suggestion popup that lists relevant suggestions.
30 */ 30 */
31 public class AutofillPopup extends ListPopupWindow implements AdapterView.OnItem ClickListener { 31 public class AutofillPopup extends ListPopupWindow implements AdapterView.OnItem ClickListener {
32 32
33 /** 33 /**
34 * Constants defining types of Autofill suggestion entries. 34 * Constants defining types of Autofill suggestion entries.
35 * Has to be kept in sync with enum in WebAutofillClient.h 35 * Has to be kept in sync with enum in WebAutofillClient.h
36 * 36 *
37 * Not supported: MenuItemIDWarningMessage, MenuItemIDSeparator, MenuItemIDC learForm, and 37 * Not supported: MenuItemIDWarningMessage, MenuItemIDSeparator, MenuItemIDC learForm, and
38 * MenuItemIDAutofillOptions. 38 * MenuItemIDAutofillOptions.
39 */ 39 */
40 private static final int ITEM_ID_AUTOCOMPLETE_ENTRY = 0; 40 private static final int ITEM_ID_AUTOCOMPLETE_ENTRY = 0;
41 private static final int ITEM_ID_PASSWORD_ENTRY = -2; 41 private static final int ITEM_ID_PASSWORD_ENTRY = -2;
42 private static final int ITEM_ID_DATA_LIST_ENTRY = -6; 42 private static final int ITEM_ID_DATA_LIST_ENTRY = -6;
43 43
44 private static final int TEXT_PADDING_DP = 30; 44 private static final int TEXT_PADDING_DP = 30;
45 45
46 private final AutofillPopupDelegate mAutofillCallback; 46 private final AutofillPopupDelegate mAutofillCallback;
47 private final Context mContext; 47 private final Context mContext;
48 private final ContainerViewDelegate mContainerViewDelegate; 48 private final ViewAndroidDelegate mViewAndroidDelegate;
49 private AnchorView mAnchorView; 49 private AnchorView mAnchorView;
50 private Rect mAnchorRect; 50 private Rect mAnchorRect;
51 private Paint mNameViewPaint; 51 private Paint mNameViewPaint;
52 private Paint mLabelViewPaint; 52 private Paint mLabelViewPaint;
53 53
54 /** 54 /**
55 * An interface to handle the touch interaction with an AutofillPopup object . 55 * An interface to handle the touch interaction with an AutofillPopup object .
56 */ 56 */
57 public interface AutofillPopupDelegate { 57 public interface AutofillPopupDelegate {
58 /** 58 /**
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(width, he ight); 116 FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(width, he ight);
117 lp.leftMargin = r.left - paddingRect.left; 117 lp.leftMargin = r.left - paddingRect.left;
118 lp.topMargin = r.top; 118 lp.topMargin = r.top;
119 setLayoutParams(lp); 119 setLayoutParams(lp);
120 } 120 }
121 } 121 }
122 122
123 /** 123 /**
124 * Creates an AutofillWindow with specified parameters. 124 * Creates an AutofillWindow with specified parameters.
125 * @param context Application context. 125 * @param context Application context.
126 * @param containerViewDelegate View delegate used to add and remove views. 126 * @param viewAndroidDelegate View delegate used to add and remove views.
127 * @param autofillCallback A object that handles the calls to the native Aut ofillPopupView. 127 * @param autofillCallback A object that handles the calls to the native Aut ofillPopupView.
128 */ 128 */
129 public AutofillPopup(Context context, ContainerViewDelegate containerViewDel egate, 129 public AutofillPopup(Context context, ViewAndroidDelegate viewAndroidDelegat e,
130 AutofillPopupDelegate autofillCallback) { 130 AutofillPopupDelegate autofillCallback) {
131 super(context); 131 super(context);
132 mContext = context; 132 mContext = context;
133 mContainerViewDelegate = containerViewDelegate; 133 mViewAndroidDelegate = viewAndroidDelegate ;
134 mAutofillCallback = autofillCallback; 134 mAutofillCallback = autofillCallback;
135 135
136 setOnItemClickListener(this); 136 setOnItemClickListener(this);
137 137
138 mAnchorView = new AnchorView(context, this); 138 mAnchorView = new AnchorView(context, this);
139 mContainerViewDelegate.addViewToContainerView(mAnchorView); 139 mViewAndroidDelegate.addViewToContainerView(mAnchorView);
140 setAnchorView(mAnchorView); 140 setAnchorView(mAnchorView);
141 } 141 }
142 142
143 /** 143 /**
144 * Sets the location and the size of the anchor view that the AutofillPopup will use to attach 144 * Sets the location and the size of the anchor view that the AutofillPopup will use to attach
145 * itself. 145 * itself.
146 * @param x X coordinate of the top left corner of the anchor view. 146 * @param x X coordinate of the top left corner of the anchor view.
147 * @param y Y coordinate of the top left corner of the anchor view. 147 * @param y Y coordinate of the top left corner of the anchor view.
148 * @param width The width of the anchor view. 148 * @param width The width of the anchor view.
149 * @param height The height of the anchor view. 149 * @param height The height of the anchor view.
150 */ 150 */
151 public void setAnchorRect(float x, float y, float width, float height) { 151 public void setAnchorRect(float x, float y, float width, float height) {
152 float scale = (float) DeviceDisplayInfo.create(mContext).getDIPScale(); 152 float scale = (float) DeviceDisplayInfo.create(mContext).getDIPScale();
153 mAnchorRect = new Rect(Math.round(x * scale), Math.round(y * scale), 153 mAnchorRect = new Rect(Math.round(x * scale), Math.round(y * scale),
154 Math.round((x + width) * scale), Math.round((y + height) * scale )); 154 Math.round((x + width) * scale), Math.round((y + height) * scale ));
155 mAnchorRect.offset(0, mContainerViewDelegate.getChildViewOffsetYPix()); 155 mAnchorRect.offset(0, mViewAndroidDelegate.getChildViewOffsetYPix());
156 } 156 }
157 157
158 /** 158 /**
159 * Sets the Autofill suggestions to display in the popup and shows the popup . 159 * Sets the Autofill suggestions to display in the popup and shows the popup .
160 * @param suggestions Autofill suggestion data. 160 * @param suggestions Autofill suggestion data.
161 */ 161 */
162 public void show(AutofillSuggestion[] suggestions) { 162 public void show(AutofillSuggestion[] suggestions) {
163 // Remove the AutofillSuggestions with IDs that are not supported by And roid 163 // Remove the AutofillSuggestions with IDs that are not supported by And roid
164 ArrayList<AutofillSuggestion> cleanedData = new ArrayList<AutofillSugges tion>(); 164 ArrayList<AutofillSuggestion> cleanedData = new ArrayList<AutofillSugges tion>();
165 for (int i = 0; i < suggestions.length; i++) { 165 for (int i = 0; i < suggestions.length; i++) {
(...skipping 15 matching lines...) Expand all
181 @Override 181 @Override
182 public void dismiss() { 182 public void dismiss() {
183 mAutofillCallback.requestHide(); 183 mAutofillCallback.requestHide();
184 } 184 }
185 185
186 /** 186 /**
187 * Hides the popup and removes the anchor view from the ContainerView. 187 * Hides the popup and removes the anchor view from the ContainerView.
188 */ 188 */
189 public void hide() { 189 public void hide() {
190 super.dismiss(); 190 super.dismiss();
191 mContainerViewDelegate.removeViewFromContainerView(mAnchorView); 191 mViewAndroidDelegate.removeViewFromContainerView(mAnchorView);
192 } 192 }
193 193
194 /** 194 /**
195 * Get desired popup window width by calculating the maximum text length fro m Autofill data. 195 * Get desired popup window width by calculating the maximum text length fro m Autofill data.
196 * @param data Autofill suggestion data. 196 * @param data Autofill suggestion data.
197 * @return The popup window width. 197 * @return The popup window width.
198 */ 198 */
199 private int getDesiredWidth(AutofillSuggestion[] data) { 199 private int getDesiredWidth(AutofillSuggestion[] data) {
200 if (mNameViewPaint == null || mLabelViewPaint == null) { 200 if (mNameViewPaint == null || mLabelViewPaint == null) {
201 LayoutInflater inflater = 201 LayoutInflater inflater =
(...skipping 24 matching lines...) Expand all
226 return maxTextWidth + (int) (TEXT_PADDING_DP * 226 return maxTextWidth + (int) (TEXT_PADDING_DP *
227 mContext.getResources().getDisplayMetrics().density); 227 mContext.getResources().getDisplayMetrics().density);
228 } 228 }
229 229
230 @Override 230 @Override
231 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 231 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
232 mAutofillCallback.suggestionSelected(position); 232 mAutofillCallback.suggestionSelected(position);
233 } 233 }
234 234
235 } 235 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698