| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 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.payments; | 5 package org.chromium.chrome.browser.payments; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
| 9 import android.os.Handler; | 9 import android.os.Handler; |
| 10 import android.text.TextUtils; | 10 import android.text.TextUtils; |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 recordAbortReasonHistogram( | 264 recordAbortReasonHistogram( |
| 265 PaymentRequestMetrics.ABORT_REASON_INVALID_DATA_FROM_RENDERE
R); | 265 PaymentRequestMetrics.ABORT_REASON_INVALID_DATA_FROM_RENDERE
R); |
| 266 return; | 266 return; |
| 267 } | 267 } |
| 268 | 268 |
| 269 if (!parseAndValidateDetailsOrDisconnectFromClient(details)) return; | 269 if (!parseAndValidateDetailsOrDisconnectFromClient(details)) return; |
| 270 | 270 |
| 271 getMatchingPaymentInstruments(); | 271 getMatchingPaymentInstruments(); |
| 272 | 272 |
| 273 boolean requestShipping = options != null && options.requestShipping; | 273 boolean requestShipping = options != null && options.requestShipping; |
| 274 boolean requestPayerName = options != null && options.requestPayerName; |
| 274 boolean requestPayerPhone = options != null && options.requestPayerPhone
; | 275 boolean requestPayerPhone = options != null && options.requestPayerPhone
; |
| 275 boolean requestPayerEmail = options != null && options.requestPayerEmail
; | 276 boolean requestPayerEmail = options != null && options.requestPayerEmail
; |
| 276 | 277 |
| 277 List<AutofillProfile> profiles = null; | 278 List<AutofillProfile> profiles = null; |
| 278 if (requestShipping || requestPayerPhone || requestPayerEmail) { | 279 if (requestShipping || requestPayerName || requestPayerPhone || requestP
ayerEmail) { |
| 279 profiles = PersonalDataManager.getInstance().getProfilesToSuggest( | 280 profiles = PersonalDataManager.getInstance().getProfilesToSuggest( |
| 280 false /* includeNameInLabel */); | 281 false /* includeNameInLabel */); |
| 281 } | 282 } |
| 282 | 283 |
| 283 if (requestShipping) { | 284 if (requestShipping) { |
| 284 List<AutofillAddress> addresses = new ArrayList<>(); | 285 List<AutofillAddress> addresses = new ArrayList<>(); |
| 285 | 286 |
| 286 for (int i = 0; i < profiles.size(); i++) { | 287 for (int i = 0; i < profiles.size(); i++) { |
| 287 AutofillProfile profile = profiles.get(i); | 288 AutofillProfile profile = profiles.get(i); |
| 288 mAddressEditor.addPhoneNumberIfValid(profile.getPhoneNumber()); | 289 mAddressEditor.addPhoneNumberIfValid(profile.getPhoneNumber()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 317 if (mUiShippingOptions.getSelectedItem() != null && !addresses.isEmp
ty() | 318 if (mUiShippingOptions.getSelectedItem() != null && !addresses.isEmp
ty() |
| 318 && addresses.get(0).isComplete()) { | 319 && addresses.get(0).isComplete()) { |
| 319 firstCompleteAddressIndex = 0; | 320 firstCompleteAddressIndex = 0; |
| 320 } | 321 } |
| 321 | 322 |
| 322 mShippingAddressesSection = | 323 mShippingAddressesSection = |
| 323 new SectionInformation(PaymentRequestUI.TYPE_SHIPPING_ADDRES
SES, | 324 new SectionInformation(PaymentRequestUI.TYPE_SHIPPING_ADDRES
SES, |
| 324 firstCompleteAddressIndex, addresses); | 325 firstCompleteAddressIndex, addresses); |
| 325 } | 326 } |
| 326 | 327 |
| 327 if (requestPayerPhone || requestPayerEmail) { | 328 if (requestPayerName || requestPayerPhone || requestPayerEmail) { |
| 328 Set<String> uniqueContactInfos = new HashSet<>(); | 329 Set<String> uniqueContactInfos = new HashSet<>(); |
| 329 mContactEditor = new ContactEditor(requestPayerPhone, requestPayerEm
ail); | 330 mContactEditor = new ContactEditor( |
| 331 requestPayerName, requestPayerPhone, requestPayerEmail); |
| 330 List<AutofillContact> contacts = new ArrayList<>(); | 332 List<AutofillContact> contacts = new ArrayList<>(); |
| 331 | 333 |
| 332 for (int i = 0; i < profiles.size(); i++) { | 334 for (int i = 0; i < profiles.size(); i++) { |
| 333 AutofillProfile profile = profiles.get(i); | 335 AutofillProfile profile = profiles.get(i); |
| 336 String name = requestPayerName && !TextUtils.isEmpty(profile.get
FullName()) |
| 337 ? profile.getFullName() : null; |
| 334 String phone = requestPayerPhone && !TextUtils.isEmpty(profile.g
etPhoneNumber()) | 338 String phone = requestPayerPhone && !TextUtils.isEmpty(profile.g
etPhoneNumber()) |
| 335 ? profile.getPhoneNumber() : null; | 339 ? profile.getPhoneNumber() : null; |
| 336 String email = requestPayerEmail && !TextUtils.isEmpty(profile.g
etEmailAddress()) | 340 String email = requestPayerEmail && !TextUtils.isEmpty(profile.g
etEmailAddress()) |
| 337 ? profile.getEmailAddress() : null; | 341 ? profile.getEmailAddress() : null; |
| 342 mContactEditor.addPayerNameIfValid(name); |
| 338 mContactEditor.addPhoneNumberIfValid(phone); | 343 mContactEditor.addPhoneNumberIfValid(phone); |
| 339 mContactEditor.addEmailAddressIfValid(email); | 344 mContactEditor.addEmailAddressIfValid(email); |
| 340 | 345 |
| 341 if (phone != null || email != null) { | 346 if (name != null || phone != null || email != null) { |
| 342 // Different profiles can have identical contact info. Do no
t add the same | 347 // Different profiles can have identical contact info. Do no
t add the same |
| 343 // contact info to the list twice. | 348 // contact info to the list twice. |
| 344 String uniqueContactInfo = phone + email; | 349 String uniqueContactInfo = name + phone + email; |
| 345 if (!uniqueContactInfos.contains(uniqueContactInfo)) { | 350 if (!uniqueContactInfos.contains(uniqueContactInfo)) { |
| 346 uniqueContactInfos.add(uniqueContactInfo); | 351 uniqueContactInfos.add(uniqueContactInfo); |
| 347 | 352 |
| 348 boolean isComplete = | 353 boolean isComplete = |
| 349 mContactEditor.isContactInformationComplete(phon
e, email); | 354 mContactEditor.isContactInformationComplete(name
, phone, email); |
| 350 contacts.add(new AutofillContact(profile, phone, email,
isComplete)); | 355 contacts.add(new AutofillContact(profile, name, phone, e
mail, isComplete)); |
| 351 } | 356 } |
| 352 } | 357 } |
| 353 } | 358 } |
| 354 | 359 |
| 355 // Suggest complete contact infos first. | 360 // Suggest complete contact infos first. |
| 356 Collections.sort(contacts, COMPLETENESS_COMPARATOR); | 361 Collections.sort(contacts, COMPLETENESS_COMPARATOR); |
| 357 | 362 |
| 358 // Limit the number of suggestions. | 363 // Limit the number of suggestions. |
| 359 contacts = contacts.subList(0, Math.min(contacts.size(), SUGGESTIONS
_LIMIT)); | 364 contacts = contacts.subList(0, Math.min(contacts.size(), SUGGESTIONS
_LIMIT)); |
| 360 | 365 |
| 361 // Log the number of suggested contact infos. | 366 // Log the number of suggested contact infos. |
| 362 mJourneyLogger.setNumberOfSuggestionsShown( | 367 mJourneyLogger.setNumberOfSuggestionsShown( |
| 363 PaymentRequestJourneyLogger.SECTION_CONTACT_INFO, contacts.s
ize()); | 368 PaymentRequestJourneyLogger.SECTION_CONTACT_INFO, contacts.s
ize()); |
| 364 | 369 |
| 365 // Automatically select the first address if it is complete. | 370 // Automatically select the first address if it is complete. |
| 366 int firstCompleteContactIndex = SectionInformation.NO_SELECTION; | 371 int firstCompleteContactIndex = SectionInformation.NO_SELECTION; |
| 367 if (!contacts.isEmpty() && contacts.get(0).isComplete()) { | 372 if (!contacts.isEmpty() && contacts.get(0).isComplete()) { |
| 368 firstCompleteContactIndex = 0; | 373 firstCompleteContactIndex = 0; |
| 369 } | 374 } |
| 370 | 375 |
| 371 mContactSection = new SectionInformation( | 376 mContactSection = new SectionInformation( |
| 372 PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactI
ndex, contacts); | 377 PaymentRequestUI.TYPE_CONTACT_DETAILS, firstCompleteContactI
ndex, contacts); |
| 373 } | 378 } |
| 374 | 379 |
| 375 mUI = new PaymentRequestUI(mContext, this, requestShipping, | 380 mUI = new PaymentRequestUI(mContext, this, requestShipping, |
| 376 requestPayerPhone || requestPayerEmail, mMerchantSupportsAutofil
lPaymentInstruments, | 381 requestPayerName || requestPayerPhone || requestPayerEmail, |
| 377 mMerchantName, mOrigin); | 382 mMerchantSupportsAutofillPaymentInstruments, mMerchantName, mOri
gin); |
| 378 | 383 |
| 379 if (mFavicon != null) mUI.setTitleBitmap(mFavicon); | 384 if (mFavicon != null) mUI.setTitleBitmap(mFavicon); |
| 380 mFavicon = null; | 385 mFavicon = null; |
| 381 | 386 |
| 382 mAddressEditor.setEditorView(mUI.getEditorView()); | 387 mAddressEditor.setEditorView(mUI.getEditorView()); |
| 383 mCardEditor.setEditorView(mUI.getCardEditorView()); | 388 mCardEditor.setEditorView(mUI.getCardEditorView()); |
| 384 if (mContactEditor != null) mContactEditor.setEditorView(mUI.getEditorVi
ew()); | 389 if (mContactEditor != null) mContactEditor.setEditorView(mUI.getEditorVi
ew()); |
| 385 | 390 |
| 386 PaymentRequestMetrics.recordRequestedInformationHistogram(requestPayerEm
ail, | 391 PaymentRequestMetrics.recordRequestedInformationHistogram(requestPayerEm
ail, |
| 387 requestPayerPhone, requestShipping); | 392 requestPayerPhone, requestShipping); |
| (...skipping 675 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1063 | 1068 |
| 1064 PaymentResponse response = new PaymentResponse(); | 1069 PaymentResponse response = new PaymentResponse(); |
| 1065 response.methodName = methodName; | 1070 response.methodName = methodName; |
| 1066 response.stringifiedDetails = stringifiedDetails; | 1071 response.stringifiedDetails = stringifiedDetails; |
| 1067 | 1072 |
| 1068 if (mContactSection != null) { | 1073 if (mContactSection != null) { |
| 1069 PaymentOption selectedContact = mContactSection.getSelectedItem(); | 1074 PaymentOption selectedContact = mContactSection.getSelectedItem(); |
| 1070 if (selectedContact != null) { | 1075 if (selectedContact != null) { |
| 1071 // Contacts are created in show(). These should all be instances
of AutofillContact. | 1076 // Contacts are created in show(). These should all be instances
of AutofillContact. |
| 1072 assert selectedContact instanceof AutofillContact; | 1077 assert selectedContact instanceof AutofillContact; |
| 1078 response.payerName = ((AutofillContact) selectedContact).getPaye
rName(); |
| 1073 response.payerPhone = ((AutofillContact) selectedContact).getPay
erPhone(); | 1079 response.payerPhone = ((AutofillContact) selectedContact).getPay
erPhone(); |
| 1074 response.payerEmail = ((AutofillContact) selectedContact).getPay
erEmail(); | 1080 response.payerEmail = ((AutofillContact) selectedContact).getPay
erEmail(); |
| 1075 } | 1081 } |
| 1076 } | 1082 } |
| 1077 | 1083 |
| 1078 if (mUiShippingOptions != null) { | 1084 if (mUiShippingOptions != null) { |
| 1079 PaymentOption selectedShippingOption = mUiShippingOptions.getSelecte
dItem(); | 1085 PaymentOption selectedShippingOption = mUiShippingOptions.getSelecte
dItem(); |
| 1080 if (selectedShippingOption != null && selectedShippingOption.getIden
tifier() != null) { | 1086 if (selectedShippingOption != null && selectedShippingOption.getIden
tifier() != null) { |
| 1081 response.shippingOption = selectedShippingOption.getIdentifier()
; | 1087 response.shippingOption = selectedShippingOption.getIdentifier()
; |
| 1082 } | 1088 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 "PaymentRequest.CheckoutFunnel.Aborted", abortReason, | 1268 "PaymentRequest.CheckoutFunnel.Aborted", abortReason, |
| 1263 PaymentRequestMetrics.ABORT_REASON_MAX); | 1269 PaymentRequestMetrics.ABORT_REASON_MAX); |
| 1264 | 1270 |
| 1265 if (abortReason == PaymentRequestMetrics.ABORT_REASON_ABORTED_BY_USER) { | 1271 if (abortReason == PaymentRequestMetrics.ABORT_REASON_ABORTED_BY_USER) { |
| 1266 mJourneyLogger.recordJourneyStatsHistograms("UserAborted"); | 1272 mJourneyLogger.recordJourneyStatsHistograms("UserAborted"); |
| 1267 } else { | 1273 } else { |
| 1268 mJourneyLogger.recordJourneyStatsHistograms("OtherAborted"); | 1274 mJourneyLogger.recordJourneyStatsHistograms("OtherAborted"); |
| 1269 } | 1275 } |
| 1270 } | 1276 } |
| 1271 } | 1277 } |
| OLD | NEW |