From 952759a6c351a71eb1540a47699e7a69d46998f2 Mon Sep 17 00:00:00 2001 From: Mike Pinkerton Date: Fri, 23 Oct 2020 17:56:02 +0000 Subject: [PATCH] Add iPadOS pointer support to NTP tiles. Add pointer support to the mostVisited and shortcut buttons on the NTP. BUG=1139054 Change-Id: I9486aca3c27871312df0051149f8ed1e6f1dea22 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2476957 Auto-Submit: Mike Pinkerton Reviewed-by: Gauthier Ambard Commit-Queue: Mike Pinkerton Cr-Commit-Position: refs/heads/master@{#820328} --- ios/chrome/browser/ui/ntp_tile_views/BUILD.gn | 1 + .../browser/ui/ntp_tile_views/ntp_tile_view.h | 4 ++ .../ui/ntp_tile_views/ntp_tile_view.mm | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/ios/chrome/browser/ui/ntp_tile_views/BUILD.gn b/ios/chrome/browser/ui/ntp_tile_views/BUILD.gn index f5e179b65b4dd0..3b0f2d305f9740 100644 --- a/ios/chrome/browser/ui/ntp_tile_views/BUILD.gn +++ b/ios/chrome/browser/ui/ntp_tile_views/BUILD.gn @@ -22,6 +22,7 @@ source_set("ntp_tile_views") { "resources:ntp_readinglist_icon", "resources:ntp_recent_icon", "//base", + "//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui/util", "//ios/chrome/common/ui/colors", "//ios/chrome/common/ui/favicon", diff --git a/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.h b/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.h index 1ee715ff1b8f3b..25cf20baec638f 100644 --- a/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.h +++ b/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.h @@ -10,7 +10,11 @@ // A generic NTP tile view. Provides a title label and an image container on a // squircle-shaped background. Concrete subclasses of this are used to display // most visited tiles and shortcut tiles on NTP and other places. +#ifdef __IPHONE_13_4 +@interface NTPTileView : UIView +#else @interface NTPTileView : UIView +#endif // Container for the image view. Used in subclasses. @property(nonatomic, strong, readonly, nonnull) UIView* imageContainerView; diff --git a/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.mm b/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.mm index a25aa981fced2d..5d59143dc07f57 100644 --- a/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.mm +++ b/ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.mm @@ -4,6 +4,8 @@ #import "ios/chrome/browser/ui/ntp_tile_views/ntp_tile_view.h" +#include "base/feature_list.h" +#include "ios/chrome/browser/ui/ui_feature_flags.h" #import "ios/chrome/browser/ui/util/dynamic_type_util.h" #import "ios/chrome/common/ui/colors/UIColor+cr_semantic_colors.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -68,6 +70,15 @@ - (instancetype)initWithFrame:(CGRect)frame { @{ @"space" : @(kSpaceIconTitle) }); _imageBackgroundView = backgroundView; + +#ifdef __IPHONE_13_4 + if (@available(iOS 13.4, *)) { + if (base::FeatureList::IsEnabled(kPointerSupport)) { + [self addInteraction:[[UIPointerInteraction alloc] + initWithDelegate:self]]; + } + } +#endif } return self; } @@ -90,4 +101,30 @@ - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection { } } +#pragma mark - UIPointerInteractionDelegate + +#ifdef __IPHONE_13_4 + +- (UIPointerRegion*)pointerInteraction:(UIPointerInteraction*)interaction + regionForRequest:(UIPointerRegionRequest*)request + defaultRegion:(UIPointerRegion*)defaultRegion + API_AVAILABLE(ios(13.4)) { + return defaultRegion; +} + +- (UIPointerStyle*)pointerInteraction:(UIPointerInteraction*)interaction + styleForRegion:(UIPointerRegion*)region + API_AVAILABLE(ios(13.4)) { + UITargetedPreview* preview = + [[UITargetedPreview alloc] initWithView:_imageContainerView]; + UIPointerHighlightEffect* effect = + [UIPointerHighlightEffect effectWithPreview:preview]; + UIPointerShape* shape = + [UIPointerShape shapeWithRoundedRect:_imageContainerView.frame + cornerRadius:8.0]; + return [UIPointerStyle styleWithEffect:effect shape:shape]; +} + +#endif + @end