Commit 19446980 authored by Kyle Milka's avatar Kyle Milka Committed by Commit Bot

[LongScreenshots] Create LongScreenshotCoordinator

Subclass ScreenshotCoordinator to create LongScreenshotCoordinator. For
now this class only overrides captureScreenshot() to launch the bottom
bar after capture instead of directly launching the editor.

Bug: 1142520
Change-Id: I378f1809ed1cf9a74df2f028a6a6ca0d75a06d3e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2542924Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Reviewed-by: default avatarTanya Gupta <tgupta@chromium.org>
Reviewed-by: default avatarIlya Sherman <isherman@chromium.org>
Commit-Queue: Kyle Milka <kmilka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#829848}
parent cef76f64
...@@ -707,6 +707,7 @@ chrome_java_resources = [ ...@@ -707,6 +707,7 @@ chrome_java_resources = [
"java/res/drawable/logo_avatar_anonymous.xml", "java/res/drawable/logo_avatar_anonymous.xml",
"java/res/drawable/logo_partly_cloudy.xml", "java/res/drawable/logo_partly_cloudy.xml",
"java/res/drawable/logo_translate_round.xml", "java/res/drawable/logo_translate_round.xml",
"java/res/drawable/long_screenshot.xml",
"java/res/drawable/material_tooltip_background.xml", "java/res/drawable/material_tooltip_background.xml",
"java/res/drawable/mir_card.xml", "java/res/drawable/mir_card.xml",
"java/res/drawable/modern_toolbar_text_box_background_with_primary_color.xml", "java/res/drawable/modern_toolbar_text_box_background_with_primary_color.xml",
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M10.1,2L5.908,2C5.1304,2 4.5,2.6304 4.5,3.408L4.5,10L4.5,10"
android:strokeWidth="1.8"
android:fillColor="#00000000"
android:strokeColor="@color/default_icon_color"
android:strokeLineCap="square"/>
<path
android:pathData="M14.2,2L18.392,2C19.1696,2 19.8,2.6304 19.8,3.408L19.8,10L19.8,10"
android:strokeWidth="1.8"
android:fillColor="#00000000"
android:strokeColor="@color/default_icon_color"
android:strokeLineCap="square"/>
<path
android:pathData="M10.1,22L5.908,22C5.1304,22 4.5,21.3696 4.5,20.592L4.5,14L4.5,14"
android:strokeWidth="1.8"
android:fillColor="#00000000"
android:strokeColor="@color/default_icon_color"
android:strokeLineCap="square"/>
<path
android:pathData="M14.2,22L18.392,22C19.1696,22 19.8,21.3696 19.8,20.592L19.8,14L19.8,14"
android:strokeWidth="1.8"
android:fillColor="#00000000"
android:strokeColor="@color/default_icon_color"
android:strokeLineCap="square"/>
</vector>
// Copyright 2020 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.
package org.chromium.chrome.browser.share.long_screenshots;
import android.app.Activity;
import android.graphics.Bitmap;
import org.chromium.chrome.browser.share.screenshot.ScreenshotCoordinator;
import org.chromium.chrome.browser.share.share_sheet.ChromeOptionShareCallback;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.modules.image_editor.ImageEditorModuleProvider;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
/**
* Handles the long screenshot action in the Sharing Hub and launches the screenshot editor.
*/
public class LongScreenshotsCoordinator extends ScreenshotCoordinator {
/**
* Constructs a new ScreenshotCoordinator which may launch the editor, or a fallback.
*
* @param activity The parent activity.
* @param tab The Tab which contains the content to share.
* @param chromeOptionShareCallback An interface to share sheet APIs.
* @param sheetController The {@link BottomSheetController} for the current activity.
* @param imageEditorModuleProvider An interface to install and/or instantiate the image editor.
*/
public LongScreenshotsCoordinator(Activity activity, Tab tab,
ChromeOptionShareCallback chromeOptionShareCallback,
BottomSheetController sheetController,
ImageEditorModuleProvider imageEditorModuleProvider) {
super(activity, tab, chromeOptionShareCallback, sheetController, imageEditorModuleProvider);
}
/**
* Called after ShareSheetBottomSheetContent is closed. Calls the FDT service to
* generate a long screenshot, takes the user through the cropping flow, then
* launches the bottom bar.
*/
@Override
public void captureScreenshot() {
// TODO(crbug/1142520): Use service to capture from FDT, crop the image, assign to
// mScreenshot
mScreenshot = Bitmap.createBitmap(512, 1024, Bitmap.Config.ARGB_8888);
launchSharesheet();
}
}
...@@ -34,15 +34,15 @@ public class ScreenshotCoordinator { ...@@ -34,15 +34,15 @@ public class ScreenshotCoordinator {
private final ImageEditorModuleProvider mImageEditorModuleProvider; private final ImageEditorModuleProvider mImageEditorModuleProvider;
private EditorScreenshotSource mScreenshotSource; private EditorScreenshotSource mScreenshotSource;
private Bitmap mScreenshot; protected Bitmap mScreenshot;
/** /**
* Constructs a new ScreenshotCoordinator which may launch the editor, or a fallback. * Constructs a new ScreenshotCoordinator which may launch the editor, or a fallback.
* *
* @param activity The parent activity. * @param activity The parent activity.
* @param tab The Tab which contains the content to share. * @param tab The Tab which contains the content to share.
* @param screenshotSource The Source interface to use to take a screenshot.
* @param chromeOptionShareCallback An interface to share sheet APIs. * @param chromeOptionShareCallback An interface to share sheet APIs.
* @param sheetController The {@link BottomSheetController} for the current activity.
* @param imageEditorModuleProvider An interface to install and/or instantiate the image editor. * @param imageEditorModuleProvider An interface to install and/or instantiate the image editor.
*/ */
public ScreenshotCoordinator(Activity activity, Tab tab, public ScreenshotCoordinator(Activity activity, Tab tab,
...@@ -127,7 +127,7 @@ public class ScreenshotCoordinator { ...@@ -127,7 +127,7 @@ public class ScreenshotCoordinator {
/** /**
* Opens the screenshot sharesheet. * Opens the screenshot sharesheet.
*/ */
private void launchSharesheet() { protected void launchSharesheet() {
ScreenshotShareSheetDialogCoordinator shareSheet = ScreenshotShareSheetDialogCoordinator shareSheet =
new ScreenshotShareSheetDialogCoordinator(mActivity, mDialog, mScreenshot, mTab, new ScreenshotShareSheetDialogCoordinator(mActivity, mDialog, mScreenshot, mTab,
mChromeOptionShareCallback, this::retryInstallEditor); mChromeOptionShareCallback, this::retryInstallEditor);
...@@ -144,6 +144,10 @@ public class ScreenshotCoordinator { ...@@ -144,6 +144,10 @@ public class ScreenshotCoordinator {
// If the module does not exist, nothing to do. // If the module does not exist, nothing to do.
return; return;
} }
if (mImageEditorModuleProvider.isModuleInstalled()) {
launchEditor();
return;
}
installEditor(false, onSuccess); installEditor(false, onSuccess);
} }
......
...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.profiles.Profile; ...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.settings.SettingsLauncher;
import org.chromium.chrome.browser.share.ChromeShareExtras; import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator; import org.chromium.chrome.browser.share.link_to_text.LinkToTextCoordinator;
import org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsCoordinator;
import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator; import org.chromium.chrome.browser.share.qrcode.QrCodeCoordinator;
import org.chromium.chrome.browser.share.screenshot.ScreenshotCoordinator; import org.chromium.chrome.browser.share.screenshot.ScreenshotCoordinator;
import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfCoordinator; import org.chromium.chrome.browser.share.send_tab_to_self.SendTabToSelfCoordinator;
...@@ -216,6 +217,9 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -216,6 +217,9 @@ class ChromeProvidedSharingOptionsProvider {
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)) { if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_SCREENSHOT)) {
mOrderedFirstPartyOptions.add(createScreenshotFirstPartyOption()); mOrderedFirstPartyOptions.add(createScreenshotFirstPartyOption());
} }
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARE_LONG_SCREENSHOT)) {
mOrderedFirstPartyOptions.add(createLongScreenshotsFirstPartyOption());
}
mOrderedFirstPartyOptions.add(createCopyLinkFirstPartyOption()); mOrderedFirstPartyOptions.add(createCopyLinkFirstPartyOption());
if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)) { if (ChromeFeatureList.isEnabled(ChromeFeatureList.CHROME_SHARING_HUB_V15)) {
mOrderedFirstPartyOptions.add(createCopyImageFirstPartyOption()); mOrderedFirstPartyOptions.add(createCopyImageFirstPartyOption());
...@@ -273,6 +277,27 @@ class ChromeProvidedSharingOptionsProvider { ...@@ -273,6 +277,27 @@ class ChromeProvidedSharingOptionsProvider {
/*disableForMultiWindow=*/true); /*disableForMultiWindow=*/true);
} }
private FirstPartyOption createLongScreenshotsFirstPartyOption() {
PropertyModel propertyModel = ShareSheetPropertyModelBuilder.createPropertyModel(
AppCompatResources.getDrawable(mActivity, R.drawable.long_screenshot),
mActivity.getResources().getString(R.string.sharing_long_screenshot), (view) -> {
RecordUserAction.record("SharingHubAndroid.LongScreenshotSelected");
recordTimeToShare(mShareStartTime);
mScreenshotCoordinator = new LongScreenshotsCoordinator(mActivity,
mTabProvider.get(), mChromeOptionShareCallback, mBottomSheetController,
mImageEditorModuleProvider);
// Capture a screenshot once the bottom sheet is fully hidden. The
// observer will then remove itself.
mBottomSheetController.addObserver(mSheetObserver);
mBottomSheetController.hideContent(mBottomSheetContent, true);
});
return new FirstPartyOption(propertyModel,
Arrays.asList(ContentType.LINK_PAGE_VISIBLE, ContentType.TEXT,
ContentType.HIGHLIGHTED_TEXT, ContentType.IMAGE),
/*contentTypesToDisableFor=*/Collections.emptySet(),
/*disableForMultiWindow=*/true);
}
private FirstPartyOption createCopyLinkFirstPartyOption() { private FirstPartyOption createCopyLinkFirstPartyOption() {
return new FirstPartyOptionBuilder( return new FirstPartyOptionBuilder(
ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE) ContentType.LINK_PAGE_VISIBLE, ContentType.LINK_PAGE_NOT_VISIBLE)
......
...@@ -9,6 +9,7 @@ share_java_sources = [ ...@@ -9,6 +9,7 @@ share_java_sources = [
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/clipboard/ClipboardImageFileProvider.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/clipboard/ClipboardImageFileProvider.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextMetricsBridge.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/long_screenshots/LongScreenshotsCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QRCodeGenerationRequest.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeCoordinator.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeCoordinator.java",
"//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeDialog.java", "//chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/qrcode/QrCodeDialog.java",
......
...@@ -4133,6 +4133,10 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n ...@@ -4133,6 +4133,10 @@ Data from your Incognito session will only be cleared from Chrome when you <ph n
Screenshot Screenshot
</message> </message>
<message name="IDS_SHARING_LONG_SCREENSHOT" desc="Label for Long Screenshot button in the sharing hub.">
Long Screenshot
</message>
<message name="IDS_SHARING_HIGHLIGHTS" desc="Label for Link-to-text button in the sharing hub."> <message name="IDS_SHARING_HIGHLIGHTS" desc="Label for Link-to-text button in the sharing hub.">
Link to text Link to text
</message> </message>
......
bde0be0e4db2cd588629c99133e37d79430b440d
\ No newline at end of file
...@@ -21307,6 +21307,14 @@ should be able to be added at any place in this file. ...@@ -21307,6 +21307,14 @@ should be able to be added at any place in this file.
</description> </description>
</action> </action>
<action name="SharingHubAndroid.LongScreenshotSelected">
<owner>kmilka@chromium.org</owner>
<owner>src/components/send_tab_to_self/OWNERS</owner>
<description>
The &quot;Long Screenshot&quot; option was selected in the sharing hub.
</description>
</action>
<action name="SharingHubAndroid.MoreSelected"> <action name="SharingHubAndroid.MoreSelected">
<owner>kmilka@chromium.org</owner> <owner>kmilka@chromium.org</owner>
<owner>src/components/send_tab_to_self/OWNERS</owner> <owner>src/components/send_tab_to_self/OWNERS</owner>
......
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