| Index: ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_view_controller.mm
|
| diff --git a/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_view_controller.mm b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_view_controller.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6cda5ab2022f65e730730d84e086564876cf3c1a
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_view_controller.mm
|
| @@ -0,0 +1,139 @@
|
| +// Copyright 2014 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/ntp/recent_tabs/recent_tabs_panel_view_controller.h"
|
| +
|
| +#import "base/mac/scoped_nsobject.h"
|
| +#import "ios/chrome/browser/ui/ntp/recent_tabs/recent_tabs_panel_controller.h"
|
| +#import "ios/chrome/browser/ui/ntp/recent_tabs/views/panel_bar_view.h"
|
| +#import "ios/chrome/browser/ui/uikit_ui_util.h"
|
| +#include "ios/chrome/grit/ios_theme_resources.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/base/l10n/l10n_util_mac.h"
|
| +#include "ui/base/resource/resource_bundle.h"
|
| +
|
| +// A UIViewController that forces the status bar to be visible.
|
| +@interface RecentTabsWrapperViewController : UIViewController
|
| +@end
|
| +
|
| +@implementation RecentTabsWrapperViewController
|
| +
|
| +- (BOOL)prefersStatusBarHidden {
|
| + return NO;
|
| +}
|
| +
|
| +@end
|
| +
|
| +@implementation RecentTabsPanelViewController {
|
| + base::scoped_nsobject<RecentTabsPanelController> _recentTabsController;
|
| + base::scoped_nsobject<PanelBarView> _panelBarView;
|
| +}
|
| +
|
| ++ (UIViewController*)controllerToPresentForBrowserState:
|
| + (ios::ChromeBrowserState*)browserState
|
| + loader:(id<UrlLoader>)loader {
|
| + UIViewController* controller =
|
| + [[[RecentTabsWrapperViewController alloc] init] autorelease];
|
| + RecentTabsPanelViewController* rtpvc = [[[RecentTabsPanelViewController alloc]
|
| + initWithLoader:loader
|
| + browserState:browserState] autorelease];
|
| + [controller addChildViewController:rtpvc];
|
| +
|
| + PanelBarView* panelBarView = [[[PanelBarView alloc] init] autorelease];
|
| + rtpvc->_panelBarView.reset([panelBarView retain]);
|
| + [panelBarView setCloseTarget:rtpvc action:@selector(didFinish)];
|
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| + gfx::Image shadowImage = rb.GetNativeImageNamed(IDR_IOS_TOOLBAR_SHADOW);
|
| + base::scoped_nsobject<UIImageView> shadow(
|
| + [[UIImageView alloc] initWithImage:shadowImage.ToUIImage()]);
|
| +
|
| + [panelBarView setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| + [rtpvc.view setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| + [shadow setTranslatesAutoresizingMaskIntoConstraints:NO];
|
| +
|
| + [controller.view addSubview:panelBarView];
|
| + [controller.view addSubview:rtpvc.view];
|
| + [controller.view addSubview:shadow];
|
| +
|
| + NSDictionary* viewsDictionary =
|
| + @{ @"bar" : panelBarView,
|
| + @"table" : rtpvc.view,
|
| + @"shadow" : shadow };
|
| + // clang-format off
|
| + NSArray* constraints = @[
|
| + @"V:|-0-[bar]-0-[table]-0-|",
|
| + @"V:[bar]-0-[shadow]",
|
| + @"H:|-0-[bar]-0-|",
|
| + @"H:|-0-[table]-0-|",
|
| + @"H:|-0-[shadow]-0-|"
|
| + ];
|
| + // clang-format on
|
| + ApplyVisualConstraints(constraints, viewsDictionary, controller.view);
|
| + return controller;
|
| +}
|
| +
|
| +- (void)dealloc {
|
| + [_recentTabsController dismissKeyboard];
|
| + [_recentTabsController dismissModals];
|
| + [super dealloc];
|
| +}
|
| +
|
| +- (instancetype)initWithLoader:(id<UrlLoader>)loader
|
| + browserState:(ios::ChromeBrowserState*)browserState {
|
| + self = [super initWithNibName:nil bundle:nil];
|
| + if (self) {
|
| + _recentTabsController.reset([[RecentTabsPanelController alloc]
|
| + initWithLoader:loader
|
| + browserState:browserState]);
|
| + if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
|
| + self.edgesForExtendedLayout = UIRectEdgeNone;
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (instancetype)initWithNibName:(NSString*)nibNameOrNil
|
| + bundle:(NSBundle*)nibBundleOrNil {
|
| + NOTREACHED();
|
| + return nil;
|
| +}
|
| +
|
| +- (instancetype)initWithCoder:(NSCoder*)aDecoder {
|
| + NOTREACHED();
|
| + return nil;
|
| +}
|
| +
|
| +- (void)viewDidLoad {
|
| + [super viewDidLoad];
|
| + CGRect frame = self.view.bounds;
|
| + [_recentTabsController view].frame = frame;
|
| + [self.view addSubview:[_recentTabsController view]];
|
| +}
|
| +
|
| +- (void)viewWillTransitionToSize:(CGSize)size
|
| + withTransitionCoordinator:
|
| + (id<UIViewControllerTransitionCoordinator>)coordinator {
|
| + [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
| + [_panelBarView setNeedsUpdateConstraints];
|
| +}
|
| +
|
| +- (BOOL)prefersStatusBarHidden {
|
| + return NO;
|
| +}
|
| +
|
| +#pragma mark Accessibility
|
| +
|
| +- (BOOL)accessibilityPerformEscape {
|
| + [self didFinish];
|
| + return YES;
|
| +}
|
| +
|
| +#pragma mark Actions
|
| +
|
| +- (void)didFinish {
|
| + [self dismissViewControllerAnimated:YES
|
| + completion:^{
|
| + }];
|
| +}
|
| +
|
| +@end
|
|
|