OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 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.payments; | |
6 | |
7 import android.content.Context; | |
8 import android.telephony.PhoneNumberUtils; | |
9 import android.util.Patterns; | |
10 | |
11 import org.chromium.base.Callback; | |
12 import org.chromium.chrome.R; | |
13 import org.chromium.chrome.browser.autofill.PersonalDataManager; | |
14 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile; | |
15 import org.chromium.chrome.browser.payments.ui.EditorFieldModel; | |
16 import org.chromium.chrome.browser.payments.ui.EditorFieldModel.EditorFieldValid ator; | |
17 import org.chromium.chrome.browser.payments.ui.EditorModel; | |
18 import org.chromium.chrome.browser.payments.ui.EditorView; | |
19 | |
20 import java.util.ArrayList; | |
21 import java.util.List; | |
22 | |
23 import javax.annotation.Nullable; | |
24 | |
25 /** | |
26 * Contact information editor. | |
27 */ | |
28 public class ContactEditor { | |
29 private final boolean mRequestPayerPhone; | |
30 private final boolean mRequestPayerEmail; | |
31 private final List<CharSequence> mAllPhoneNumbers; | |
gone
2016/06/27 21:20:52
Weird to call this mAllPhoneNumbers/mAllEmailAddre
please use gerrit instead
2016/06/27 22:26:28
Renamed.
| |
32 private final List<CharSequence> mAllEmailAddresses; | |
33 @Nullable private EditorView mEditorView; | |
34 @Nullable private Context mContext; | |
35 @Nullable private EditorFieldValidator mPhoneValidator; | |
36 @Nullable private EditorFieldValidator mEmailValidator; | |
37 | |
38 /** | |
39 * Builds a contact information editor. | |
40 * | |
41 * @param requestPayerPhone Whether to request the user's phone number. | |
42 * @param requestPayerEmail Whether to request the user's email address. | |
43 */ | |
44 public ContactEditor(boolean requestPayerPhone, boolean requestPayerEmail) { | |
45 assert requestPayerPhone || requestPayerEmail; | |
46 mRequestPayerPhone = requestPayerPhone; | |
47 mRequestPayerEmail = requestPayerEmail; | |
48 mAllPhoneNumbers = new ArrayList<>(); | |
49 mAllEmailAddresses = new ArrayList<>(); | |
50 } | |
51 | |
52 /** | |
53 * Returns whether the following contact information can be sent to the merc hant as-is without | |
54 * editing first. | |
55 * | |
56 * @param phone The phone number to check. | |
57 * @param email The email address to check. | |
58 * @return Whether the contact information is complete. | |
59 */ | |
60 public boolean isContactInformationComplete(@Nullable String phone, @Nullabl e String email) { | |
61 return (!mRequestPayerPhone || getPhoneValidator().isValid(phone)) | |
62 && (!mRequestPayerEmail || getEmailValidator().isValid(email)); | |
63 } | |
64 | |
65 /** | |
66 * Sets the user interface to be used for editing contact information. | |
67 * | |
68 * @param editorView The user interface to be used. | |
69 */ | |
70 public void setEditorView(EditorView editorView) { | |
71 assert editorView != null; | |
72 mEditorView = editorView; | |
73 mContext = mEditorView.getContext(); | |
74 } | |
75 | |
76 /** | |
77 * Adds the given phone number to the autocomplete list, if it's valid. | |
78 * | |
79 * @param phoneNumber The phone number to possibly add. | |
80 */ | |
81 public void addPhoneNumberIfValid(@Nullable CharSequence phoneNumber) { | |
82 if (getPhoneValidator().isValid(phoneNumber)) mAllPhoneNumbers.add(phone Number); | |
83 } | |
84 | |
85 /** | |
86 * Adds the given email address to the autocomplete list, if it's valid. | |
87 * | |
88 * @param emailAddress The email address to possibly add. | |
89 */ | |
90 public void addEmailAddressIfValid(@Nullable CharSequence emailAddress) { | |
91 if (getEmailValidator().isValid(emailAddress)) mAllEmailAddresses.add(em ailAddress); | |
92 } | |
93 | |
94 /** | |
95 * Shows the user interface for editing the given contact. The contact is al so updated on disk, | |
96 * so there's no need to do that in the calling code. | |
97 * | |
98 * @param toEdit The contact to edit. Can be null if the user is adding a new contact instead | |
99 * of editing an existing one. | |
100 * @param callback The callback to invoke with the complete and valid contac t information. Can | |
101 * be invoked with null if the user clicked Cancel. | |
102 */ | |
103 public void editContact( | |
104 @Nullable AutofillContact toEdit, final Callback<AutofillContact> ca llback) { | |
105 assert mEditorView != null; | |
106 assert mContext != null; | |
107 | |
108 final AutofillContact contact = toEdit == null | |
109 ? new AutofillContact(new AutofillProfile(), null, null, false) : toEdit; | |
110 | |
111 final EditorFieldModel phoneField = mRequestPayerPhone | |
112 ? new EditorFieldModel(EditorFieldModel.INPUT_TYPE_HINT_PHONE, | |
113 mContext.getString(R.string.autofill_profile_editor_ph one_number), | |
114 mAllPhoneNumbers, getPhoneValidator(), | |
115 mContext.getString(R.string.payments_phone_required_va lidation_message), | |
116 mContext.getString(R.string.payments_phone_invalid_val idation_message), | |
117 contact.getPayerPhone()) | |
118 : null; | |
119 | |
120 final EditorFieldModel emailField = mRequestPayerEmail | |
121 ? new EditorFieldModel(EditorFieldModel.INPUT_TYPE_HINT_EMAIL, | |
122 mContext.getString(R.string.autofill_profile_editor_em ail_address), | |
123 mAllEmailAddresses, getEmailValidator(), | |
124 mContext.getString(R.string.payments_email_required_va lidation_message), | |
125 mContext.getString(R.string.payments_email_invalid_val idation_message), | |
126 contact.getPayerEmail()) | |
127 : null; | |
128 | |
129 EditorModel editor = | |
130 new EditorModel(mContext.getString(R.string.payments_add_contact _details_label)); | |
131 if (phoneField != null) editor.addField(phoneField); | |
132 if (emailField != null) editor.addField(emailField); | |
133 | |
134 editor.setCancelCallback(new Runnable() { | |
135 @Override | |
136 public void run() { | |
137 callback.onResult(null); | |
138 } | |
139 }); | |
140 | |
141 editor.setDoneCallback(new Runnable() { | |
142 @Override | |
143 public void run() { | |
144 String phone = null; | |
145 String email = null; | |
146 | |
147 if (phoneField != null) { | |
148 phone = phoneField.getValue().toString(); | |
149 contact.getProfile().setPhoneNumber(phone); | |
150 } | |
151 | |
152 if (emailField != null) { | |
153 email = emailField.getValue().toString(); | |
154 contact.getProfile().setEmailAddress(email); | |
155 } | |
156 | |
157 PersonalDataManager.getInstance().setProfile(contact.getProfile( )); | |
158 contact.completeContact(phone, email); | |
159 callback.onResult(contact); | |
160 } | |
161 }); | |
162 | |
163 mEditorView.show(editor); | |
164 } | |
165 | |
166 private EditorFieldValidator getPhoneValidator() { | |
167 if (mPhoneValidator == null) { | |
168 mPhoneValidator = new EditorFieldValidator() { | |
169 @Override | |
170 public boolean isValid(@Nullable CharSequence value) { | |
171 return value != null | |
172 && PhoneNumberUtils.isGlobalPhoneNumber( | |
173 PhoneNumberUtils.stripSeparators(value.to String())); | |
174 } | |
175 }; | |
176 } | |
177 return mPhoneValidator; | |
178 } | |
179 | |
180 private EditorFieldValidator getEmailValidator() { | |
181 if (mEmailValidator == null) { | |
182 mEmailValidator = new EditorFieldValidator() { | |
183 @Override | |
184 public boolean isValid(@Nullable CharSequence value) { | |
185 return value != null && Patterns.EMAIL_ADDRESS.matcher(value ).matches(); | |
186 } | |
187 }; | |
188 } | |
189 return mEmailValidator; | |
190 } | |
191 } | |
OLD | NEW |