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 @@
#import "ios/chrome/browser/ui/fullscreen/fullscreen_ui_element.h"
@class BadgeButtonFactory;
@protocol InfobarCommands;
// Manages badges to display that are received through BadgeConsumer. Currently
// only displays the newest badge.
@interface BadgeViewController
: UIViewController <BadgeConsumer, FullscreenUIElement>
// The dispatcher for badge button actions.
@property(nonatomic, weak) id<InfobarCommands> dispatcher;
// |buttonFactory| must be non-nil.
- (instancetype)initWithButtonFactory:(BadgeButtonFactory*)buttonFactory
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithNibName:(NSString*)nibNameOrNil
bundle:(NSBundle*)nibBundleOrNil NS_UNAVAILABLE;
- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
@end
......
......@@ -4,8 +4,8 @@
#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_action_handler.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/elements/extended_touch_target_button.h"
......@@ -38,14 +38,18 @@
@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 {
[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.axis = UILayoutConstraintAxisHorizontal;
[self.view addSubview:self.stackView];
......
......@@ -21,6 +21,8 @@
#include "ios/chrome/browser/infobars/infobar_metrics_recorder.h"
#import "ios/chrome/browser/ntp/new_tab_page_tab_helper.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_view_controller.h"
#include "ios/chrome/browser/ui/commands/browser_commands.h"
......@@ -168,9 +170,14 @@ const int kLocationAuthorizationStatusCount = 5;
// Create BadgeMediator and set the viewController as its consumer.
if (IsInfobarUIRebootEnabled()) {
self.badgeViewController = [[BadgeViewController alloc] init];
self.badgeViewController.dispatcher =
BadgeButtonActionHandler* actionHandler =
[[BadgeButtonActionHandler alloc] init];
actionHandler.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 setBadgeView:self.badgeViewController.view];
[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