[ios] plug in manual fallback for credit card and address

Bug: 845472
Change-Id: Ie26e9022b60612b5ef90c7e9b2bde4202e6e745c
Reviewed-on: https://chromium-review.googlesource.com/c/1319594
Commit-Queue: David Jean <djean@chromium.org>
Reviewed-by: Moe Ahmadi <mahmadi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606869}
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
index 84b3070..bcd17f3 100644
--- a/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/form_input_accessory_coordinator.mm
@@ -8,6 +8,8 @@
 #import "components/autofill/ios/browser/js_suggestion_manager.h"
 #import "ios/chrome/browser/autofill/form_input_accessory_view_controller.h"
 #import "ios/chrome/browser/ui/autofill/form_input_accessory_mediator.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/address_coordinator.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_injection_handler.h"
 #import "ios/chrome/browser/ui/autofill/manual_fill/password_coordinator.h"
@@ -19,6 +21,8 @@
 
 @interface FormInputAccessoryCoordinator ()<
     ManualFillAccessoryViewControllerDelegate,
+    AddressCoordinatorDelegate,
+    CardCoordinatorDelegate,
     PasswordCoordinatorDelegate>
 
 // The Mediator for the input accessory view controller.
@@ -117,6 +121,41 @@
   [self.formInputAccessoryMediator disableSuggestions];
 }
 
+- (void)startCardsFromButton:(UIButton*)button {
+  CardCoordinator* cardCoordinator = [[CardCoordinator alloc]
+      initWithBaseViewController:self.baseViewController
+                    browserState:self.browserState
+                    webStateList:self.webStateList
+                injectionHandler:self.manualFillInjectionHandler];
+  cardCoordinator.delegate = self;
+  if (IsIPadIdiom()) {
+    [cardCoordinator presentFromButton:button];
+  } else {
+    [self.formInputAccessoryViewController
+        presentView:cardCoordinator.viewController.view];
+  }
+
+  [self.childCoordinators addObject:cardCoordinator];
+  [self.formInputAccessoryMediator disableSuggestions];
+}
+
+- (void)startAddressFromButton:(UIButton*)button {
+  AddressCoordinator* addressCoordinator = [[AddressCoordinator alloc]
+      initWithBaseViewController:self.baseViewController
+                    browserState:self.browserState
+                injectionHandler:self.manualFillInjectionHandler];
+  addressCoordinator.delegate = self;
+  if (IsIPadIdiom()) {
+    [addressCoordinator presentFromButton:button];
+  } else {
+    [self.formInputAccessoryViewController
+        presentView:addressCoordinator.viewController.view];
+  }
+
+  [self.childCoordinators addObject:addressCoordinator];
+  [self.formInputAccessoryMediator disableSuggestions];
+}
+
 #pragma mark - ManualFillAccessoryViewControllerDelegate
 
 - (void)keyboardButtonPressed {
@@ -124,14 +163,14 @@
   [self.formInputAccessoryMediator enableSuggestions];
 }
 
-- (void)accountButtonPressed {
+- (void)accountButtonPressed:(UIButton*)sender {
   [self stopChildren];
-  // TODO(crbug.com/845472): implement.
+  [self startAddressFromButton:sender];
 }
 
-- (void)cardButtonPressed {
+- (void)cardButtonPressed:(UIButton*)sender {
   [self stopChildren];
-  // TODO(crbug.com/845472): implement.
+  [self startCardsFromButton:sender];
 }
 
 - (void)passwordButtonPressed:(UIButton*)sender {
@@ -149,4 +188,16 @@
   [self.manualFillAccessoryViewController reset];
 }
 
+#pragma mark - CardCoordinatorDelegate
+
+- (void)openCardSettings {
+  // TODO(crbug.com/845472): implement.
+}
+
+#pragma mark - AddressCoordinatorDelegate
+
+- (void)openAddressSettings {
+  // TODO(crbug.com/845472): implement.
+}
+
 @end
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
index db318ab..fa6f48f 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
@@ -45,7 +45,9 @@
                                             completion:completion];
     return YES;
   } else {
-    completion();
+    if (completion) {
+      completion();
+    }
     return NO;
   }
 }
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h
index 935e1f6..e6025639 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h
@@ -24,10 +24,10 @@
 @protocol ManualFillAccessoryViewControllerDelegate
 
 // Invoked after the user touches the `accounts` button.
-- (void)accountButtonPressed;
+- (void)accountButtonPressed:(UIButton*)sender;
 
 // Invoked after the user touches the `credit cards` button.
-- (void)cardButtonPressed;
+- (void)cardButtonPressed:(UIButton*)sender;
 
 // Invoked after the user touches the `keyboard` button.
 - (void)keyboardButtonPressed;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
index f5f5682..e0cc3b8 100644
--- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.mm
@@ -109,7 +109,7 @@
     self.cardsButton.tintColor = tintColor;
     self.cardsButton.translatesAutoresizingMaskIntoConstraints = NO;
     [self.cardsButton addTarget:self
-                         action:@selector(cardButtonPressed)
+                         action:@selector(cardButtonPressed:)
                forControlEvents:UIControlEventTouchUpInside];
     self.cardsButton.accessibilityIdentifier =
         manual_fill::AccessoryCreditCardAccessibilityIdentifier;
@@ -121,7 +121,7 @@
     self.accountButton.tintColor = tintColor;
     self.accountButton.translatesAutoresizingMaskIntoConstraints = NO;
     [self.accountButton addTarget:self
-                           action:@selector(accountButtonPressed)
+                           action:@selector(accountButtonPressed:)
                  forControlEvents:UIControlEventTouchUpInside];
     self.accountButton.accessibilityIdentifier =
         manual_fill::AccessoryAddressAccessibilityIdentifier;
@@ -198,20 +198,19 @@
   [self.delegate passwordButtonPressed:sender];
 }
 
-- (void)cardButtonPressed {
+- (void)cardButtonPressed:(UIButton*)sender {
   base::RecordAction(base::UserMetricsAction("ManualFallback_OpenCreditCard"));
   [self animateKeyboardButtonHidden:NO];
   [self resetTintColors];
   [self.cardsButton setTintColor:UIColor.cr_manualFillTintColor];
-  [self.delegate cardButtonPressed];
+  [self.delegate cardButtonPressed:sender];
 }
 
-- (void)accountButtonPressed {
-  base::RecordAction(base::UserMetricsAction("ManualFallback_OpenProfile"));
+- (void)accountButtonPressed:(UIButton*)sender {
   [self animateKeyboardButtonHidden:NO];
   [self resetTintColors];
   [self.accountButton setTintColor:UIColor.cr_manualFillTintColor];
-  [self.delegate accountButtonPressed];
+  [self.delegate accountButtonPressed:sender];
 }
 
 @end