Commit 7f45dbbc authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Create InfobarTranslateCoordinator

This change creates InfobarTranslateCoordinator and
implements the basic methods of an InfobarCoordinator and TranslateInfoBarDelegate.
It also creates kInfobarTypeTranslate and expands infobar_metrics_recorder to handle
this case.

Bug: 1014959
Change-Id: I994abf7205f405da3aa20f0fb726a3701b6a145d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1864716Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Reviewed-by: default avatarPeter Lee <pkl@chromium.org>
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707491}
parent 666f0a24
...@@ -64,6 +64,19 @@ const char kInfobarSaveCardModalEventHistogram[] = ...@@ -64,6 +64,19 @@ const char kInfobarSaveCardModalEventHistogram[] =
const char kInfobarSaveCardBadgeTappedHistogram[] = const char kInfobarSaveCardBadgeTappedHistogram[] =
"Mobile.Messages.Badge.Tapped.InfobarTypeSaveCard"; "Mobile.Messages.Badge.Tapped.InfobarTypeSaveCard";
// Histogram names for InfobarTypeTranslate.
// Banner.
const char kInfobarTranslateBannerEventHistogram[] =
"Mobile.Messages.Banner.Event.InfobarTypeTranslate";
const char kInfobarTranslateBannerDismissTypeHistogram[] =
"Mobile.Messages.Banner.Dismiss.InfobarTypeTranslate";
// Modal.
const char kInfobarTranslateModalEventHistogram[] =
"Mobile.Messages.Modal.Event.InfobarTypeTranslate";
// Badge.
const char kInfobarTranslateBadgeTappedHistogram[] =
"Mobile.Messages.Badge.Tapped.InfobarTypeTranslate";
} // namespace } // namespace
@interface InfobarMetricsRecorder () @interface InfobarMetricsRecorder ()
...@@ -99,6 +112,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] = ...@@ -99,6 +112,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] =
case InfobarType::kInfobarTypeSaveCard: case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerEventHistogram, event); UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerEventHistogram, event);
break; break;
case InfobarType::kInfobarTypeTranslate:
UMA_HISTOGRAM_ENUMERATION(kInfobarTranslateBannerEventHistogram, event);
break;
} }
} }
...@@ -120,6 +136,10 @@ const char kInfobarSaveCardBadgeTappedHistogram[] = ...@@ -120,6 +136,10 @@ const char kInfobarSaveCardBadgeTappedHistogram[] =
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerDismissTypeHistogram, UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBannerDismissTypeHistogram,
dismissType); dismissType);
break; break;
case InfobarType::kInfobarTypeTranslate:
UMA_HISTOGRAM_ENUMERATION(kInfobarTranslateBannerDismissTypeHistogram,
dismissType);
break;
} }
} }
...@@ -143,6 +163,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] = ...@@ -143,6 +163,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] =
case InfobarType::kInfobarTypeSaveCard: case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardModalEventHistogram, event); UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardModalEventHistogram, event);
break; break;
case InfobarType::kInfobarTypeTranslate:
UMA_HISTOGRAM_ENUMERATION(kInfobarTranslateModalEventHistogram, event);
break;
} }
} }
...@@ -162,6 +185,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] = ...@@ -162,6 +185,9 @@ const char kInfobarSaveCardBadgeTappedHistogram[] =
case InfobarType::kInfobarTypeSaveCard: case InfobarType::kInfobarTypeSaveCard:
UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBadgeTappedHistogram, state); UMA_HISTOGRAM_ENUMERATION(kInfobarSaveCardBadgeTappedHistogram, state);
break; break;
case InfobarType::kInfobarTypeTranslate:
UMA_HISTOGRAM_ENUMERATION(kInfobarTranslateBadgeTappedHistogram, state);
break;
} }
} }
......
...@@ -16,6 +16,8 @@ enum class InfobarType { ...@@ -16,6 +16,8 @@ enum class InfobarType {
kInfobarTypePasswordUpdate = 2, kInfobarTypePasswordUpdate = 2,
// Message Infobar for Saving a Credit Card. // Message Infobar for Saving a Credit Card.
kInfobarTypeSaveCard = 3, kInfobarTypeSaveCard = 3,
// Message Infobar for Translating a page.
kInfobarTypeTranslate = 4,
}; };
#endif // IOS_CHROME_BROWSER_INFOBARS_INFOBAR_TYPE_H_ #endif // IOS_CHROME_BROWSER_INFOBARS_INFOBAR_TYPE_H_
...@@ -2,6 +2,18 @@ ...@@ -2,6 +2,18 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
source_set("public") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"translate_infobar_delegate_observer_bridge.h",
"translate_infobar_delegate_observer_bridge.mm",
]
deps = [
"//base",
"//components/translate/core/browser",
]
}
source_set("translate") { source_set("translate") {
configs += [ "//build/config/compiler:enable_arc" ] configs += [ "//build/config/compiler:enable_arc" ]
sources = [ sources = [
...@@ -15,8 +27,6 @@ source_set("translate") { ...@@ -15,8 +27,6 @@ source_set("translate") {
"translate_accept_languages_factory.h", "translate_accept_languages_factory.h",
"translate_infobar_controller.h", "translate_infobar_controller.h",
"translate_infobar_controller.mm", "translate_infobar_controller.mm",
"translate_infobar_delegate_observer_bridge.h",
"translate_infobar_delegate_observer_bridge.mm",
"translate_infobar_tags.h", "translate_infobar_tags.h",
"translate_option_selection_delegate.h", "translate_option_selection_delegate.h",
"translate_option_selection_handler.h", "translate_option_selection_handler.h",
...@@ -28,6 +38,7 @@ source_set("translate") { ...@@ -28,6 +38,7 @@ source_set("translate") {
"translate_service_ios.mm", "translate_service_ios.mm",
] ]
deps = [ deps = [
":public",
"//base", "//base",
"//components/infobars/core", "//components/infobars/core",
"//components/keyed_service/core", "//components/keyed_service/core",
...@@ -69,6 +80,7 @@ source_set("unit_tests") { ...@@ -69,6 +80,7 @@ source_set("unit_tests") {
"translate_service_ios_unittest.cc", "translate_service_ios_unittest.cc",
] ]
deps = [ deps = [
":public",
":translate", ":translate",
"//base", "//base",
"//base/test:test_support", "//base/test:test_support",
......
...@@ -14,16 +14,20 @@ source_set("coordinators") { ...@@ -14,16 +14,20 @@ source_set("coordinators") {
"infobar_password_coordinator.mm", "infobar_password_coordinator.mm",
"infobar_save_card_coordinator.h", "infobar_save_card_coordinator.h",
"infobar_save_card_coordinator.mm", "infobar_save_card_coordinator.mm",
"infobar_translate_coordinator.h",
"infobar_translate_coordinator.mm",
] ]
deps = [ deps = [
"//base", "//base",
"//components/autofill/core/browser", "//components/autofill/core/browser",
"//components/infobars/core", "//components/infobars/core",
"//components/translate/core/browser",
"//ios/chrome/app/strings:ios_strings_grit", "//ios/chrome/app/strings:ios_strings_grit",
"//ios/chrome/browser/infobars:public", "//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars:public", "//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/passwords:infobar_delegates", "//ios/chrome/browser/passwords:infobar_delegates",
"//ios/chrome/browser/passwords:public", "//ios/chrome/browser/passwords:public",
"//ios/chrome/browser/translate:public",
"//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/commands",
"//ios/chrome/browser/ui/coordinators:chrome_coordinators", "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
"//ios/chrome/browser/ui/fullscreen", "//ios/chrome/browser/ui/fullscreen",
......
// 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_INFOBARS_COORDINATORS_INFOBAR_TRANSLATE_COORDINATOR_H_
#define IOS_CHROME_BROWSER_UI_INFOBARS_COORDINATORS_INFOBAR_TRANSLATE_COORDINATOR_H_
#import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h"
namespace translate {
class TranslateInfoBarDelegate;
} // namespace translate
// Coordinator that creates and manages the Translate Infobar.
@interface TranslateInfobarCoordinator : InfobarCoordinator
// Designated initializer. |infoBarDelegate| is used to configure the
// Infobar and subsequently perform related actions.
- (instancetype)initWithInfoBarDelegate:
(translate::TranslateInfoBarDelegate*)infoBarDelegate
NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithInfoBarDelegate:
(infobars::InfoBarDelegate*)infoBarDelegate
badgeSupport:(BOOL)badgeSupport
type:(InfobarType)infobarType NS_UNAVAILABLE;
@end
#endif // IOS_CHROME_BROWSER_UI_INFOBARS_COORDINATORS_INFOBAR_TRANSLATE_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/infobars/coordinators/infobar_translate_coordinator.h"
#include "components/translate/core/browser/translate_infobar_delegate.h"
#include "ios/chrome/browser/infobars/infobar_controller_delegate.h"
#import "ios/chrome/browser/infobars/infobar_type.h"
#import "ios/chrome/browser/translate/translate_infobar_delegate_observer_bridge.h"
#import "ios/chrome/browser/ui/infobars/banners/infobar_banner_view_controller.h"
#import "ios/chrome/browser/ui/infobars/infobar_container.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
@interface TranslateInfobarCoordinator () <TranslateInfobarDelegateObserving> {
// Observer to listen for changes to the TranslateStep.
std::unique_ptr<TranslateInfobarDelegateObserverBridge>
_translateInfobarDelegateObserver;
}
// Delegate that holds the Translate Infobar information and actions.
@property(nonatomic, readonly)
translate::TranslateInfoBarDelegate* translateInfoBarDelegate;
@end
@implementation TranslateInfobarCoordinator
- (instancetype)initWithInfoBarDelegate:
(translate::TranslateInfoBarDelegate*)infoBarDelegate {
self = [super initWithInfoBarDelegate:infoBarDelegate
badgeSupport:YES
type:InfobarType::kInfobarTypeTranslate];
if (self) {
_translateInfoBarDelegate = infoBarDelegate;
_translateInfobarDelegateObserver =
std::make_unique<TranslateInfobarDelegateObserverBridge>(
infoBarDelegate, self);
}
return self;
}
#pragma mark - TranslateInfobarDelegateObserving
- (void)translateInfoBarDelegate:(translate::TranslateInfoBarDelegate*)delegate
didChangeTranslateStep:(translate::TranslateStep)step
withErrorType:(translate::TranslateErrors::Type)errorType {
// TODO(crbug.com/1014959): implement
}
- (BOOL)translateInfoBarDelegateDidDismissWithoutInteraction:
(translate::TranslateInfoBarDelegate*)delegate {
// TODO(crbug.com/1014959): implement
return YES;
}
#pragma mark - ChromeCoordinator
- (void)start {
if (!self.started) {
self.started = YES;
// TODO(crbug.com/1014959): Configure BannerViewController.
}
}
- (void)stop {
[super stop];
if (self.started) {
self.started = NO;
// RemoveInfoBar() will delete the InfobarIOS that owns this Coordinator
// from memory.
self.delegate->RemoveInfoBar();
[self.infobarContainer childCoordinatorStopped:self];
}
}
#pragma mark - InfobarCoordinatorImplementation
- (void)performInfobarAction {
// TODO(crbug.com/1014959): implement
}
- (void)infobarWasDismissed {
// TODO(crbug.com/1014959): implement
}
#pragma mark - Banner
- (void)infobarBannerWasPresented {
// TODO(crbug.com/1014959): implement
}
- (void)dismissBannerWhenInteractionIsFinished {
// TODO(crbug.com/1014959): implement
}
- (void)infobarBannerWillBeDismissed:(BOOL)userInitiated {
// TODO(crbug.com/1014959): implement
}
#pragma mark - Modal
- (BOOL)configureModalViewController {
// TODO(crbug.com/1014959): implement
return NO;
}
- (void)infobarModalPresentedFromBanner:(BOOL)presentedFromBanner {
// TODO(crbug.com/1014959): implement
}
- (CGFloat)infobarModalHeightForWidth:(CGFloat)width {
// TODO(crbug.com/1014959): implement
return 0.0;
}
@end
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