Commit 4be9ed7e authored by Sebastien Lalancette's avatar Sebastien Lalancette Committed by Commit Bot

[iOS] Adding Share action to Most Visited Entry Context Menu

Bug: 1093302
Change-Id: I6789ba847d77283c7e4ca94046047b339e0bf918
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2348531
Commit-Queue: Sebastien Lalancette <seblalancette@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#797201}
parent 0a42a6d2
...@@ -14,8 +14,9 @@ enum class ActivityScenario { ...@@ -14,8 +14,9 @@ enum class ActivityScenario {
HistoryEntry = 2, HistoryEntry = 2,
ReadingListEntry = 3, ReadingListEntry = 3,
BookmarkEntry = 4, BookmarkEntry = 4,
MostVisitedEntry = 5,
// Highest enumerator. Recommended by Histogram metrics best practices. // Highest enumerator. Recommended by Histogram metrics best practices.
kMaxValue = BookmarkEntry kMaxValue = MostVisitedEntry
}; };
#endif // IOS_CHROME_BROWSER_UI_ACTIVITY_SERVICES_ACTIVITY_SCENARIO_H_ #endif // IOS_CHROME_BROWSER_UI_ACTIVITY_SERVICES_ACTIVITY_SCENARIO_H_
...@@ -26,6 +26,8 @@ const char kShareReadingListEntryActionsHistogram[] = ...@@ -26,6 +26,8 @@ const char kShareReadingListEntryActionsHistogram[] =
"Mobile.Share.ReadingListEntry.Actions"; "Mobile.Share.ReadingListEntry.Actions";
const char kShareBookmarkEntryActionsHistogram[] = const char kShareBookmarkEntryActionsHistogram[] =
"Mobile.Share.BookmarkEntry.Actions"; "Mobile.Share.BookmarkEntry.Actions";
const char kShareMostVisitedEntryActionsHistogram[] =
"Mobile.Share.MostVisitedEntry.Actions";
// Enum representing an aggregation of the |ActivityType| enum values in a way // Enum representing an aggregation of the |ActivityType| enum values in a way
// that is relevant for metric collection. Current values should not // that is relevant for metric collection. Current values should not
...@@ -143,6 +145,9 @@ void RecordActionForScenario(ShareActionType actionType, ...@@ -143,6 +145,9 @@ void RecordActionForScenario(ShareActionType actionType,
case ActivityScenario::BookmarkEntry: case ActivityScenario::BookmarkEntry:
histogramName = kShareBookmarkEntryActionsHistogram; histogramName = kShareBookmarkEntryActionsHistogram;
break; break;
case ActivityScenario::MostVisitedEntry:
histogramName = kShareMostVisitedEntryActionsHistogram;
break;
} }
base::UmaHistogramEnumeration(histogramName, actionType); base::UmaHistogramEnumeration(histogramName, actionType);
} }
......
...@@ -60,6 +60,7 @@ source_set("content_suggestions") { ...@@ -60,6 +60,7 @@ source_set("content_suggestions") {
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
"//ios/chrome/browser/tabs", "//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui:feature_flags", "//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/activity_services",
"//ios/chrome/browser/ui/alert_coordinator", "//ios/chrome/browser/ui/alert_coordinator",
"//ios/chrome/browser/ui/collection_view/cells", "//ios/chrome/browser/ui/collection_view/cells",
"//ios/chrome/browser/ui/commands", "//ios/chrome/browser/ui/commands",
...@@ -77,6 +78,7 @@ source_set("content_suggestions") { ...@@ -77,6 +78,7 @@ source_set("content_suggestions") {
"//ios/chrome/browser/ui/overscroll_actions", "//ios/chrome/browser/ui/overscroll_actions",
"//ios/chrome/browser/ui/reading_list", "//ios/chrome/browser/ui/reading_list",
"//ios/chrome/browser/ui/settings/utils:utils", "//ios/chrome/browser/ui/settings/utils:utils",
"//ios/chrome/browser/ui/sharing",
"//ios/chrome/browser/ui/toolbar/public", "//ios/chrome/browser/ui/toolbar/public",
"//ios/chrome/browser/ui/util", "//ios/chrome/browser/ui/util",
"//ios/chrome/browser/ui/util:multiwindow_util", "//ios/chrome/browser/ui/util:multiwindow_util",
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#import "ios/chrome/browser/signin/authentication_service.h" #import "ios/chrome/browser/signin/authentication_service.h"
#import "ios/chrome/browser/signin/authentication_service_factory.h" #import "ios/chrome/browser/signin/authentication_service_factory.h"
#include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h"
#import "ios/chrome/browser/ui/activity_services/activity_params.h"
#import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h" #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h"
#import "ios/chrome/browser/ui/commands/application_commands.h" #import "ios/chrome/browser/ui/commands/application_commands.h"
#import "ios/chrome/browser/ui/commands/browser_commands.h" #import "ios/chrome/browser/ui/commands/browser_commands.h"
...@@ -58,6 +59,7 @@ ...@@ -58,6 +59,7 @@
#import "ios/chrome/browser/ui/ntp/notification_promo_whats_new.h" #import "ios/chrome/browser/ui/ntp/notification_promo_whats_new.h"
#import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h" #import "ios/chrome/browser/ui/overscroll_actions/overscroll_actions_controller.h"
#import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
#import "ios/chrome/browser/ui/sharing/sharing_coordinator.h"
#import "ios/chrome/browser/ui/util/multi_window_support.h" #import "ios/chrome/browser/ui/util/multi_window_support.h"
#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h"
#import "ios/chrome/browser/url_loading/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
...@@ -109,6 +111,8 @@ ...@@ -109,6 +111,8 @@
@property(nonatomic) CGFloat discoverFeedHeight; @property(nonatomic) CGFloat discoverFeedHeight;
// Authentication Service for the user's signed-in state. // Authentication Service for the user's signed-in state.
@property(nonatomic, assign) AuthenticationService* authService; @property(nonatomic, assign) AuthenticationService* authService;
// Coordinator in charge of handling sharing use cases.
@property(nonatomic, strong) SharingCoordinator* sharingCoordinator;
@end @end
...@@ -294,6 +298,8 @@ ...@@ -294,6 +298,8 @@
self.NTPMediator = nil; self.NTPMediator = nil;
[self.contentSuggestionsMediator disconnect]; [self.contentSuggestionsMediator disconnect];
self.contentSuggestionsMediator = nil; self.contentSuggestionsMediator = nil;
[self.sharingCoordinator stop];
self.sharingCoordinator = nil;
self.headerController = nil; self.headerController = nil;
_visible = NO; _visible = NO;
} }
...@@ -532,7 +538,9 @@ ...@@ -532,7 +538,9 @@
#pragma mark - ContentSuggestionsMenuProvider #pragma mark - ContentSuggestionsMenuProvider
- (UIContextMenuConfiguration*)contextMenuConfigurationForItem: - (UIContextMenuConfiguration*)contextMenuConfigurationForItem:
(ContentSuggestionsMostVisitedItem*)item API_AVAILABLE(ios(13.0)) { (ContentSuggestionsMostVisitedItem*)item
fromView:(UIView*)view
API_AVAILABLE(ios(13.0)) {
__weak __typeof(self) weakSelf = self; __weak __typeof(self) weakSelf = self;
UIContextMenuActionProvider actionProvider = UIContextMenuActionProvider actionProvider =
...@@ -585,6 +593,12 @@ ...@@ -585,6 +593,12 @@
[menuElements addObject:[actionFactory actionToCopyURL:item.URL]]; [menuElements addObject:[actionFactory actionToCopyURL:item.URL]];
[menuElements addObject:[actionFactory actionToShareWithBlock:^{
[weakSelf shareURL:item.URL
title:item.title
fromView:view];
}]];
[menuElements addObject:[actionFactory actionToRemoveWithBlock:^{ [menuElements addObject:[actionFactory actionToRemoveWithBlock:^{
[weakSelf.NTPMediator removeMostVisited:item]; [weakSelf.NTPMediator removeMostVisited:item];
}]]; }]];
...@@ -620,4 +634,21 @@ ...@@ -620,4 +634,21 @@
return discoverFeed; return discoverFeed;
} }
// Triggers the URL sharing flow for the given |URL| and |title|, with the
// origin |view| representing the UI component for that URL.
- (void)shareURL:(const GURL&)URL
title:(NSString*)title
fromView:(UIView*)view {
ActivityParams* params =
[[ActivityParams alloc] initWithURL:URL
title:title
scenario:ActivityScenario::MostVisitedEntry];
self.sharingCoordinator =
[[SharingCoordinator alloc] initWithBaseViewController:self.viewController
browser:self.browser
params:params
originView:view];
[self.sharingCoordinator start];
}
@end @end
...@@ -14,7 +14,9 @@ ...@@ -14,7 +14,9 @@
// Creates a context menu configuration instance for the given |item|, which is // Creates a context menu configuration instance for the given |item|, which is
// represented on the UI by |view|. // represented on the UI by |view|.
- (UIContextMenuConfiguration*)contextMenuConfigurationForItem: - (UIContextMenuConfiguration*)contextMenuConfigurationForItem:
(ContentSuggestionsMostVisitedItem*)item API_AVAILABLE(ios(13.0)); (ContentSuggestionsMostVisitedItem*)item
fromView:(UIView*)view
API_AVAILABLE(ios(13.0));
@end @end
......
...@@ -496,7 +496,9 @@ NSString* const kContentSuggestionsMostVisitedAccessibilityIdentifierPrefix = ...@@ -496,7 +496,9 @@ NSString* const kContentSuggestionsMostVisitedAccessibilityIdentifierPrefix =
base::mac::ObjCCastStrict<ContentSuggestionsMostVisitedItem>(item); base::mac::ObjCCastStrict<ContentSuggestionsMostVisitedItem>(item);
return [self.menuProvider return [self.menuProvider
contextMenuConfigurationForItem:contentSuggestionsItem]; contextMenuConfigurationForItem:contentSuggestionsItem
fromView:[self.collectionView
cellForItemAtIndexPath:indexPath]];
} }
#pragma mark - UICollectionViewDataSource #pragma mark - UICollectionViewDataSource
......
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