Commit cdd0e2dc authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Add buttonFactory as init param for BadgeViewController

This will make it possible to use it in Showcase. Both the buttonfactory
and the stackView of the BadgeViewController have to be initialized in
init in order for addBadge: to successfully add badges from a
Showcase coordinator.

Bug: 976901
Change-Id: I2a98150cbe64e3b407295224514da6220d393ec2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1755050
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Cr-Commit-Position: refs/heads/master@{#687395}
parent 99cba223
...@@ -11,15 +11,18 @@ ...@@ -11,15 +11,18 @@
#import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h" #import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h"
@class BadgeButtonFactory; @class BadgeButtonFactory;
@protocol InfobarCommands;
// Manages badges to display that are received through BadgeConsumer. Currently // Manages badges to display that are received through BadgeConsumer. Currently
// only displays the newest badge. // only displays the newest badge.
@interface BadgeViewController @interface BadgeViewController
: UIViewController <BadgeConsumer, FullscreenUIElement> : UIViewController <BadgeConsumer, FullscreenUIElement>
// The dispatcher for badge button actions. // |buttonFactory| must be non-nil.
@property(nonatomic, weak) id<InfobarCommands> dispatcher; - (instancetype)initWithButtonFactory:(BadgeButtonFactory*)buttonFactory
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithNibName:(NSString*)nibNameOrNil
bundle:(NSBundle*)nibBundleOrNil NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
@end @end
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
#import "ios/chrome/browser/ui/badges/badge_view_controller.h" #import "ios/chrome/browser/ui/badges/badge_view_controller.h"
#include "base/logging.h"
#import "ios/chrome/browser/ui/badges/badge_button.h" #import "ios/chrome/browser/ui/badges/badge_button.h"
#import "ios/chrome/browser/ui/badges/badge_button_action_handler.h"
#import "ios/chrome/browser/ui/badges/badge_button_factory.h" #import "ios/chrome/browser/ui/badges/badge_button_factory.h"
#import "ios/chrome/browser/ui/badges/badge_item.h" #import "ios/chrome/browser/ui/badges/badge_item.h"
#import "ios/chrome/browser/ui/elements/extended_touch_target_button.h" #import "ios/chrome/browser/ui/elements/extended_touch_target_button.h"
...@@ -38,14 +38,18 @@ ...@@ -38,14 +38,18 @@
@implementation BadgeViewController @implementation BadgeViewController
- (instancetype)initWithButtonFactory:(BadgeButtonFactory*)buttonFactory {
self = [super initWithNibName:nil bundle:nil];
if (self) {
DCHECK(buttonFactory);
_buttonFactory = buttonFactory;
_stackView = [[UIStackView alloc] init];
}
return self;
}
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
BadgeButtonActionHandler* actionHandler =
[[BadgeButtonActionHandler alloc] init];
actionHandler.dispatcher = self.dispatcher;
self.buttonFactory =
[[BadgeButtonFactory alloc] initWithActionHandler:actionHandler];
self.stackView = [[UIStackView alloc] init];
self.stackView.translatesAutoresizingMaskIntoConstraints = NO; self.stackView.translatesAutoresizingMaskIntoConstraints = NO;
self.stackView.axis = UILayoutConstraintAxisHorizontal; self.stackView.axis = UILayoutConstraintAxisHorizontal;
[self.view addSubview:self.stackView]; [self.view addSubview:self.stackView];
......
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
#include "ios/chrome/browser/infobars/infobar_metrics_recorder.h" #include "ios/chrome/browser/infobars/infobar_metrics_recorder.h"
#import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h" #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
#include "ios/chrome/browser/search_engines/template_url_service_factory.h" #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
#import "ios/chrome/browser/ui/badges/badge_button_action_handler.h"
#import "ios/chrome/browser/ui/badges/badge_button_factory.h"
#import "ios/chrome/browser/ui/badges/badge_mediator.h" #import "ios/chrome/browser/ui/badges/badge_mediator.h"
#import "ios/chrome/browser/ui/badges/badge_view_controller.h" #import "ios/chrome/browser/ui/badges/badge_view_controller.h"
#include "ios/chrome/browser/ui/commands/browser_commands.h" #include "ios/chrome/browser/ui/commands/browser_commands.h"
...@@ -168,9 +170,14 @@ const int kLocationAuthorizationStatusCount = 5; ...@@ -168,9 +170,14 @@ const int kLocationAuthorizationStatusCount = 5;
// Create BadgeMediator and set the viewController as its consumer. // Create BadgeMediator and set the viewController as its consumer.
if (IsInfobarUIRebootEnabled()) { if (IsInfobarUIRebootEnabled()) {
self.badgeViewController = [[BadgeViewController alloc] init]; BadgeButtonActionHandler* actionHandler =
self.badgeViewController.dispatcher = [[BadgeButtonActionHandler alloc] init];
actionHandler.dispatcher =
static_cast<id<InfobarCommands>>(self.dispatcher); static_cast<id<InfobarCommands>>(self.dispatcher);
BadgeButtonFactory* buttonFactory =
[[BadgeButtonFactory alloc] initWithActionHandler:actionHandler];
self.badgeViewController =
[[BadgeViewController alloc] initWithButtonFactory:buttonFactory];
[self.viewController addChildViewController:self.badgeViewController]; [self.viewController addChildViewController:self.badgeViewController];
[self.viewController setBadgeView:self.badgeViewController.view]; [self.viewController setBadgeView:self.badgeViewController.view];
[self.badgeViewController [self.badgeViewController
......
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