Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3748)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerAndroid.java

Issue 22566004: [rAc Android dialog] Stubs for Autofill dialog integration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Ted's suggestions. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerAndroid.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerAndroid.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3cd57d8216e2122ab29f8dbb72a4b3524539669
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogControllerAndroid.java
@@ -0,0 +1,190 @@
+// Copyright (c) 2013 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.autofill;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+import org.chromium.ui.WindowAndroid;
+
+/**
+ * Java-side AutofillDialog and AutofillDialogFactory interfaces, and
+ * JNI glue for C++ AutofillDialogControllerAndroid.
+ */
+@JNINamespace("autofill")
+public class AutofillDialogControllerAndroid {
+ private static AutofillDialogFactory mDialogFactory;
+
+ private int mNativeDelegate; // could be 0 after onDestroy().
+ private AutofillDialog mDialog;
+
+ /**
+ * An interface to the two possible continuations for the dialog.
+ * The dialog is expected to be dismissed when either of the calls is made.
+ */
+ public interface AutofillDialogDelegate {
+ /**
+ * Cancels the requestAutocomplete.
+ */
+ void dialogCancel();
+
+ /**
+ * Submits the data to the web-page and persists the last account/card/address choices.
+ * @param fullWallet Resulting billing/shipping information obtained from the user
+ * @param lastUsedChoiceIsAutofill Whether the last selected data source is Autofill
+ * @param lastUsedAccountName The last selected account name, or null
+ * @param guidLastUsedBilling GUID of the last selected Autofill billing address, or null
+ * @param guidLastUsedShipping GUID of the last selected Autofill shipping address, or null
+ * @param guidLastUsedCard GUID of the last selected Autofill credit card, or null
+ */
+ void dialogContinue(
+ AutofillDialogResult.ResultWallet fullWallet,
+ boolean lastUsedChoiceIsAutofill, String lastUsedAccountName,
+ String guidLastUsedBilling, String guidLastUsedShipping, String guidLastUsedCard);
+ }
+
+ /**
+ * An interface that exposes the necessary functionality for an Autofill dialog.
+ * Note that all information necessary to construct the dialog is passed to the factory.
+ */
+ public interface AutofillDialog {
+ /**
+ * Notifies the dialog that the C++ side is gone.
+ * The dialog needs to clear its reference to the no longer valid AutofillDialogDelegate.
+ */
+ void onDestroy();
+ }
+
+ /**
+ * An interface to the factory that creates Autofill dialogs.
+ */
+ public interface AutofillDialogFactory {
+ /**
+ * Creates the dialog.
+ * Reasonable attempts should be made to respect "initial choices",
+ * Initial choices don't have to be self-consistent or valid.
+ *
+ * @param delegate Continuations for the dialog
+ * @param windowAndroid Context in which the dialog should be shown
+ * @param requestFullBillingAddress Whether the full billing address is required
+ * @param requestShippingAddress Whether the shipping address is required
+ * @param requestPhoneNumbers Whether the phone numbers are required in addresses
+ * @param incognitoMode True if the dialog started from an incognito tab
+ * @param initialChoiceIsAutofill Whether the selected data source should be Autofill
+ * @param initialAccountName Account to be selected, or null
+ * @param initialBillingGuid GUID of the initial billing address selection in Autofill
+ * @param initialShippingGuid GUID of the initial shipping address selection in Autofill
+ * @param initialCardGuid GUID of the initial credit card selection in Autofill
+ * @param merchantDomain Scheme+origin for the originating web page, or null
+ * @return The Autofill dialog that would later call into the delegate, or null
+ */
+ AutofillDialog createDialog(
+ final AutofillDialogDelegate delegate,
+ final WindowAndroid windowAndroid,
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress,
+ final boolean requestPhoneNumbers,
+ final boolean incognitoMode,
+ final boolean initialChoiceIsAutofill, final String initialAccountName,
+ final String initialBillingGuid, final String initialShippingGuid,
+ final String initialCardGuid,
+ final String merchantDomain);
+ }
+
+ /**
+ * Sets the factory to be used.
+ * @param factory An instance of the AutofillDialogFactory that will handle requests.
+ */
+ public static void setDialogFactory(AutofillDialogFactory factory) {
+ mDialogFactory = factory;
+ }
+
+ private AutofillDialogControllerAndroid(
+ final int nativeAutofillDialogControllerAndroid,
+ final WindowAndroid windowAndroid,
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress,
+ final boolean requestPhoneNumbers,
+ final boolean incognitoMode,
+ final boolean initialChoiceIsAutofill, final String initialWalletAccountName,
+ final String initialBillingGuid, final String initialShippingGuid,
+ final String initialCardGuid,
+ final String merchantDomain) {
+ mNativeDelegate = nativeAutofillDialogControllerAndroid;
+
+ if (mDialogFactory == null) {
+ nativeDialogCancel(mNativeDelegate);
+ return;
+ }
+
+ AutofillDialogDelegate delegate = new AutofillDialogDelegate() {
+ @Override
+ public void dialogCancel() {
+ nativeDialogCancel(mNativeDelegate);
+ }
+
+ @Override
+ public void dialogContinue(
+ AutofillDialogResult.ResultWallet fullWallet,
+ boolean lastUsedChoiceIsAutofill, String lastUsedAccountName,
+ String guidLastUsedBilling, String guidLastUsedShipping,
+ String guidLastUsedCard) {
+ nativeDialogContinue(mNativeDelegate, fullWallet,
+ lastUsedChoiceIsAutofill, lastUsedAccountName,
+ guidLastUsedBilling, guidLastUsedShipping, guidLastUsedCard);
+ }
+ };
+
+ mDialog = mDialogFactory.createDialog(
+ delegate,
+ windowAndroid,
+ requestFullBillingAddress, requestShippingAddress,
+ requestPhoneNumbers,
+ incognitoMode,
+ initialChoiceIsAutofill, initialWalletAccountName,
+ initialBillingGuid, initialShippingGuid, initialCardGuid,
+ merchantDomain);
+ if (mDialog == null) {
+ nativeDialogCancel(mNativeDelegate);
+ return;
+ }
+ }
+
+ @CalledByNative
+ private static AutofillDialogControllerAndroid create(
+ final int nativeAutofillDialogControllerAndroid,
+ final WindowAndroid windowAndroid,
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress,
+ final boolean requestPhoneNumbers,
+ final boolean incognitoMode,
+ final boolean initialChoiceIsAutofill, final String initialWalletAccountName,
+ final String initialBillingGuid, final String initialShippingGuid,
+ final String initialCreditCardGuid,
+ final String merchantDomain) {
+ return new AutofillDialogControllerAndroid(
+ nativeAutofillDialogControllerAndroid, windowAndroid,
+ requestFullBillingAddress, requestShippingAddress, requestPhoneNumbers,
+ incognitoMode,
+ initialChoiceIsAutofill, initialWalletAccountName,
+ initialBillingGuid, initialShippingGuid,
+ initialCreditCardGuid,
+ merchantDomain);
+ }
+
+ @CalledByNative
+ private void onDestroy() {
+ if (mNativeDelegate == 0) return;
+
+ if (mDialog != null) mDialog.onDestroy();
+
+ mDialog = null;
+ mNativeDelegate = 0;
+ }
+
+ // Calls from Java to C++ AutofillDialogControllerAndroid:
+
+ private native void nativeDialogCancel(int nativeAutofillDialogControllerAndroid);
+ private native void nativeDialogContinue(int nativeAutofillDialogControllerAndroid,
+ Object fullWallet,
+ boolean lastUsedChoiceIsAutofill, String lastUsedAccountName,
+ String guidLastUsedBilling, String guidLastUsedShipping, String guidLastUsedCard);
+}
« no previous file with comments | « build/common.gypi ('k') | chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogResult.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698