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 {
HistoryEntry = 2,
ReadingListEntry = 3,
BookmarkEntry = 4,
MostVisitedEntry = 5,
// Highest enumerator. Recommended by Histogram metrics best practices.
kMaxValue = BookmarkEntry
kMaxValue = MostVisitedEntry
};
#endif // IOS_CHROME_BROWSER_UI_ACTIVITY_SERVICES_ACTIVITY_SCENARIO_H_
......@@ -26,6 +26,8 @@ const char kShareReadingListEntryActionsHistogram[] =
"Mobile.Share.ReadingListEntry.Actions";
const char kShareBookmarkEntryActionsHistogram[] =
"Mobile.Share.BookmarkEntry.Actions";
const char kShareMostVisitedEntryActionsHistogram[] =
"Mobile.Share.MostVisitedEntry.Actions";
// Enum representing an aggregation of the |ActivityType| enum values in a way
// that is relevant for metric collection. Current values should not
......@@ -143,6 +145,9 @@ void RecordActionForScenario(ShareActionType actionType,
case ActivityScenario::BookmarkEntry:
histogramName = kShareBookmarkEntryActionsHistogram;
break;
case ActivityScenario::MostVisitedEntry:
histogramName = kShareMostVisitedEntryActionsHistogram;
break;
}
base::UmaHistogramEnumeration(histogramName, actionType);
}
......
......@@ -60,6 +60,7 @@ source_set("content_suggestions") {
"//ios/chrome/browser/signin",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/ui:feature_flags",
"//ios/chrome/browser/ui/activity_services",
"//ios/chrome/browser/ui/alert_coordinator",
"//ios/chrome/browser/ui/collection_view/cells",
"//ios/chrome/browser/ui/commands",
......@@ -77,6 +78,7 @@ source_set("content_suggestions") {
"//ios/chrome/browser/ui/overscroll_actions",
"//ios/chrome/browser/ui/reading_list",
"//ios/chrome/browser/ui/settings/utils:utils",
"//ios/chrome/browser/ui/sharing",
"//ios/chrome/browser/ui/toolbar/public",
"//ios/chrome/browser/ui/util",
"//ios/chrome/browser/ui/util:multiwindow_util",
......
......@@ -29,6 +29,7 @@
#import "ios/chrome/browser/signin/authentication_service.h"
#import "ios/chrome/browser/signin/authentication_service_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/commands/application_commands.h"
#import "ios/chrome/browser/ui/commands/browser_commands.h"
......@@ -58,6 +59,7 @@
#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/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/uikit_ui_util.h"
#import "ios/chrome/browser/url_loading/url_loading_browser_agent.h"
......@@ -109,6 +111,8 @@
@property(nonatomic) CGFloat discoverFeedHeight;
// Authentication Service for the user's signed-in state.
@property(nonatomic, assign) AuthenticationService* authService;
// Coordinator in charge of handling sharing use cases.
@property(nonatomic, strong) SharingCoordinator* sharingCoordinator;
@end
......@@ -294,6 +298,8 @@
self.NTPMediator = nil;
[self.contentSuggestionsMediator disconnect];
self.contentSuggestionsMediator = nil;
[self.sharingCoordinator stop];
self.sharingCoordinator = nil;
self.headerController = nil;
_visible = NO;
}
......@@ -532,7 +538,9 @@
#pragma mark - ContentSuggestionsMenuProvider
- (UIContextMenuConfiguration*)contextMenuConfigurationForItem:
(ContentSuggestionsMostVisitedItem*)item API_AVAILABLE(ios(13.0)) {
(ContentSuggestionsMostVisitedItem*)item
fromView:(UIView*)view
API_AVAILABLE(ios(13.0)) {
__weak __typeof(self) weakSelf = self;
UIContextMenuActionProvider actionProvider =
......@@ -585,6 +593,12 @@
[menuElements addObject:[actionFactory actionToCopyURL:item.URL]];
[menuElements addObject:[actionFactory actionToShareWithBlock:^{
[weakSelf shareURL:item.URL
title:item.title
fromView:view];
}]];
[menuElements addObject:[actionFactory actionToRemoveWithBlock:^{
[weakSelf.NTPMediator removeMostVisited:item];
}]];
......@@ -620,4 +634,21 @@
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
......@@ -14,7 +14,9 @@
// Creates a context menu configuration instance for the given |item|, which is
// represented on the UI by |view|.
- (UIContextMenuConfiguration*)contextMenuConfigurationForItem:
(ContentSuggestionsMostVisitedItem*)item API_AVAILABLE(ios(13.0));
(ContentSuggestionsMostVisitedItem*)item
fromView:(UIView*)view
API_AVAILABLE(ios(13.0));
@end
......
......@@ -496,7 +496,9 @@ NSString* const kContentSuggestionsMostVisitedAccessibilityIdentifierPrefix =
base::mac::ObjCCastStrict<ContentSuggestionsMostVisitedItem>(item);
return [self.menuProvider
contextMenuConfigurationForItem:contentSuggestionsItem];
contextMenuConfigurationForItem:contentSuggestionsItem
fromView:[self.collectionView
cellForItemAtIndexPath:indexPath]];
}
#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