Commit 3bcb3d34 authored by Tanisha Mandre's avatar Tanisha Mandre Committed by Commit Bot

Add Credit Card Scanner View Controller Coordinator

- Implement Coordinator which uses the same Presenting delegate as the QR Scanner.

Bug: 989951

Change-Id: I6a48b71313825b1139d0d0f237fd0c91125ed487
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1730906
Commit-Queue: Tanisha Mandre <tanishamandre@google.com>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Reviewed-by: default avatarJavier Ernesto Flores Robles <javierrobles@chromium.org>
Cr-Commit-Position: refs/heads/master@{#689113}
parent 3f7e3611
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
} }
strongSelf.viewportRect = viewportRect; strongSelf.viewportRect = viewportRect;
if (strongSelf.metadataOutput) { if (strongSelf.metadataOutput) {
[strongSelf.metadataOutput setRectOfInterest:_viewportRect]; //[strongSelf.metadataOutput setRectOfInterest:_viewportRect];
} }
}); });
} }
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "ios/chrome/browser/ui/scanner/scanner_presenting.h" #include "ios/chrome/browser/ui/scanner/scanner_presenting.h"
#include "ios/chrome/browser/ui/scanner/scanner_transitioning_delegate.h" #include "ios/chrome/browser/ui/scanner/scanner_transitioning_delegate.h"
#include "ios/chrome/browser/ui/scanner/scanner_view.h" #include "ios/chrome/browser/ui/scanner/scanner_view.h"
#import "ios/chrome/browser/ui/util/ui_util.h"
#include "ios/chrome/grit/ios_strings.h" #include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
...@@ -79,6 +80,11 @@ using base::UserMetricsAction; ...@@ -79,6 +80,11 @@ using base::UserMetricsAction;
]]; ]];
AVCaptureVideoPreviewLayer* previewLayer = [self.scannerView getPreviewLayer]; AVCaptureVideoPreviewLayer* previewLayer = [self.scannerView getPreviewLayer];
// CGRect rect = [self.scannerView frame];
// NSLog(@"%@", NSStringFromCGRect(rect));
previewLayer.frame = CGRectMakeCenteredRectInFrame(
[self.scannerView frame].size, [self.scannerView viewportSize]);
switch ([self.cameraController getAuthorizationStatus]) { switch ([self.cameraController getAuthorizationStatus]) {
case AVAuthorizationStatusNotDetermined: case AVAuthorizationStatusNotDetermined:
[self.cameraController [self.cameraController
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
} }
- (CGRect)viewportRectOfInterest { - (CGRect)viewportRectOfInterest {
DCHECK(CGPointEqualToPoint(self.frame.origin, CGPointZero)); // DCHECK(CGPointEqualToPoint(self.frame.origin, CGPointZero));
CGRect viewportRect = CGRect viewportRect =
CGRectMakeCenteredRectInFrame(self.frame.size, _viewportSize); CGRectMakeCenteredRectInFrame(self.frame.size, _viewportSize);
AVCaptureVideoPreviewLayer* layer = [self previewLayer]; AVCaptureVideoPreviewLayer* layer = [self previewLayer];
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator.h"
#import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator_delegate.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_mediator_delegate.h"
#import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.h" #import "ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.h"
#import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_coordinator.h"
#include "ios/chrome/grit/ios_strings.h" #include "ios/chrome/grit/ios_strings.h"
#include "ui/base/l10n/l10n_util_mac.h" #include "ui/base/l10n/l10n_util_mac.h"
...@@ -23,6 +24,10 @@ ...@@ -23,6 +24,10 @@
// Displays message for invalid credit card data. // Displays message for invalid credit card data.
@property(nonatomic, strong) AlertCoordinator* alertCoordinator; @property(nonatomic, strong) AlertCoordinator* alertCoordinator;
// The Credit Card Scanner Coordinator.
@property(nonatomic, strong)
CreditCardScannerCoordinator* creditCardScannerCoordinator;
// The view controller attached to this coordinator. // The view controller attached to this coordinator.
@property(nonatomic, strong) @property(nonatomic, strong)
AutofillAddCreditCardViewController* addCreditCardViewController; AutofillAddCreditCardViewController* addCreditCardViewController;
...@@ -56,6 +61,8 @@ ...@@ -56,6 +61,8 @@
} }
- (void)stop { - (void)stop {
[self.creditCardScannerCoordinator stop];
self.creditCardScannerCoordinator = nil;
[self.addCreditCardViewController.navigationController [self.addCreditCardViewController.navigationController
dismissViewControllerAnimated:YES dismissViewControllerAnimated:YES
completion:nil]; completion:nil];
...@@ -83,6 +90,13 @@ ...@@ -83,6 +90,13 @@
IDS_IOS_ADD_CREDIT_CARD_INVALID_EXPIRATION_DATE_ALERT)]; IDS_IOS_ADD_CREDIT_CARD_INVALID_EXPIRATION_DATE_ALERT)];
} }
- (void)creditCardMediatorShowScanner:(AutofillAddCreditCardMediator*)mediator {
self.creditCardScannerCoordinator = [[CreditCardScannerCoordinator alloc]
initWithBaseViewController:self.addCreditCardViewController];
[self.creditCardScannerCoordinator start];
}
#pragma mark - Helper Methods #pragma mark - Helper Methods
// Shows alert with received message by |AlertCoordinator|. // Shows alert with received message by |AlertCoordinator|.
......
...@@ -45,7 +45,8 @@ ...@@ -45,7 +45,8 @@
#pragma mark - AddCreditCardViewControllerDelegate #pragma mark - AddCreditCardViewControllerDelegate
- (void)addCreditCardViewController:(UIViewController*)viewController - (void)addCreditCardViewController:
(AutofillAddCreditCardViewController*)viewController
addCreditCardWithHolderName:(NSString*)cardHolderName addCreditCardWithHolderName:(NSString*)cardHolderName
cardNumber:(NSString*)cardNumber cardNumber:(NSString*)cardNumber
expirationMonth:(NSString*)expirationMonth expirationMonth:(NSString*)expirationMonth
...@@ -94,10 +95,16 @@ ...@@ -94,10 +95,16 @@
[self.addCreditCardMediatorDelegate creditCardMediatorDidFinish:self]; [self.addCreditCardMediatorDelegate creditCardMediatorDidFinish:self];
} }
- (void)addCreditCardViewControllerDidCancel:(UIViewController*)viewController { - (void)addCreditCardViewControllerDidCancel:
(AutofillAddCreditCardViewController*)viewController {
[self.addCreditCardMediatorDelegate creditCardMediatorDidFinish:self]; [self.addCreditCardMediatorDelegate creditCardMediatorDidFinish:self];
} }
- (void)addCreditCardViewControllerDidUseCamera:
(AutofillAddCreditCardViewController*)viewController {
[self.addCreditCardMediatorDelegate creditCardMediatorShowScanner:self];
}
#pragma mark - Private #pragma mark - Private
// Updates received credit card with received data. // Updates received credit card with received data.
......
...@@ -18,6 +18,9 @@ ...@@ -18,6 +18,9 @@
- (void)creditCardMediatorHasInvalidExpirationDate: - (void)creditCardMediatorHasInvalidExpirationDate:
(AutofillAddCreditCardMediator*)mediator; (AutofillAddCreditCardMediator*)mediator;
// Notifies that the credit card scanner needs to be shown.
- (void)creditCardMediatorShowScanner:(AutofillAddCreditCardMediator*)mediator;
// Notifies that the credit card is valid or the user cancel the view // Notifies that the credit card is valid or the user cancel the view
// controller. // controller.
- (void)creditCardMediatorDidFinish:(AutofillAddCreditCardMediator*)mediator; - (void)creditCardMediatorDidFinish:(AutofillAddCreditCardMediator*)mediator;
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/mac/foundation_util.h" #include "base/mac/foundation_util.h"
#import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
#include "ios/chrome/browser/ui/scanner/scanner_presenting.h"
#import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_view_controller.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_edit_item.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h"
#import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h"
...@@ -40,7 +38,7 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -40,7 +38,7 @@ typedef NS_ENUM(NSInteger, ItemType) {
} // namespace } // namespace
@interface AutofillAddCreditCardViewController () <ScannerPresenting> @interface AutofillAddCreditCardViewController ()
// The AddCreditCardViewControllerDelegate for this ViewController. // The AddCreditCardViewControllerDelegate for this ViewController.
@property(nonatomic, weak) id<AddCreditCardViewControllerDelegate> delegate; @property(nonatomic, weak) id<AddCreditCardViewControllerDelegate> delegate;
...@@ -240,19 +238,7 @@ typedef NS_ENUM(NSInteger, ItemType) { ...@@ -240,19 +238,7 @@ typedef NS_ENUM(NSInteger, ItemType) {
// Presents the credit card scanner camera screen. // Presents the credit card scanner camera screen.
- (void)handleCameraButton { - (void)handleCameraButton {
CreditCardScannerViewController* scannerController = [self.delegate addCreditCardViewControllerDidUseCamera:self];
[[CreditCardScannerViewController alloc]
initWithPresentationProvider:self];
scannerController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentViewController:scannerController animated:YES completion:nil];
}
#pragma mark - ScannerPresenting
- (void)dismissScannerViewController:(UIViewController*)controller
completion:(void (^)(void))completion {
[self dismissViewControllerAnimated:YES completion:completion];
} }
@end @end
...@@ -5,13 +5,14 @@ ...@@ -5,13 +5,14 @@
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_AUTOFILL_ADD_CREDIT_CARD_VIEW_CONTROLLER_DELEGATE_H_ #ifndef IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_AUTOFILL_ADD_CREDIT_CARD_VIEW_CONTROLLER_DELEGATE_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_AUTOFILL_ADD_CREDIT_CARD_VIEW_CONTROLLER_DELEGATE_H_ #define IOS_CHROME_BROWSER_UI_SETTINGS_AUTOFILL_AUTOFILL_ADD_CREDIT_CARD_VIEW_CONTROLLER_DELEGATE_H_
@class UIViewController; @class AutofillAddCreditCardViewController;
// Delegate manages adding a new credit card. // Delegate manages adding a new credit card.
@protocol AddCreditCardViewControllerDelegate @protocol AddCreditCardViewControllerDelegate
// Receives a credit card data. Implement this method to save a new credit card. // Receives a credit card data. Implement this method to save a new credit card.
- (void)addCreditCardViewController:(UIViewController*)viewController - (void)addCreditCardViewController:
(AutofillAddCreditCardViewController*)viewController
addCreditCardWithHolderName:(NSString*)cardHolderName addCreditCardWithHolderName:(NSString*)cardHolderName
cardNumber:(NSString*)cardNumber cardNumber:(NSString*)cardNumber
expirationMonth:(NSString*)expirationMonth expirationMonth:(NSString*)expirationMonth
...@@ -19,7 +20,12 @@ ...@@ -19,7 +20,12 @@
// Notifies the class which conform this delegate for cancel button tap in // Notifies the class which conform this delegate for cancel button tap in
// received view controller. // received view controller.
- (void)addCreditCardViewControllerDidCancel:(UIViewController*)viewController; - (void)addCreditCardViewControllerDidCancel:
(AutofillAddCreditCardViewController*)viewController;
// Notifies the class which conforms to this delegate to 'Use Camera'
- (void)addCreditCardViewControllerDidUseCamera:
(AutofillAddCreditCardViewController*)viewController;
@end @end
......
...@@ -8,6 +8,8 @@ source_set("credit_card_scanner") { ...@@ -8,6 +8,8 @@ source_set("credit_card_scanner") {
"credit_card_scanner_camera_controller.h", "credit_card_scanner_camera_controller.h",
"credit_card_scanner_camera_controller.mm", "credit_card_scanner_camera_controller.mm",
"credit_card_scanner_camera_controller_delegate.h", "credit_card_scanner_camera_controller_delegate.h",
"credit_card_scanner_coordinator.h",
"credit_card_scanner_coordinator.mm",
"credit_card_scanner_view.h", "credit_card_scanner_view.h",
"credit_card_scanner_view.mm", "credit_card_scanner_view.mm",
"credit_card_scanner_view_controller.h", "credit_card_scanner_view_controller.h",
...@@ -15,6 +17,7 @@ source_set("credit_card_scanner") { ...@@ -15,6 +17,7 @@ source_set("credit_card_scanner") {
] ]
deps = [ deps = [
"//ios/chrome/app/strings", "//ios/chrome/app/strings",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/qr_scanner", "//ios/chrome/browser/ui/qr_scanner",
"//ios/chrome/browser/ui/scanner", "//ios/chrome/browser/ui/scanner",
"//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/util",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_UI_SETTINGS_CREDIT_CARD_SCANNER_CREDIT_CARD_SCANNER_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_SETTINGS_CREDIT_CARD_SCANNER_CREDIT_CARD_SCANNER_COORDINATOR_H_
#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h"
// The coordinator for the Credit Card Scanner screen.
@interface CreditCardScannerCoordinator : ChromeCoordinator
@end
#endif // IOS_CHROME_BROWSER_UI_SETTINGS_CREDIT_CARD_SCANNER_CREDIT_CARD_SCANNER_COORDINATOR_H_
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_coordinator.h"
#import "ios/chrome/browser/ui/scanner/scanner_presenting.h"
#import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_view_controller.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface CreditCardScannerCoordinator () <ScannerPresenting>
// The view controller attached to this coordinator.
@property(nonatomic, strong) UIViewController* viewController;
@end
@implementation CreditCardScannerCoordinator
#pragma mark - ChromeCoordinator
- (void)start {
[super start];
CreditCardScannerViewController* creditCardScannerViewController =
[[CreditCardScannerViewController alloc]
initWithPresentationProvider:self];
creditCardScannerViewController.modalPresentationStyle =
UIModalPresentationFullScreen;
self.viewController = creditCardScannerViewController;
[self.baseViewController presentViewController:creditCardScannerViewController
animated:YES
completion:nil];
}
- (void)stop {
[super stop];
[self.viewController dismissViewControllerAnimated:YES completion:nil];
self.viewController = nil;
}
#pragma mark - ScannerPresenting
- (void)dismissScannerViewController:(UIViewController*)controller
completion:(void (^)(void))completion {
[self stop];
}
@end
...@@ -7,8 +7,7 @@ ...@@ -7,8 +7,7 @@
#include "base/logging.h" #include "base/logging.h"
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h" #include "base/metrics/user_metrics_action.h"
#import "ios/chrome/browser/ui/qr_scanner/qr_scanner_camera_controller.h" #import "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_camera_controller.h"
#import "ios/chrome/browser/ui/scanner/scanner_transitioning_delegate.h"
#include "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_view.h" #include "ios/chrome/browser/ui/settings/credit_card_scanner/credit_card_scanner_view.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment