Commit 2a9f790b authored by Sophey Dong's avatar Sophey Dong Committed by Commit Bot

Pass in URL from the Sharing Hub to generate the QRCode.

Also fix the issue where the QR Code was not being loaded after revoking permissions.

Bug: 1079467, 1083351, 1099291
Change-Id: Ia5b61a461e0321e46631119c22a15ef851d8ddd5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2265248Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Reviewed-by: default avatarGayane Petrosyan <gayane@chromium.org>
Reviewed-by: default avatarTanya Gupta <tgupta@chromium.org>
Commit-Queue: Sophey Dong <sophey@chromium.org>
Cr-Commit-Position: refs/heads/master@{#784342}
parent 682cf51f
......@@ -6,6 +6,7 @@ include_rules = [
"+chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java",
"+chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java",
"+chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java",
"+chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java",
"+chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java",
"+chrome/android/java/src/org/chromium/chrome/browser/modules/ModuleInstallUi.java",
"+chrome/android/java/src/org/chromium/chrome/browser/notifications/ChromeNotificationBuilder.java",
......
......@@ -14,8 +14,8 @@ public class QrCodeCoordinator {
private final QrCodeDialog mDialog;
private final FragmentManager mFragmentManager;
public QrCodeCoordinator(Activity activity) {
mDialog = new QrCodeDialog();
public QrCodeCoordinator(Activity activity, String url) {
mDialog = QrCodeDialog.newInstance(url);
mFragmentManager = activity.getFragmentManager();
}
......
......@@ -26,14 +26,21 @@ import java.util.ArrayList;
* QrCodeDialog is the main view for QR code sharing and scanning.
*/
public class QrCodeDialog extends DialogFragment {
// Used to pass the URL in the bundle.
public static String URL_KEY = "url_key";
private ArrayList<QrCodeDialogTab> mTabs;
private TabLayoutPageListener mTabLayoutPageListener;
/**
* The QrCodeDialog constructor.
* Create a new instance of {@link QrCodeDialog} and set the URL.
*/
public QrCodeDialog() {
mTabs = new ArrayList<QrCodeDialogTab>();
static QrCodeDialog newInstance(String url) {
QrCodeDialog qrCodeDialog = new QrCodeDialog();
Bundle args = new Bundle();
args.putString(URL_KEY, url);
qrCodeDialog.setArguments(args);
return qrCodeDialog;
}
@Override
......@@ -50,6 +57,7 @@ public class QrCodeDialog extends DialogFragment {
super.onResume();
mTabLayoutPageListener.resumeSelectedTab();
}
@Override
public void onPause() {
super.onPause();
......@@ -66,10 +74,9 @@ public class QrCodeDialog extends DialogFragment {
}
private View getDialogView() {
View dialogView = (View) getActivity().getLayoutInflater().inflate(
View dialogView = getActivity().getLayoutInflater().inflate(
org.chromium.chrome.browser.share.R.layout.qrcode_dialog, null);
ChromeImageButton closeButton =
(ChromeImageButton) dialogView.findViewById(R.id.close_button);
ChromeImageButton closeButton = dialogView.findViewById(R.id.close_button);
closeButton.setOnClickListener(v -> dismiss());
// Setup page adapter and tab layout.
......@@ -94,10 +101,11 @@ public class QrCodeDialog extends DialogFragment {
private void initTabs() {
Context context = getActivity();
QrCodeShareCoordinator shareCoordinator =
new QrCodeShareCoordinator(context, this::dismiss);
QrCodeShareCoordinator shareCoordinator = new QrCodeShareCoordinator(
context, this::dismiss, getArguments().getString(URL_KEY));
QrCodeScanCoordinator scanCoordinator = new QrCodeScanCoordinator(context, this::dismiss);
mTabs = new ArrayList<>();
mTabs.add(shareCoordinator);
mTabs.add(scanCoordinator);
}
......
......@@ -18,11 +18,10 @@ import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
public class QrCodeShareCoordinator implements QrCodeDialogTab {
private final QrCodeShareView mShareView;
public QrCodeShareCoordinator(Context context, Runnable closeDialog) {
public QrCodeShareCoordinator(Context context, Runnable closeDialog, String url) {
PropertyModel shareViewModel = new PropertyModel(QrCodeShareViewProperties.ALL_KEYS);
QrCodeShareMediator shareViewMediator =
new QrCodeShareMediator(context, shareViewModel, closeDialog);
new QrCodeShareMediator(context, shareViewModel, closeDialog, url);
mShareView = new QrCodeShareView(context, shareViewMediator::downloadQrCode);
PropertyModelChangeProcessor.create(
shareViewModel, mShareView, new QrCodeShareViewBinder());
......
......@@ -15,10 +15,9 @@ import android.view.View;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
import org.chromium.chrome.browser.share.BitmapDownloadRequest;
import org.chromium.chrome.browser.share.qrcode.QRCodeGenerationRequest;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.ui.modelutil.PropertyModel;
/**
......@@ -40,20 +39,17 @@ class QrCodeShareMediator {
* The QrCodeScanMediator constructor.
* @param context The context to use.
* @param propertyModel The property modelto use to communicate with views.
* @param closeDialog The {@link Runnable} to close the dialog.
* @param url The url to create the QRCode.
*/
QrCodeShareMediator(Context context, PropertyModel propertyModel, Runnable closeDialog) {
QrCodeShareMediator(
Context context, PropertyModel propertyModel, Runnable closeDialog, String url) {
mContext = context;
mPropertyModel = propertyModel;
mCloseDialog = closeDialog;
// TODO(crbug.com/1083351): Get URL from Sharing Hub.
if (context instanceof ChromeActivity) {
Tab tab = ((ChromeActivity) context).getActivityTabProvider().get();
if (tab != null) {
mUrl = tab.getUrl().getSpec();
refreshQrCode(mUrl);
}
}
mUrl = url;
ChromeBrowserInitializer.getInstance().runNowOrAfterFullBrowserStarted(
() -> refreshQrCode(mUrl));
}
/**
......
......@@ -271,7 +271,7 @@ class ChromeProvidedSharingOptionsProvider {
"Sharing.SharingHubAndroid.TimeToShare",
System.currentTimeMillis() - mShareStartTime);
mBottomSheetController.hideContent(mBottomSheetContent, true);
QrCodeCoordinator qrCodeCoordinator = new QrCodeCoordinator(mActivity);
QrCodeCoordinator qrCodeCoordinator = new QrCodeCoordinator(mActivity, mUrl);
qrCodeCoordinator.show();
},
/*isFirstParty=*/true);
......
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