Index: chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogTabManagerDelegateAndroid.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogTabManagerDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogTabManagerDelegateAndroid.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a8668868c7b72be564104b9141e71c68400cbdc2 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/autofill/AutofillDialogTabManagerDelegateAndroid.java |
@@ -0,0 +1,138 @@ |
+// 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 android.app.Activity; |
+import android.content.Context; |
+import android.util.Log; |
+ |
+import org.chromium.base.CalledByNative; |
+import org.chromium.base.JNINamespace; |
+import org.chromium.ui.WindowAndroid; |
+ |
+ |
+/** |
+* JNI call glue for AutofillDialog C++ and Java objects. |
+*/ |
+@JNINamespace("autofill") |
+public class AutofillDialogTabManagerDelegateAndroid { |
+ private static final String TAG = "AutofillDialogTabManagerDelegateAndroid"; |
+ private static AutofillDialogFactory mDialogFactory; |
+ private int mNativeDelegate; // could be 0 after onDestroy(). |
+ private AutofillDialog mDialog; |
+ |
+ public interface AutofillDialogDelegate { |
+ void dialogCancel(); |
+ void dialogContinue( |
+ AutofillDialogResult.ResultWallet fullWallet, |
+ boolean lastUsedChoiceIsAutofill, String lastUsedAccountName, |
+ String guidLastUsedBilling, String guidLastUsedShipping, String guidLastUsedCard); |
+ } |
+ |
+ public interface AutofillDialog { |
+ void onDestroy(); |
+ } |
+ |
+ public interface AutofillDialogFactory { |
+ AutofillDialog createDialog( |
+ final AutofillDialogDelegate delegate, |
+ final WindowAndroid windowAndroid, |
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress, |
+ final boolean requestPhoneNumbers, |
+ final boolean initialChoiceIsAutofill, final String initialWalletAccountName, |
+ final String initialBillingGuid, final String initialShippingGuid, |
+ final String initialCardGuid, |
+ final String merchantDomain); |
+ } |
+ |
+ public static void setDialogFactory(AutofillDialogFactory factory) { |
+ mDialogFactory = factory; |
+ } |
+ |
+ public AutofillDialogTabManagerDelegateAndroid( |
+ final int nativeAutofillDialogTabManagerDelegateAndroid, |
+ final WindowAndroid windowAndroid, |
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress, |
+ final boolean requestPhoneNumbers, |
+ final boolean initialChoiceIsAutofill, final String initialWalletAccountName, |
+ final String initialBillingGuid, final String initialShippingGuid, |
+ final String initialCardGuid, |
+ final String merchantDomain) { |
+ mNativeDelegate = nativeAutofillDialogTabManagerDelegateAndroid; |
+ |
+ if (mDialogFactory == null) { |
+ Log.i(TAG, "No AutofillDialog factory is set"); |
+ nativeDialogCancel(mNativeDelegate); |
+ return; |
+ } |
+ |
+ mDialog = mDialogFactory.createDialog( |
+ 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); |
+ } |
+ }, |
+ windowAndroid, |
+ requestFullBillingAddress, requestShippingAddress, |
+ requestPhoneNumbers, |
+ initialChoiceIsAutofill, initialWalletAccountName, |
+ initialBillingGuid, initialShippingGuid, initialCardGuid, |
+ merchantDomain); |
+ if (mDialog == null) { |
+ Log.i(TAG, "Autofill dialog couldn't be created"); |
+ nativeDialogCancel(mNativeDelegate); |
+ return; |
+ } |
+ } |
+ |
+ @CalledByNative |
+ private static AutofillDialogTabManagerDelegateAndroid create( |
+ final int nativeAutofillDialogTabManagerDelegateAndroid, |
+ final WindowAndroid windowAndroid, |
+ final boolean requestFullBillingAddress, final boolean requestShippingAddress, |
+ final boolean requestPhoneNumbers, |
+ final boolean initialChoiceIsAutofill, final String initialWalletAccountName, |
+ final String initialBillingGuid, final String initialShippingGuid, |
+ final String initialCreditCardGuid, |
+ final String merchantDomain) { |
+ return new AutofillDialogTabManagerDelegateAndroid( |
+ nativeAutofillDialogTabManagerDelegateAndroid, windowAndroid, |
+ requestFullBillingAddress, requestShippingAddress, requestPhoneNumbers, |
+ 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++ AutofillDialogTabManagerDelegateAndroid. |
+ |
+ private native void nativeDialogCancel(int nativeAutofillDialogTabManagerDelegateAndroid); |
+ private native void nativeDialogContinue(int nativeAutofillDialogTabManagerDelegateAndroid, |
+ Object fullWallet, |
+ boolean lastUsedChoiceIsAutofill, String lastUsedAccountName, |
+ String guidLastUsedBilling, String guidLastUsedShipping, String guidLastUsedCard); |
+} |