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

[ios] Fix BadgePopupMenuCoordinator action handling for Overlay

InfobarContainerCoordinator is not used in the Overlay implementation.
User taps to badges in the overflow menu should just insert an overlay
request into the OverlayRequestQueue.

Bug: 1138106
Change-Id: Id20bfec51be0894a3a430ed90069fd8f668349e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2488905
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819413}
parent 55994460
......@@ -96,17 +96,22 @@ source_set("badges_popup_menu") {
":public",
"//base",
"//ios/chrome/app/strings:ios_strings_grit",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars/overlays",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/infobars:feature_flags",
"//ios/chrome/browser/ui/list_model",
"//ios/chrome/browser/ui/popup_menu/public:popup_menu_ui",
"//ios/chrome/browser/ui/popup_menu/public/cells",
"//ios/chrome/browser/ui/table_view:styler",
"//ios/chrome/browser/ui/table_view/cells",
"//ios/chrome/browser/ui/util",
"//ios/chrome/browser/web_state_list",
"//ios/chrome/common/ui/colors",
"//ios/chrome/common/ui/util",
"//ui/base",
......
......@@ -6,15 +6,20 @@
#include "base/metrics/histogram_macros.h"
#include "base/notreached.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#include "ios/chrome/browser/infobars/infobar_manager_impl.h"
#include "ios/chrome/browser/infobars/infobar_metrics_recorder.h"
#import "ios/chrome/browser/infobars/infobar_type.h"
#import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter.h"
#import "ios/chrome/browser/main/browser.h"
#include "ios/chrome/browser/overlays/public/overlay_request_queue.h"
#import "ios/chrome/browser/ui/badges/badge_constants.h"
#import "ios/chrome/browser/ui/badges/badge_item.h"
#import "ios/chrome/browser/ui/badges/badge_popup_menu_item.h"
#import "ios/chrome/browser/ui/badges/badges_histograms.h"
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/ui/commands/infobar_commands.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h"
#import "ios/chrome/browser/ui/popup_menu/public/cells/popup_menu_item.h"
#import "ios/chrome/browser/ui/popup_menu/public/popup_menu_consumer.h"
#import "ios/chrome/browser/ui/popup_menu/public/popup_menu_presenter.h"
......@@ -23,6 +28,7 @@
#import "ios/chrome/browser/ui/popup_menu/public/popup_menu_table_view_controller_delegate.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_item.h"
#import "ios/chrome/browser/ui/util/layout_guide_names.h"
#import "ios/chrome/browser/web_state_list/web_state_list.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
......@@ -94,31 +100,31 @@
didSelectItem:(TableViewItem<PopupMenuItem>*)item
origin:(CGPoint)origin {
[self dismissPopupMenu];
id<InfobarCommands> handler =
HandlerForProtocol(self.browser->GetCommandDispatcher(), InfobarCommands);
switch (item.actionIdentifier) {
case PopupMenuActionShowSavePasswordOptions: {
UMA_HISTOGRAM_ENUMERATION(kInfobarOverflowMenuTappedHistogram,
MobileMessagesInfobarType::SavePassword);
[handler displayModalInfobar:InfobarType::kInfobarTypePasswordSave];
[self
addModalRequestForInfobarType:InfobarType::kInfobarTypePasswordSave];
break;
}
case PopupMenuActionShowUpdatePasswordOptions: {
UMA_HISTOGRAM_ENUMERATION(kInfobarOverflowMenuTappedHistogram,
MobileMessagesInfobarType::UpdatePassword);
[handler displayModalInfobar:InfobarType::kInfobarTypePasswordUpdate];
[self addModalRequestForInfobarType:InfobarType::
kInfobarTypePasswordUpdate];
break;
}
case PopupMenuActionShowSaveCardOptions: {
UMA_HISTOGRAM_ENUMERATION(kInfobarOverflowMenuTappedHistogram,
MobileMessagesInfobarType::SaveCard);
[handler displayModalInfobar:InfobarType::kInfobarTypeSaveCard];
[self addModalRequestForInfobarType:InfobarType::kInfobarTypeSaveCard];
break;
}
case PopupMenuActionShowTranslateOptions: {
UMA_HISTOGRAM_ENUMERATION(kInfobarOverflowMenuTappedHistogram,
MobileMessagesInfobarType::Translate);
[handler displayModalInfobar:InfobarType::kInfobarTypeTranslate];
[self addModalRequestForInfobarType:InfobarType::kInfobarTypeTranslate];
break;
}
default:
......@@ -129,6 +135,42 @@
#pragma mark - Private
// Adds a modal request for the Infobar of |infobarType|.
- (void)addModalRequestForInfobarType:(InfobarType)infobarType {
if (base::FeatureList::IsEnabled(kInfobarOverlayUI)) {
web::WebState* webState =
self.browser->GetWebStateList()->GetActiveWebState();
DCHECK(webState);
InfoBarIOS* infobar = [self infobarWithType:infobarType];
DCHECK(infobar);
InfobarOverlayRequestInserter::CreateForWebState(webState);
InsertParams params(infobar);
params.overlay_type = InfobarOverlayType::kModal;
params.insertion_index = OverlayRequestQueue::FromWebState(
webState, OverlayModality::kInfobarModal)
->size();
params.source = InfobarOverlayInsertionSource::kBadge;
InfobarOverlayRequestInserter::FromWebState(webState)->InsertOverlayRequest(
params);
} else {
id<InfobarCommands> handler = HandlerForProtocol(
self.browser->GetCommandDispatcher(), InfobarCommands);
[handler displayModalInfobar:infobarType];
}
}
// Retrieves the existing Infobar of |type|.
- (InfoBarIOS*)infobarWithType:(InfobarType)type {
InfoBarManagerImpl* manager = InfoBarManagerImpl::FromWebState(
self.browser->GetWebStateList()->GetActiveWebState());
for (size_t index = 0; index < manager->infobar_count(); ++index) {
InfoBarIOS* infobar = static_cast<InfoBarIOS*>(manager->infobar_at(index));
if (infobar->infobar_type() == type)
return infobar;
}
return nullptr;
}
- (void)dismissPopupMenu {
if (self.popupMenuPresenter) {
[self.popupMenuPresenter dismissAnimated:YES];
......
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