Commit 114fd674 authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Move dismissInfobarBannerAfterInteraction delay call into InfobarCoordinator

This change move the 7 second delay dismiss call into presentInfobarBannerAnimated:.
This will be helpful now that Translate will be presenting the banner multiple times,
allowing the 7 second delay to reset every time the banner is displayed.

Bug: 1014959
Change-Id: I0c11f0221bfc08be9e6bb4b119bdad09b67fcfe5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1900294
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712901}
parent 995569a5
......@@ -10,6 +10,7 @@
#import "ios/chrome/browser/ui/infobars/banners/infobar_banner_presentation_state.h"
#import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator_implementation.h"
#import "ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h"
#import "ios/chrome/browser/ui/infobars/infobar_constants.h"
#import "ios/chrome/browser/ui/infobars/infobar_container.h"
#import "ios/chrome/browser/ui/infobars/presentation/infobar_banner_positioner.h"
#import "ios/chrome/browser/ui/infobars/presentation/infobar_banner_transition_driver.h"
......@@ -50,6 +51,8 @@ const CGFloat kiPadBannerOverlapWithOmnibox = 10.0;
InfobarModalTransitionDriver* modalTransitionDriver;
// Readwrite redefinition.
@property(nonatomic, assign, readwrite) BOOL bannerWasPresented;
// Completion block used to dismiss the banner after a set period of time.
@property(nonatomic, copy) dispatch_block_t dismissBannerBlock;
@end
......@@ -141,6 +144,26 @@ const CGFloat kiPadBannerOverlapWithOmnibox = 10.0;
if (completion)
completion();
}];
// Dismisses the presented banner after a certain number of seconds.
if (!UIAccessibilityIsVoiceOverRunning()) {
NSTimeInterval timeInterval =
self.highPriorityPresentation
? kInfobarBannerLongPresentationDurationInSeconds
: kInfobarBannerDefaultPresentationDurationInSeconds;
dispatch_time_t popTime =
dispatch_time(DISPATCH_TIME_NOW, timeInterval * NSEC_PER_SEC);
if (self.dismissBannerBlock) {
// TODO:(crbug.com/1021805): Write unittest to cover this situation.
dispatch_block_cancel(self.dismissBannerBlock);
}
__weak InfobarCoordinator* weakSelf = self;
self.dismissBannerBlock = ^(void) {
[weakSelf dismissInfobarBannerAfterInteraction];
weakSelf.dismissBannerBlock = nil;
};
dispatch_after(popTime, dispatch_get_main_queue(), self.dismissBannerBlock);
}
}
- (void)presentInfobarModal {
......
......@@ -13,7 +13,6 @@
#import "ios/chrome/browser/ui/commands/command_dispatcher.h"
#import "ios/chrome/browser/ui/fullscreen/fullscreen_controller_factory.h"
#import "ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.h"
#import "ios/chrome/browser/ui/infobars/infobar_constants.h"
#import "ios/chrome/browser/ui/infobars/infobar_container.h"
#import "ios/chrome/browser/ui/infobars/infobar_container_consumer.h"
#include "ios/chrome/browser/ui/infobars/infobar_container_mediator.h"
......@@ -295,20 +294,6 @@
[infobarCoordinator presentInfobarBannerAnimated:YES completion:nil];
self.infobarViewController = infobarCoordinator.bannerViewController;
[self.infobarCoordinatorsToPresent removeObject:infobarCoordinator];
// Dismisses the presented InfobarCoordinator banner after
// kInfobarBannerPresentationDurationInSeconds seconds.
if (!UIAccessibilityIsVoiceOverRunning()) {
NSTimeInterval timeInterval =
infobarCoordinator.highPriorityPresentation
? kInfobarBannerLongPresentationDurationInSeconds
: kInfobarBannerDefaultPresentationDurationInSeconds;
dispatch_time_t popTime =
dispatch_time(DISPATCH_TIME_NOW, timeInterval * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {
[infobarCoordinator dismissInfobarBannerAfterInteraction];
});
}
}
// Returns the InfobarCoordinator for |infobarType|. If there's more than one
......
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