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

Unified Diff: ios/chrome/browser/payments/payment_request_view_controller.mm

Issue 2621453002: Selected shipping option in payment summary view + shipping option selection view (Closed)
Patch Set: Addressed comments by lpromero@ and jdonnelley@ Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/payments/payment_request_view_controller.mm
diff --git a/ios/chrome/browser/payments/payment_request_view_controller.mm b/ios/chrome/browser/payments/payment_request_view_controller.mm
index 55775161c5ca586413c3f3238f104dea3106ad46..6e9a14ea6833adf17a722387c52fcaa4cd46283d 100644
--- a/ios/chrome/browser/payments/payment_request_view_controller.mm
+++ b/ios/chrome/browser/payments/payment_request_view_controller.mm
@@ -19,16 +19,17 @@
#import "ios/chrome/browser/payments/cells/payment_method_item.h"
#import "ios/chrome/browser/payments/cells/shipping_address_item.h"
#import "ios/chrome/browser/payments/payment_request_utils.h"
-#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
#import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item.h"
#import "ios/chrome/browser/ui/collection_view/cells/collection_view_item.h"
#import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h"
+#import "ios/chrome/browser/ui/collection_view/cells/MDCCollectionViewCell+Chrome.h"
#import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
#import "ios/chrome/browser/ui/colors/MDCPalette+CrAdditions.h"
#include "ios/chrome/browser/ui/rtl_geometry.h"
#include "ios/chrome/grit/ios_strings.h"
#import "ios/third_party/material_components_ios/src/components/Buttons/src/MaterialButtons.h"
#import "ios/third_party/material_components_ios/src/components/CollectionCells/src/MaterialCollectionCells.h"
+#import "ios/third_party/material_components_ios/src/components/Typography/src/MaterialTypography.h"
#import "ios/third_party/material_roboto_font_loader_ios/src/src/MaterialRobotoFontLoader.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
@@ -54,6 +55,8 @@ typedef NS_ENUM(NSInteger, ItemType) {
ItemTypeShippingTitle,
ItemTypeShippingAddress,
ItemTypeAddShippingAddress,
+ ItemTypeShippingOption,
+ ItemTypeSelectShippingOption,
ItemTypePaymentTitle,
ItemTypePaymentMethod,
};
@@ -66,6 +69,7 @@ typedef NS_ENUM(NSInteger, ItemType) {
base::scoped_nsobject<MDCFlatButton> _payButton;
ShippingAddressItem* _selectedShippingAddressItem;
+ CollectionViewTextItem* _selectedShippingOptionItem;
base::mac::ObjCPropertyReleaser
_propertyReleaser_PaymentRequestViewController;
@@ -85,8 +89,9 @@ typedef NS_ENUM(NSInteger, ItemType) {
@synthesize pageFavicon = _pageFavicon;
@synthesize pageTitle = _pageTitle;
@synthesize pageHost = _pageHost;
-@synthesize selectedPaymentMethod = _selectedPaymentMethod;
@synthesize selectedShippingAddress = _selectedShippingAddress;
+@synthesize selectedShippingOption = _selectedShippingOption;
+@synthesize selectedPaymentMethod = _selectedPaymentMethod;
- (instancetype)init {
if ((self = [super initWithStyle:CollectionViewControllerStyleAppBar])) {
@@ -201,11 +206,8 @@ typedef NS_ENUM(NSInteger, ItemType) {
NSDecimalNumber* value = [NSDecimalNumber
decimalNumberWithString:SysUTF16ToNSString(
_paymentRequest.details.total.amount.value)];
- NSNumberFormatter* currencyFormatter =
- [[[NSNumberFormatter alloc] init] autorelease];
- [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
- [currencyFormatter setCurrencyCode:currencyCode];
- total.detailText = [currencyFormatter stringFromNumber:value];
+ total.detailText =
+ payment_request_utils::FormattedCurrencyString(value, currencyCode);
if (!_paymentRequest.details.display_items.empty()) {
total.accessoryType = MDCCollectionViewCellAccessoryDisclosureIndicator;
total.accessibilityTraits |= UIAccessibilityTraitButton;
@@ -221,11 +223,11 @@ typedef NS_ENUM(NSInteger, ItemType) {
[model setHeader:shippingTitle
forSectionWithIdentifier:SectionIdentifierShipping];
- CollectionViewItem* shippingItem = nil;
+ CollectionViewItem* shippingAddressItem = nil;
if (_selectedShippingAddress) {
_selectedShippingAddressItem = [[[ShippingAddressItem alloc]
initWithType:ItemTypeShippingAddress] autorelease];
- shippingItem = _selectedShippingAddressItem;
+ shippingAddressItem = _selectedShippingAddressItem;
[self fillShippingAddressItem:_selectedShippingAddressItem
withAddress:_selectedShippingAddress];
_selectedShippingAddressItem.accessoryType =
@@ -235,15 +237,34 @@ typedef NS_ENUM(NSInteger, ItemType) {
CollectionViewDetailItem* addAddressItem =
[[[CollectionViewDetailItem alloc]
initWithType:ItemTypeAddShippingAddress] autorelease];
- shippingItem = addAddressItem;
+ shippingAddressItem = addAddressItem;
addAddressItem.text = l10n_util::GetNSString(
IDS_IOS_PAYMENT_REQUEST_SHIPPING_ADDRESS_SELECTION_TITLE);
addAddressItem.detailText = [l10n_util::GetNSString(
IDS_IOS_PAYMENT_REQUEST_ADD_SHIPPING_ADDRESS_BUTTON)
uppercaseStringWithLocale:[NSLocale currentLocale]];
}
- shippingItem.accessibilityTraits |= UIAccessibilityTraitButton;
- [model addItem:shippingItem
+ shippingAddressItem.accessibilityTraits |= UIAccessibilityTraitButton;
+ [model addItem:shippingAddressItem
+ toSectionWithIdentifier:SectionIdentifierShipping];
+
+ CollectionViewTextItem* shippingOptionItem = nil;
+ if (_selectedShippingOption) {
+ _selectedShippingOptionItem = [[[CollectionViewTextItem alloc]
+ initWithType:ItemTypeShippingOption] autorelease];
+ shippingOptionItem = _selectedShippingOptionItem;
+ [self fillShippingOptionItem:_selectedShippingOptionItem
+ withOption:_selectedShippingOption];
+ } else {
+ shippingOptionItem = [[[CollectionViewTextItem alloc]
+ initWithType:ItemTypeSelectShippingOption] autorelease];
+ shippingOptionItem.text = l10n_util::GetNSString(
+ IDS_IOS_PAYMENT_REQUEST_SHIPPING_OPTION_SELECTION_TITLE);
+ }
+ shippingOptionItem.accessoryType =
+ MDCCollectionViewCellAccessoryDisclosureIndicator;
+ shippingOptionItem.accessibilityTraits |= UIAccessibilityTraitButton;
+ [model addItem:shippingOptionItem
toSectionWithIdentifier:SectionIdentifierShipping];
// Payment method section.
@@ -312,6 +333,17 @@ typedef NS_ENUM(NSInteger, ItemType) {
[self.collectionView reloadItemsAtIndexPaths:@[ indexPath ]];
}
+- (void)updateSelectedShippingOption:
+ (web::PaymentShippingOption*)shippingOption {
+ [self setSelectedShippingOption:shippingOption];
+ [self fillShippingOptionItem:_selectedShippingOptionItem
+ withOption:shippingOption];
+ NSIndexPath* indexPath =
+ [self.collectionViewModel indexPathForItem:_selectedShippingOptionItem
+ inSectionWithIdentifier:SectionIdentifierShipping];
+ [self.collectionView reloadItemsAtIndexPaths:@[ indexPath ]];
+}
+
#pragma mark - Helper methods
- (void)fillShippingAddressItem:(ShippingAddressItem*)item
@@ -324,7 +356,18 @@ typedef NS_ENUM(NSInteger, ItemType) {
address->GetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER));
}
+- (void)fillShippingOptionItem:(CollectionViewTextItem*)item
+ withOption:(web::PaymentShippingOption*)option {
+ item.text = base::SysUTF16ToNSString(option->label);
+ NSString* currencyCode = base::SysUTF16ToNSString(option->amount.currency);
+ NSDecimalNumber* value = [NSDecimalNumber
+ decimalNumberWithString:SysUTF16ToNSString(option->amount.value)];
+ item.detailText =
+ payment_request_utils::FormattedCurrencyString(value, currencyCode);
+}
+
#pragma mark UICollectionViewDataSource
+
- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView
cellForItemAtIndexPath:(nonnull NSIndexPath*)indexPath {
UICollectionViewCell* cell =
@@ -336,12 +379,20 @@ typedef NS_ENUM(NSInteger, ItemType) {
case ItemTypeAddShippingAddress: {
CollectionViewDetailCell* detailCell =
base::mac::ObjCCastStrict<CollectionViewDetailCell>(cell);
- detailCell.detailTextLabel.font =
- [[MDFRobotoFontLoader sharedInstance] mediumFontOfSize:14];
+ detailCell.detailTextLabel.font = [MDCTypography body2Font];
detailCell.detailTextLabel.textColor =
[[MDCPalette cr_bluePalette] tint700];
break;
}
+ case ItemTypeShippingOption: {
+ MDCCollectionViewTextCell* textCell =
+ base::mac::ObjCCastStrict<MDCCollectionViewTextCell>(cell);
+ textCell.textLabel.font = [MDCTypography body2Font];
+ textCell.textLabel.textColor = [[MDCPalette greyPalette] tint900];
+ textCell.detailTextLabel.font = [MDCTypography body1Font];
+ textCell.detailTextLabel.textColor = [[MDCPalette greyPalette] tint900];
+ break;
+ }
default:
break;
}
@@ -365,6 +416,10 @@ typedef NS_ENUM(NSInteger, ItemType) {
case ItemTypeAddShippingAddress:
[_delegate paymentRequestViewControllerSelectShippingAddress];
break;
+ case ItemTypeShippingOption:
+ case ItemTypeSelectShippingOption:
+ [_delegate paymentRequestViewControllerSelectShippingOption];
+ break;
case ItemTypePaymentMethod:
[_delegate paymentRequestViewControllerSelectPaymentMethod];
break;
@@ -386,6 +441,8 @@ typedef NS_ENUM(NSInteger, ItemType) {
return [MDCCollectionViewCell
cr_preferredHeightForWidth:CGRectGetWidth(collectionView.bounds)
forItem:item];
+ } else if (type == ItemTypeShippingOption) {
+ return MDCCellDefaultTwoLineHeight;
} else {
return MDCCellDefaultOneLineHeight;
}

Powered by Google App Engine
This is Rietveld 408576698