Commit 2b751bd7 authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

JNI refactor: @NativeMethods conversion (//chrome/android/features).

To create this change:
  * cd chrome/android/features
  * base/android/jni_generator/jni_refactorer.py -R --nonstatic
  * base/android/jni_generator/jni_refactorer.py -R
  * Change the native side of VrShellDelegateJni#recordVrStartAction
    to not pass the Java object

Bug: 929661
Change-Id: I1d2c57e0f7a30a8b7e50e9e3ce905172cbb761cb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1749737
Commit-Queue: Eric Stevenson <estevenson@chromium.org>
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarTibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Auto-Submit: Eric Stevenson <estevenson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#687674}
parent f18f41a5
......@@ -30,6 +30,7 @@ android_library("java") {
deps = [
":java_resources",
"//base:base_java",
"//base:jni_java",
"//chrome/android:chrome_java",
"//chrome/android:chrome_public_java",
"//chrome/android/public/profiles:java",
......@@ -130,6 +131,7 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/autofill_assistant/payment/AssistantVerticalExpander.java",
"java/src/org/chromium/chrome/browser/autofill_assistant/payment/AssistantVerticalExpanderAccordion.java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
generate_jni("jni_headers") {
......@@ -171,9 +173,11 @@ android_library("autofill_assistant_java_test_support") {
deps = [
":java",
":test_support_jni_headers",
"//base:jni_java",
"//components/autofill_assistant/browser:proto_java",
"//third_party/android_deps:com_google_protobuf_protobuf_lite_java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
android_library("test_java") {
......
......@@ -14,6 +14,7 @@ import org.chromium.base.Callback;
import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.OAuth2TokenService;
import org.chromium.content_public.browser.WebContents;
......@@ -68,7 +69,7 @@ class AutofillAssistantClient {
/** Returns the client for the given web contents, creating it if necessary. */
public static AutofillAssistantClient fromWebContents(WebContents webContents) {
return nativeFromWebContents(webContents);
return AutofillAssistantClientJni.get().fromWebContents(webContents);
}
private AutofillAssistantClient(long nativeClientAndroid) {
......@@ -105,7 +106,8 @@ class AutofillAssistantClient {
checkNativeClientIsAliveOrThrow();
chooseAccountAsyncIfNecessary(parameters.get(PARAMETER_USER_EMAIL), intentExtras);
return nativeStart(mNativeClientAndroid, initialUrl, experimentIds,
return AutofillAssistantClientJni.get().start(mNativeClientAndroid,
AutofillAssistantClient.this, initialUrl, experimentIds,
parameters.keySet().toArray(new String[parameters.size()]),
parameters.values().toArray(new String[parameters.size()]), onboardingCoordinator,
AutofillAssistantServiceInjector.getServiceToInject());
......@@ -117,7 +119,8 @@ class AutofillAssistantClient {
public void destroyUi() {
if (mNativeClientAndroid == 0) return;
nativeDestroyUI(mNativeClientAndroid);
AutofillAssistantClientJni.get().destroyUI(
mNativeClientAndroid, AutofillAssistantClient.this);
}
/**
......@@ -130,7 +133,8 @@ class AutofillAssistantClient {
public void transferUiTo(WebContents otherWebContents) {
if (mNativeClientAndroid == 0) return;
nativeTransferUITo(mNativeClientAndroid, otherWebContents);
AutofillAssistantClientJni.get().transferUITo(
mNativeClientAndroid, AutofillAssistantClient.this, otherWebContents);
}
/** Lists available direct actions. */
......@@ -145,7 +149,8 @@ class AutofillAssistantClient {
// The native side calls sendDirectActionList() on the callback once the controller has
// results.
nativeListDirectActions(mNativeClientAndroid, experimentIds,
AutofillAssistantClientJni.get().listDirectActions(mNativeClientAndroid,
AutofillAssistantClient.this, experimentIds,
arguments.keySet().toArray(new String[arguments.size()]),
arguments.values().toArray(new String[arguments.size()]), callback);
}
......@@ -168,7 +173,8 @@ class AutofillAssistantClient {
// Note that only listDirectActions can start AA, so only it needs
// chooseAccountAsyncIfNecessary.
return nativePerformDirectAction(mNativeClientAndroid, actionId, experimentIds,
return AutofillAssistantClientJni.get().performDirectAction(mNativeClientAndroid,
AutofillAssistantClient.this, actionId, experimentIds,
arguments.keySet().toArray(new String[arguments.size()]),
arguments.values().toArray(new String[arguments.size()]), onboardingCoordinator);
}
......@@ -190,8 +196,9 @@ class AutofillAssistantClient {
onAccountChosen(accounts.get(0));
return;
}
Account signedIn =
findAccountByName(accounts, nativeGetPrimaryAccountName(mNativeClientAndroid));
Account signedIn = findAccountByName(accounts,
AutofillAssistantClientJni.get().getPrimaryAccountName(
mNativeClientAndroid, AutofillAssistantClient.this));
if (signedIn != null) {
// TODO(crbug.com/806868): Compare against account name from extras and complain if
// they don't match.
......@@ -253,7 +260,9 @@ class AutofillAssistantClient {
return;
}
if (mAccount == null) {
if (mNativeClientAndroid != 0) nativeOnAccessToken(mNativeClientAndroid, true, "");
if (mNativeClientAndroid != 0)
AutofillAssistantClientJni.get().onAccessToken(
mNativeClientAndroid, AutofillAssistantClient.this, true, "");
return;
}
......@@ -262,14 +271,16 @@ class AutofillAssistantClient {
@Override
public void onGetTokenSuccess(String token) {
if (mNativeClientAndroid != 0) {
nativeOnAccessToken(mNativeClientAndroid, true, token);
AutofillAssistantClientJni.get().onAccessToken(mNativeClientAndroid,
AutofillAssistantClient.this, true, token);
}
}
@Override
public void onGetTokenFailure(boolean isTransientError) {
if (!isTransientError && mNativeClientAndroid != 0) {
nativeOnAccessToken(mNativeClientAndroid, false, "");
AutofillAssistantClientJni.get().onAccessToken(
mNativeClientAndroid, AutofillAssistantClient.this, false, "");
}
}
});
......@@ -324,18 +335,24 @@ class AutofillAssistantClient {
mNativeClientAndroid = 0;
}
private static native AutofillAssistantClient nativeFromWebContents(WebContents webContents);
private native boolean nativeStart(long nativeClientAndroid, String initialUrl,
String experimentIds, String[] parameterNames, String[] parameterValues,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator, long nativeService);
private native void nativeOnAccessToken(
long nativeClientAndroid, boolean success, String accessToken);
private native String nativeGetPrimaryAccountName(long nativeClientAndroid);
private native void nativeDestroyUI(long nativeClientAndroid);
private native void nativeTransferUITo(long nativeClientAndroid, Object otherWebContents);
private native void nativeListDirectActions(long nativeClientAndroid, String experimentIds,
String[] argumentNames, String[] argumentValues, Object callback);
private native boolean nativePerformDirectAction(long nativeClientAndroid, String actionId,
String experimentId, String[] argumentNames, String[] argumentValues,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator);
@NativeMethods
interface Natives {
AutofillAssistantClient fromWebContents(WebContents webContents);
boolean start(long nativeClientAndroid, AutofillAssistantClient caller, String initialUrl,
String experimentIds, String[] parameterNames, String[] parameterValues,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator, long nativeService);
void onAccessToken(long nativeClientAndroid, AutofillAssistantClient caller,
boolean success, String accessToken);
String getPrimaryAccountName(long nativeClientAndroid, AutofillAssistantClient caller);
void destroyUI(long nativeClientAndroid, AutofillAssistantClient caller);
void transferUITo(
long nativeClientAndroid, AutofillAssistantClient caller, Object otherWebContents);
void listDirectActions(long nativeClientAndroid, AutofillAssistantClient caller,
String experimentIds, String[] argumentNames, String[] argumentValues,
Object callback);
boolean performDirectAction(long nativeClientAndroid, AutofillAssistantClient caller,
String actionId, String experimentId, String[] argumentNames,
String[] argumentValues,
@Nullable AssistantOnboardingCoordinator onboardingCoordinator);
}
}
......@@ -8,6 +8,7 @@ import android.support.annotation.Nullable;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.base.task.PostTask;
import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.ActivityTabProvider;
......@@ -314,38 +315,62 @@ class AutofillAssistantUiController {
// Native methods.
private void safeSnackbarResult(boolean undo) {
if (mNativeUiController != 0) nativeSnackbarResult(mNativeUiController, undo);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().snackbarResult(
mNativeUiController, AutofillAssistantUiController.this, undo);
}
private native void nativeSnackbarResult(long nativeUiControllerAndroid, boolean undo);
private void safeNativeStop(@DropOutReason int reason) {
if (mNativeUiController != 0) nativeStop(mNativeUiController, reason);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().stop(
mNativeUiController, AutofillAssistantUiController.this, reason);
}
private native void nativeStop(long nativeUiControllerAndroid, @DropOutReason int reason);
private void safeNativeOnFatalError(String message, @DropOutReason int reason) {
if (mNativeUiController != 0) nativeOnFatalError(mNativeUiController, message, reason);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().onFatalError(
mNativeUiController, AutofillAssistantUiController.this, message, reason);
}
private native void nativeOnFatalError(
long nativeUiControllerAndroid, String message, @DropOutReason int reason);
private void safeNativeOnUserActionSelected(int index) {
if (mNativeUiController != 0) nativeOnUserActionSelected(mNativeUiController, index);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().onUserActionSelected(
mNativeUiController, AutofillAssistantUiController.this, index);
}
private native void nativeOnUserActionSelected(long nativeUiControllerAndroid, int index);
private void safeNativeOnCancelButtonClicked(int index) {
if (mNativeUiController != 0) nativeOnCancelButtonClicked(mNativeUiController, index);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().onCancelButtonClicked(
mNativeUiController, AutofillAssistantUiController.this, index);
}
private native void nativeOnCancelButtonClicked(long nativeUiControllerAndroid, int index);
private void safeNativeOnCloseButtonClicked() {
if (mNativeUiController != 0) nativeOnCloseButtonClicked(mNativeUiController);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().onCloseButtonClicked(
mNativeUiController, AutofillAssistantUiController.this);
}
private native void nativeOnCloseButtonClicked(long nativeUiControllerAndroid);
private void safeNativeSetVisible(boolean visible) {
if (mNativeUiController != 0) nativeSetVisible(mNativeUiController, visible);
if (mNativeUiController != 0)
AutofillAssistantUiControllerJni.get().setVisible(
mNativeUiController, AutofillAssistantUiController.this, visible);
}
@NativeMethods
interface Natives {
void snackbarResult(
long nativeUiControllerAndroid, AutofillAssistantUiController caller, boolean undo);
void stop(long nativeUiControllerAndroid, AutofillAssistantUiController caller,
@DropOutReason int reason);
void onFatalError(long nativeUiControllerAndroid, AutofillAssistantUiController caller,
String message, @DropOutReason int reason);
void onUserActionSelected(
long nativeUiControllerAndroid, AutofillAssistantUiController caller, int index);
void onCancelButtonClicked(
long nativeUiControllerAndroid, AutofillAssistantUiController caller, int index);
void onCloseButtonClicked(
long nativeUiControllerAndroid, AutofillAssistantUiController caller);
void setVisible(long nativeUiControllerAndroid, AutofillAssistantUiController caller,
boolean visible);
}
private native void nativeSetVisible(long nativeUiControllerAndroid, boolean visible);
}
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.autofill_assistant.form;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/** Delegate for the form UI. */
@JNINamespace("autofill_assistant")
......@@ -23,13 +24,14 @@ class AssistantFormDelegate {
void onCounterChanged(int inputIndex, int counterIndex, int value) {
if (mNativeAssistantFormDelegate != 0) {
nativeOnCounterChanged(mNativeAssistantFormDelegate, inputIndex, counterIndex, value);
AssistantFormDelegateJni.get().onCounterChanged(mNativeAssistantFormDelegate,
AssistantFormDelegate.this, inputIndex, counterIndex, value);
}
}
void onChoiceSelectionChanged(int inputIndex, int choiceIndex, boolean selected) {
if (mNativeAssistantFormDelegate != 0) {
nativeOnChoiceSelectionChanged(
mNativeAssistantFormDelegate, inputIndex, choiceIndex, selected);
AssistantFormDelegateJni.get().onChoiceSelectionChanged(mNativeAssistantFormDelegate,
AssistantFormDelegate.this, inputIndex, choiceIndex, selected);
}
}
......@@ -38,8 +40,11 @@ class AssistantFormDelegate {
mNativeAssistantFormDelegate = 0;
}
private native void nativeOnCounterChanged(long nativeAssistantFormDelegate, int inputIndex,
int counterIndex, long nativeAssistantOverlayDelegate);
private native void nativeOnChoiceSelectionChanged(
long nativeAssistantFormDelegate, int inputIndex, int choiceIndex, boolean selected);
@NativeMethods
interface Natives {
void onCounterChanged(long nativeAssistantFormDelegate, AssistantFormDelegate caller,
int inputIndex, int counterIndex, long nativeAssistantOverlayDelegate);
void onChoiceSelectionChanged(long nativeAssistantFormDelegate,
AssistantFormDelegate caller, int inputIndex, int choiceIndex, boolean selected);
}
}
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.autofill_assistant.header;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
@JNINamespace("autofill_assistant")
class AssistantHeaderDelegate {
......@@ -22,7 +23,8 @@ class AssistantHeaderDelegate {
void onFeedbackButtonClicked() {
if (mNativeAssistantHeaderDelegate != 0) {
nativeOnFeedbackButtonClicked(mNativeAssistantHeaderDelegate);
AssistantHeaderDelegateJni.get().onFeedbackButtonClicked(
mNativeAssistantHeaderDelegate, AssistantHeaderDelegate.this);
}
}
......@@ -31,5 +33,9 @@ class AssistantHeaderDelegate {
mNativeAssistantHeaderDelegate = 0;
}
private native void nativeOnFeedbackButtonClicked(long nativeAssistantHeaderDelegate);
@NativeMethods
interface Natives {
void onFeedbackButtonClicked(
long nativeAssistantHeaderDelegate, AssistantHeaderDelegate caller);
}
}
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.autofill_assistant.overlay;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/** Delegate for the overlay. */
@JNINamespace("autofill_assistant")
......@@ -24,14 +25,16 @@ class AssistantOverlayDelegate {
/** Called after a certain number of unexpected taps. */
void onUnexpectedTaps() {
if (mNativeAssistantOverlayDelegate != 0) {
nativeOnUnexpectedTaps(mNativeAssistantOverlayDelegate);
AssistantOverlayDelegateJni.get().onUnexpectedTaps(
mNativeAssistantOverlayDelegate, AssistantOverlayDelegate.this);
}
}
/** Asks for an update of the touchable area. */
void updateTouchableArea() {
if (mNativeAssistantOverlayDelegate != 0) {
nativeUpdateTouchableArea(mNativeAssistantOverlayDelegate);
AssistantOverlayDelegateJni.get().updateTouchableArea(
mNativeAssistantOverlayDelegate, AssistantOverlayDelegate.this);
}
}
......@@ -41,7 +44,8 @@ class AssistantOverlayDelegate {
*/
void onUserInteractionInsideTouchableArea() {
if (mNativeAssistantOverlayDelegate != 0) {
nativeOnUserInteractionInsideTouchableArea(mNativeAssistantOverlayDelegate);
AssistantOverlayDelegateJni.get().onUserInteractionInsideTouchableArea(
mNativeAssistantOverlayDelegate, AssistantOverlayDelegate.this);
}
}
......@@ -50,8 +54,12 @@ class AssistantOverlayDelegate {
mNativeAssistantOverlayDelegate = 0;
}
private native void nativeOnUnexpectedTaps(long nativeAssistantOverlayDelegate);
private native void nativeUpdateTouchableArea(long nativeAssistantOverlayDelegate);
private native void nativeOnUserInteractionInsideTouchableArea(
long nativeAssistantOverlayDelegate);
@NativeMethods
interface Natives {
void onUnexpectedTaps(long nativeAssistantOverlayDelegate, AssistantOverlayDelegate caller);
void updateTouchableArea(
long nativeAssistantOverlayDelegate, AssistantOverlayDelegate caller);
void onUserInteractionInsideTouchableArea(
long nativeAssistantOverlayDelegate, AssistantOverlayDelegate caller);
}
}
......@@ -8,6 +8,7 @@ import android.support.annotation.Nullable;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.autofill.PersonalDataManager;
import org.chromium.chrome.browser.payments.AutofillAddress;
import org.chromium.chrome.browser.payments.AutofillContact;
......@@ -41,14 +42,18 @@ public class AssistantPaymentRequestNativeDelegate implements AssistantPaymentRe
email = contact.getPayerEmail();
}
nativeOnContactInfoChanged(mNativeAssistantPaymentRequestDelegate, name, phone, email);
AssistantPaymentRequestNativeDelegateJni.get().onContactInfoChanged(
mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate.this, name, phone, email);
}
}
@Override
public void onShippingAddressChanged(@Nullable AutofillAddress address) {
if (mNativeAssistantPaymentRequestDelegate != 0) {
nativeOnShippingAddressChanged(mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegateJni.get().onShippingAddressChanged(
mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate.this,
address != null ? address.getProfile() : null);
}
}
......@@ -56,7 +61,9 @@ public class AssistantPaymentRequestNativeDelegate implements AssistantPaymentRe
@Override
public void onPaymentMethodChanged(@Nullable AutofillPaymentInstrument paymentInstrument) {
if (mNativeAssistantPaymentRequestDelegate != 0) {
nativeOnCreditCardChanged(mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegateJni.get().onCreditCardChanged(
mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate.this,
paymentInstrument != null ? paymentInstrument.getCard() : null);
}
}
......@@ -64,14 +71,18 @@ public class AssistantPaymentRequestNativeDelegate implements AssistantPaymentRe
@Override
public void onTermsAndConditionsChanged(@AssistantTermsAndConditionsState int state) {
if (mNativeAssistantPaymentRequestDelegate != 0) {
nativeOnTermsAndConditionsChanged(mNativeAssistantPaymentRequestDelegate, state);
AssistantPaymentRequestNativeDelegateJni.get().onTermsAndConditionsChanged(
mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate.this, state);
}
}
@Override
public void onTermsAndConditionsLinkClicked(int link) {
if (mNativeAssistantPaymentRequestDelegate != 0) {
nativeOnTermsAndConditionsLinkClicked(mNativeAssistantPaymentRequestDelegate, link);
AssistantPaymentRequestNativeDelegateJni.get().onTermsAndConditionsLinkClicked(
mNativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate.this, link);
}
}
......@@ -80,14 +91,20 @@ public class AssistantPaymentRequestNativeDelegate implements AssistantPaymentRe
mNativeAssistantPaymentRequestDelegate = 0;
}
private native void nativeOnContactInfoChanged(long nativeAssistantPaymentRequestDelegate,
@Nullable String payerName, @Nullable String payerPhone, @Nullable String payerEmail);
private native void nativeOnShippingAddressChanged(long nativeAssistantPaymentRequestDelegate,
@Nullable PersonalDataManager.AutofillProfile address);
private native void nativeOnCreditCardChanged(long nativeAssistantPaymentRequestDelegate,
@Nullable PersonalDataManager.CreditCard card);
private native void nativeOnTermsAndConditionsChanged(
long nativeAssistantPaymentRequestDelegate, int state);
private native void nativeOnTermsAndConditionsLinkClicked(
long nativeAssistantPaymentRequestDelegate, int link);
@NativeMethods
interface Natives {
void onContactInfoChanged(long nativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate caller, @Nullable String payerName,
@Nullable String payerPhone, @Nullable String payerEmail);
void onShippingAddressChanged(long nativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate caller,
@Nullable PersonalDataManager.AutofillProfile address);
void onCreditCardChanged(long nativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate caller,
@Nullable PersonalDataManager.CreditCard card);
void onTermsAndConditionsChanged(long nativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate caller, int state);
void onTermsAndConditionsLinkClicked(long nativeAssistantPaymentRequestDelegate,
AssistantPaymentRequestNativeDelegate caller, int link);
}
}
......@@ -8,6 +8,7 @@ import com.google.protobuf.ByteString;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.autofill_assistant.proto.ActionsResponseProto;
import org.chromium.chrome.browser.autofill_assistant.proto.SupportsScriptResponseProto;
......@@ -38,7 +39,7 @@ public class AutofillAssistantTestService
public long createNativeService() {
// Ask native to create and return a wrapper around |this|. The wrapper will be injected
// upon startup, at which point the native controller will take ownership of the wrapper.
return nativeJavaServiceCreate(this);
return AutofillAssistantTestServiceJni.get().javaServiceCreate(this);
}
/** @see AutofillAssistantService#getScriptsForUrl(String) */
......@@ -93,5 +94,8 @@ public class AutofillAssistantTestService
return getNextActions(globalPayload, scriptPayload).toByteArray();
}
private static native long nativeJavaServiceCreate(AutofillAssistantTestService service);
@NativeMethods
interface Natives {
long javaServiceCreate(AutofillAssistantTestService service);
}
}
......@@ -9,6 +9,7 @@ android_library("internal_java") {
deps = [
":java_resources",
"//base:base_java",
"//base:jni_java",
# TODO(crbug/951695): Cyclic dependency. Depend on public only when ready.
"//chrome/android:chrome_java",
......@@ -76,6 +77,7 @@ android_library("internal_java") {
"java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutView.java",
"java/src/org/chromium/chrome/browser/keyboard_accessory/tab_layout_component/KeyboardAccessoryTabLayoutViewBinder.java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
android_resources("java_resources") {
......
......@@ -9,6 +9,7 @@ import android.content.DialogInterface;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ResourceId;
import org.chromium.chrome.browser.keyboard_accessory.data.PropertyProvider;
......@@ -41,20 +42,25 @@ public class AutofillKeyboardAccessoryViewBridge
@Override
public void dismissed() {
if (mNativeAutofillKeyboardAccessory == 0) return;
nativeViewDismissed(mNativeAutofillKeyboardAccessory);
AutofillKeyboardAccessoryViewBridgeJni.get().viewDismissed(
mNativeAutofillKeyboardAccessory, AutofillKeyboardAccessoryViewBridge.this);
}
@Override
public void suggestionSelected(int listIndex) {
mManualFillingComponent.dismiss();
if (mNativeAutofillKeyboardAccessory == 0) return;
nativeSuggestionSelected(mNativeAutofillKeyboardAccessory, listIndex);
AutofillKeyboardAccessoryViewBridgeJni.get().suggestionSelected(
mNativeAutofillKeyboardAccessory, AutofillKeyboardAccessoryViewBridge.this,
listIndex);
}
@Override
public void deleteSuggestion(int listIndex) {
if (mNativeAutofillKeyboardAccessory == 0) return;
nativeDeletionRequested(mNativeAutofillKeyboardAccessory, listIndex);
AutofillKeyboardAccessoryViewBridgeJni.get().deletionRequested(
mNativeAutofillKeyboardAccessory, AutofillKeyboardAccessoryViewBridge.this,
listIndex);
}
@Override
......@@ -64,7 +70,8 @@ public class AutofillKeyboardAccessoryViewBridge
public void onClick(DialogInterface dialog, int which) {
assert which == DialogInterface.BUTTON_POSITIVE;
if (mNativeAutofillKeyboardAccessory == 0) return;
nativeDeletionConfirmed(mNativeAutofillKeyboardAccessory);
AutofillKeyboardAccessoryViewBridgeJni.get().deletionConfirmed(
mNativeAutofillKeyboardAccessory, AutofillKeyboardAccessoryViewBridge.this);
}
/**
......@@ -159,10 +166,15 @@ public class AutofillKeyboardAccessoryViewBridge
false /* isBoldLabel */);
}
private native void nativeViewDismissed(long nativeAutofillKeyboardAccessoryView);
private native void nativeSuggestionSelected(
long nativeAutofillKeyboardAccessoryView, int listIndex);
private native void nativeDeletionRequested(
long nativeAutofillKeyboardAccessoryView, int listIndex);
private native void nativeDeletionConfirmed(long nativeAutofillKeyboardAccessoryView);
@NativeMethods
interface Natives {
void viewDismissed(long nativeAutofillKeyboardAccessoryView,
AutofillKeyboardAccessoryViewBridge caller);
void suggestionSelected(long nativeAutofillKeyboardAccessoryView,
AutofillKeyboardAccessoryViewBridge caller, int listIndex);
void deletionRequested(long nativeAutofillKeyboardAccessoryView,
AutofillKeyboardAccessoryViewBridge caller, int listIndex);
void deletionConfirmed(long nativeAutofillKeyboardAccessoryView,
AutofillKeyboardAccessoryViewBridge caller);
}
}
......@@ -11,6 +11,7 @@ import android.util.SparseArray;
import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.AccessorySheetData;
import org.chromium.chrome.browser.keyboard_accessory.data.KeyboardAccessoryData.Action;
......@@ -76,8 +77,9 @@ class ManualFillingComponentBridge {
: "Controller has been destroyed but the bridge wasn't cleaned up!";
ManualFillingMetricsRecorder.recordActionSelected(
AccessoryAction.GENERATE_PASSWORD_AUTOMATIC);
nativeOnOptionSelected(
mNativeView, AccessoryAction.GENERATE_PASSWORD_AUTOMATIC);
ManualFillingComponentBridgeJni.get().onOptionSelected(mNativeView,
ManualFillingComponentBridge.this,
AccessoryAction.GENERATE_PASSWORD_AUTOMATIC);
})};
} else {
generationAction = new Action[0];
......@@ -141,7 +143,8 @@ class ManualFillingComponentBridge {
assert mNativeView != 0 : "Controller was destroyed but the bridge wasn't!";
ManualFillingMetricsRecorder.recordSuggestionSelected(
sheetType, field.isObfuscated());
nativeOnFillingTriggered(mNativeView, sheetType, field);
ManualFillingComponentBridgeJni.get().onFillingTriggered(
mNativeView, ManualFillingComponentBridge.this, sheetType, field);
};
}
((UserInfo) objUserInfo)
......@@ -156,42 +159,48 @@ class ManualFillingComponentBridge {
.getFooterCommands()
.add(new FooterCommand(displayText, (footerCommand) -> {
assert mNativeView != 0 : "Controller was destroyed but the bridge wasn't!";
nativeOnOptionSelected(mNativeView, accessoryAction);
ManualFillingComponentBridgeJni.get().onOptionSelected(
mNativeView, ManualFillingComponentBridge.this, accessoryAction);
}));
}
public void fetchFavicon(@Px int desiredSize, Callback<Bitmap> faviconCallback) {
assert mNativeView != 0 : "Favicon was requested after the bridge was destroyed!";
nativeOnFaviconRequested(mNativeView, desiredSize, faviconCallback);
ManualFillingComponentBridgeJni.get().onFaviconRequested(
mNativeView, ManualFillingComponentBridge.this, desiredSize, faviconCallback);
}
@VisibleForTesting
public static void cachePasswordSheetData(
WebContents webContents, String[] userNames, String[] passwords) {
nativeCachePasswordSheetDataForTesting(webContents, userNames, passwords);
ManualFillingComponentBridgeJni.get().cachePasswordSheetDataForTesting(
webContents, userNames, passwords);
}
@VisibleForTesting
public static void notifyFocusedFieldType(WebContents webContents, int focusedFieldType) {
nativeNotifyFocusedFieldTypeForTesting(webContents, focusedFieldType);
ManualFillingComponentBridgeJni.get().notifyFocusedFieldTypeForTesting(
webContents, focusedFieldType);
}
@VisibleForTesting
public static void signalAutoGenerationStatus(WebContents webContents, boolean available) {
nativeSignalAutoGenerationStatusForTesting(webContents, available);
}
private native void nativeOnFaviconRequested(long nativeManualFillingViewAndroid,
int desiredSizeInPx, Callback<Bitmap> faviconCallback);
private native void nativeOnFillingTriggered(
long nativeManualFillingViewAndroid, int tabType, UserInfoField userInfoField);
private native void nativeOnOptionSelected(
long nativeManualFillingViewAndroid, int accessoryAction);
private static native void nativeCachePasswordSheetDataForTesting(
WebContents webContents, String[] userNames, String[] passwords);
private static native void nativeNotifyFocusedFieldTypeForTesting(
WebContents webContents, int focusedFieldType);
private static native void nativeSignalAutoGenerationStatusForTesting(
WebContents webContents, boolean available);
ManualFillingComponentBridgeJni.get().signalAutoGenerationStatusForTesting(
webContents, available);
}
@NativeMethods
interface Natives {
void onFaviconRequested(long nativeManualFillingViewAndroid,
ManualFillingComponentBridge caller, int desiredSizeInPx,
Callback<Bitmap> faviconCallback);
void onFillingTriggered(long nativeManualFillingViewAndroid,
ManualFillingComponentBridge caller, int tabType, UserInfoField userInfoField);
void onOptionSelected(long nativeManualFillingViewAndroid,
ManualFillingComponentBridge caller, int accessoryAction);
void cachePasswordSheetDataForTesting(
WebContents webContents, String[] userNames, String[] passwords);
void notifyFocusedFieldTypeForTesting(WebContents webContents, int focusedFieldType);
void signalAutoGenerationStatusForTesting(WebContents webContents, boolean available);
}
}
......@@ -14,6 +14,7 @@ android_library("java") {
"$google_play_services_package:google_play_services_cast_framework_java",
"$google_play_services_package:google_play_services_cast_java",
"//base:base_java",
"//base:jni_java",
"//chrome/android:chrome_java",
"//services/media_session/public/cpp/android:media_session_java",
"//third_party/android_deps:android_support_v7_appcompat_java",
......@@ -64,6 +65,7 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/media/router/caf/remoting/RemotingSessionController.java",
"java/src/org/chromium/chrome/browser/media/router/caf/remoting/StreamPositionExtrapolator.java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
generate_jni("jni_headers") {
......
......@@ -17,6 +17,7 @@ import org.chromium.base.SysUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.AppHooks;
import org.chromium.chrome.browser.media.router.caf.CafMediaRouteProvider;
import org.chromium.chrome.browser.media.router.caf.remoting.CafRemotingMediaRouteProvider;
......@@ -145,8 +146,8 @@ public class ChromeMediaRouter implements MediaRouteManager {
mSinksPerSource.put(sourceId, allSinksPerSource);
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnSinksReceived(
mNativeMediaRouterAndroidBridge, sourceId, allSinksPerSource.size());
ChromeMediaRouterJni.get().onSinksReceived(mNativeMediaRouterAndroidBridge,
ChromeMediaRouter.this, sourceId, allSinksPerSource.size());
}
}
......@@ -155,22 +156,24 @@ public class ChromeMediaRouter implements MediaRouteManager {
MediaRouteProvider provider, boolean wasLaunched) {
mRouteIdsToProviders.put(mediaRouteId, provider);
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnRouteCreated(mNativeMediaRouterAndroidBridge, mediaRouteId, mediaSinkId,
requestId, wasLaunched);
ChromeMediaRouterJni.get().onRouteCreated(mNativeMediaRouterAndroidBridge,
ChromeMediaRouter.this, mediaRouteId, mediaSinkId, requestId, wasLaunched);
}
}
@Override
public void onRouteRequestError(String errorText, int requestId) {
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnRouteRequestError(mNativeMediaRouterAndroidBridge, errorText, requestId);
ChromeMediaRouterJni.get().onRouteRequestError(
mNativeMediaRouterAndroidBridge, ChromeMediaRouter.this, errorText, requestId);
}
}
@Override
public void onRouteTerminated(String mediaRouteId) {
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnRouteTerminated(mNativeMediaRouterAndroidBridge, mediaRouteId);
ChromeMediaRouterJni.get().onRouteTerminated(
mNativeMediaRouterAndroidBridge, ChromeMediaRouter.this, mediaRouteId);
}
mRouteIdsToProviders.remove(mediaRouteId);
}
......@@ -178,7 +181,8 @@ public class ChromeMediaRouter implements MediaRouteManager {
@Override
public void onRouteClosed(String mediaRouteId, String error) {
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnRouteClosed(mNativeMediaRouterAndroidBridge, mediaRouteId, error);
ChromeMediaRouterJni.get().onRouteClosed(
mNativeMediaRouterAndroidBridge, ChromeMediaRouter.this, mediaRouteId, error);
}
mRouteIdsToProviders.remove(mediaRouteId);
}
......@@ -186,7 +190,8 @@ public class ChromeMediaRouter implements MediaRouteManager {
@Override
public void onMessage(String mediaRouteId, String message) {
if (mNativeMediaRouterAndroidBridge != 0) {
nativeOnMessage(mNativeMediaRouterAndroidBridge, mediaRouteId, message);
ChromeMediaRouterJni.get().onMessage(
mNativeMediaRouterAndroidBridge, ChromeMediaRouter.this, mediaRouteId, message);
}
}
......@@ -392,15 +397,20 @@ public class ChromeMediaRouter implements MediaRouteManager {
return null;
}
native void nativeOnSinksReceived(
long nativeMediaRouterAndroidBridge, String sourceUrn, int count);
native void nativeOnRouteCreated(long nativeMediaRouterAndroidBridge, String mediaRouteId,
String mediaSinkId, int createRouteRequestId, boolean wasLaunched);
native void nativeOnRouteRequestError(
long nativeMediaRouterAndroidBridge, String errorText, int createRouteRequestId);
native void nativeOnRouteTerminated(long nativeMediaRouterAndroidBridge, String mediaRouteId);
native void nativeOnRouteClosed(
long nativeMediaRouterAndroidBridge, String mediaRouteId, String message);
native void nativeOnMessage(
long nativeMediaRouterAndroidBridge, String mediaRouteId, String message);
@NativeMethods
interface Natives {
void onSinksReceived(long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller,
String sourceUrn, int count);
void onRouteCreated(long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller,
String mediaRouteId, String mediaSinkId, int createRouteRequestId,
boolean wasLaunched);
void onRouteRequestError(long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller,
String errorText, int createRouteRequestId);
void onRouteTerminated(
long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller, String mediaRouteId);
void onRouteClosed(long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller,
String mediaRouteId, String message);
void onMessage(long nativeMediaRouterAndroidBridge, ChromeMediaRouter caller,
String mediaRouteId, String message);
}
}
......@@ -10,6 +10,7 @@ import android.support.v7.media.MediaRouteSelector;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.media.router.caf.CastMediaSource;
import org.chromium.chrome.browser.media.router.caf.remoting.RemotingMediaSource;
......@@ -54,7 +55,8 @@ public class ChromeMediaRouterDialogController implements MediaRouteDialogDelega
MediaRouteSelector routeSelector = source == null ? null : source.buildRouteSelector();
if (routeSelector == null) {
nativeOnMediaSourceNotSupported(mNativeDialogController);
ChromeMediaRouterDialogControllerJni.get().onMediaSourceNotSupported(
mNativeDialogController, ChromeMediaRouterDialogController.this);
return;
}
......@@ -78,7 +80,8 @@ public class ChromeMediaRouterDialogController implements MediaRouteDialogDelega
MediaRouteSelector routeSelector = source == null ? null : source.buildRouteSelector();
if (routeSelector == null) {
nativeOnMediaSourceNotSupported(mNativeDialogController);
ChromeMediaRouterDialogControllerJni.get().onMediaSourceNotSupported(
mNativeDialogController, ChromeMediaRouterDialogController.this);
return;
}
......@@ -109,13 +112,15 @@ public class ChromeMediaRouterDialogController implements MediaRouteDialogDelega
@Override
public void onSinkSelected(String sourceUrn, MediaSink sink) {
mDialogManager = null;
nativeOnSinkSelected(mNativeDialogController, sourceUrn, sink.getId());
ChromeMediaRouterDialogControllerJni.get().onSinkSelected(mNativeDialogController,
ChromeMediaRouterDialogController.this, sourceUrn, sink.getId());
}
@Override
public void onRouteClosed(String mediaRouteId) {
mDialogManager = null;
nativeOnRouteClosed(mNativeDialogController, mediaRouteId);
ChromeMediaRouterDialogControllerJni.get().onRouteClosed(
mNativeDialogController, ChromeMediaRouterDialogController.this, mediaRouteId);
}
@Override
......@@ -127,16 +132,23 @@ public class ChromeMediaRouterDialogController implements MediaRouteDialogDelega
if (mDialogManager == null) return;
mDialogManager = null;
nativeOnDialogCancelled(mNativeDialogController);
ChromeMediaRouterDialogControllerJni.get().onDialogCancelled(
mNativeDialogController, ChromeMediaRouterDialogController.this);
}
private ChromeMediaRouterDialogController(long nativeDialogController) {
mNativeDialogController = nativeDialogController;
}
native void nativeOnDialogCancelled(long nativeMediaRouterDialogControllerAndroid);
native void nativeOnSinkSelected(
long nativeMediaRouterDialogControllerAndroid, String sourceUrn, String sinkId);
native void nativeOnRouteClosed(long nativeMediaRouterDialogControllerAndroid, String routeId);
native void nativeOnMediaSourceNotSupported(long nativeMediaRouterDialogControllerAndroid);
@NativeMethods
interface Natives {
void onDialogCancelled(long nativeMediaRouterDialogControllerAndroid,
ChromeMediaRouterDialogController caller);
void onSinkSelected(long nativeMediaRouterDialogControllerAndroid,
ChromeMediaRouterDialogController caller, String sourceUrn, String sinkId);
void onRouteClosed(long nativeMediaRouterDialogControllerAndroid,
ChromeMediaRouterDialogController caller, String routeId);
void onMediaSourceNotSupported(long nativeMediaRouterDialogControllerAndroid,
ChromeMediaRouterDialogController caller);
}
}
......@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.media.router;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/**
* A wrapper around a FlingingController that allows the native code to use it
......@@ -55,7 +56,8 @@ public class FlingingControllerBridge implements MediaStatusObserver {
@Override
public void onMediaStatusUpdate(MediaStatusBridge status) {
if (mNativeFlingingControllerBridge != 0) {
nativeOnMediaStatusUpdated(mNativeFlingingControllerBridge, status);
FlingingControllerBridgeJni.get().onMediaStatusUpdated(
mNativeFlingingControllerBridge, FlingingControllerBridge.this, status);
}
}
......@@ -71,6 +73,9 @@ public class FlingingControllerBridge implements MediaStatusObserver {
mNativeFlingingControllerBridge = 0;
}
private native void nativeOnMediaStatusUpdated(
long nativeFlingingControllerBridge, MediaStatusBridge status);
@NativeMethods
interface Natives {
void onMediaStatusUpdated(long nativeFlingingControllerBridge,
FlingingControllerBridge caller, MediaStatusBridge status);
}
}
......@@ -117,6 +117,7 @@ android_library("java") {
deps = [
":java_resources",
"//base:base_java",
"//base:jni_java",
"//chrome/android:chrome_java",
"//components/policy/android:policy_java",
"//content/public/android:content_java",
......@@ -135,6 +136,7 @@ android_library("java") {
if (async_vr) {
proguard_configs = [ "//base/android/proguard/chromium_code.flags" ]
}
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
generate_jni("jni_headers") {
......
......@@ -10,6 +10,7 @@ import android.view.View;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.content_public.browser.MotionEventSynthesizer;
/**
......@@ -24,7 +25,8 @@ public class AndroidUiGestureTarget {
public AndroidUiGestureTarget(
View target, float scaleFactor, float scrollRatio, int touchSlop) {
mMotionEventSynthesizer = MotionEventSynthesizer.create(target);
mNativePointer = nativeInit(scaleFactor, scrollRatio, touchSlop);
mNativePointer = AndroidUiGestureTargetJni.get().init(
AndroidUiGestureTarget.this, scaleFactor, scrollRatio, touchSlop);
}
@CalledByNative
......@@ -61,5 +63,9 @@ public class AndroidUiGestureTarget {
return mNativePointer;
}
private native long nativeInit(float scaleFactor, float scrollRatio, int touchSlop);
@NativeMethods
interface Natives {
long init(
AndroidUiGestureTarget caller, float scaleFactor, float scrollRatio, int touchSlop);
}
}
......@@ -11,6 +11,7 @@ import android.view.WindowManager;
import org.chromium.base.ContextUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/**
* Helper class for interfacing with the Android Choreographer from native code.
......@@ -23,7 +24,8 @@ public class AndroidVSyncHelper {
@Override
public void doFrame(long frameTimeNanos) {
if (mNativeAndroidVSyncHelper == 0) return;
nativeOnVSync(mNativeAndroidVSyncHelper, frameTimeNanos);
AndroidVSyncHelperJni.get().onVSync(
mNativeAndroidVSyncHelper, AndroidVSyncHelper.this, frameTimeNanos);
}
};
......@@ -54,5 +56,8 @@ public class AndroidVSyncHelper {
return windowManager.getDefaultDisplay().getRefreshRate();
}
private native void nativeOnVSync(long nativeAndroidVSyncHelper, long frameTimeNanos);
@NativeMethods
interface Natives {
void onVSync(long nativeAndroidVSyncHelper, AndroidVSyncHelper caller, long frameTimeNanos);
}
}
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.vr;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/**
* Container class to provide the version and the compatibility with Chrome of the installed VrCore.
......@@ -34,11 +35,15 @@ public class VrCoreInfo {
}
public long makeNativeVrCoreInfo() {
return (gvrVersion == null) ? nativeInit(0, 0, 0, compatibility)
: nativeInit(gvrVersion.majorVersion, gvrVersion.minorVersion,
gvrVersion.patchVersion, compatibility);
return (gvrVersion == null)
? VrCoreInfoJni.get().init(VrCoreInfo.this, 0, 0, 0, compatibility)
: VrCoreInfoJni.get().init(VrCoreInfo.this, gvrVersion.majorVersion,
gvrVersion.minorVersion, gvrVersion.patchVersion, compatibility);
}
private native long nativeInit(
int majorVersion, int minorVersion, int patchVersion, int compatibility);
@NativeMethods
interface Natives {
long init(VrCoreInfo caller, int majorVersion, int minorVersion, int patchVersion,
int compatibility);
}
}
......@@ -12,6 +12,7 @@ import android.view.inputmethod.InputConnection;
import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.vr.keyboard.TextEditAction;
import org.chromium.content_public.browser.ImeAdapter;
import org.chromium.content_public.browser.WebContents;
......@@ -65,7 +66,8 @@ public class VrInputConnection {
mImeThreadResponseHandler.post(new Runnable() {
@Override
public void run() {
nativeUpdateTextState(mNativeVrInputConnection, textState);
VrInputConnectionJni.get().updateTextState(
mNativeVrInputConnection, VrInputConnection.this, textState);
}
});
}
......@@ -127,5 +129,8 @@ public class VrInputConnection {
});
}
private native void nativeUpdateTextState(long nativeVrInputConnection, String text);
@NativeMethods
interface Natives {
void updateTextState(long nativeVrInputConnection, VrInputConnection caller, String text);
}
}
......@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.vr;
import org.chromium.base.BundleUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.modules.ModuleInstallUi;
import org.chromium.chrome.browser.tab.Tab;
......@@ -34,7 +35,7 @@ public class VrModuleProvider implements ModuleInstallUi.FailureUiListener {
*/
public static void maybeInit() {
if (!VrBuildConfig.IS_VR_ENABLED) return;
nativeInit();
VrModuleProviderJni.get().init();
// Always install the VR module on Daydream-ready devices.
maybeRequestModuleIfDaydreamReady();
}
......@@ -103,7 +104,7 @@ public class VrModuleProvider implements ModuleInstallUi.FailureUiListener {
// TODO(crbug.com/870055): JNI should be registered in the shared VR library's JNI_OnLoad
// function. Do this once we have a shared VR library.
/* package */ static void registerJni() {
nativeRegisterJni();
VrModuleProviderJni.get().registerJni();
}
private static VrDelegateProvider getDelegateProvider() {
......@@ -137,7 +138,8 @@ public class VrModuleProvider implements ModuleInstallUi.FailureUiListener {
@Override
public void onCancel() {
if (mNativeVrModuleProvider != 0) {
nativeOnInstalledModule(mNativeVrModuleProvider, false);
VrModuleProviderJni.get().onInstalledModule(
mNativeVrModuleProvider, VrModuleProvider.this, false);
}
}
......@@ -162,12 +164,17 @@ public class VrModuleProvider implements ModuleInstallUi.FailureUiListener {
return;
}
ui.showInstallSuccessUi();
nativeOnInstalledModule(mNativeVrModuleProvider, success);
VrModuleProviderJni.get().onInstalledModule(
mNativeVrModuleProvider, VrModuleProvider.this, success);
}
});
}
private static native void nativeInit();
private static native void nativeRegisterJni();
private native void nativeOnInstalledModule(long nativeVrModuleProvider, boolean success);
@NativeMethods
interface Natives {
void init();
void registerJni();
void onInstalledModule(
long nativeVrModuleProvider, VrModuleProvider caller, boolean success);
}
}
......@@ -41,6 +41,7 @@ import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.task.AsyncTask;
......@@ -240,7 +241,7 @@ public class VrShellDelegate
// If we didn't request WebVR then we're not coming from a request present call.
// If we didn't set mStartedFromVrIntent this isn't an intent from another app.
// Therefore we can assume this was triggered by NFC.
sInstance.nativeRecordVrStartAction(
VrShellDelegateJni.get().recordVrStartAction(
sInstance.mNativeVrShellDelegate, VrStartAction.HEADSET_ACTIVATION);
}
......@@ -341,7 +342,7 @@ public class VrShellDelegate
*/
public static void onNativeLibraryAvailable() {
VrModuleProvider.registerJni();
nativeOnLibraryAvailable();
VrShellDelegateJni.get().onLibraryAvailable();
}
/**
......@@ -712,7 +713,7 @@ public class VrShellDelegate
private static void registerVrAssetsComponentIfDaydreamUser(boolean isDaydreamCurrentViewer) {
assert !sRegisteredVrAssetsComponent;
if (isDaydreamCurrentViewer) {
nativeRegisterVrAssetsComponent();
VrShellDelegateJni.get().registerVrAssetsComponent();
sRegisteredVrAssetsComponent = true;
}
ChromePreferenceManager.getInstance().writeBoolean(
......@@ -897,7 +898,7 @@ public class VrShellDelegate
// If an activity isn't resumed at the point, it must have been paused.
mPaused = ApplicationStatus.getStateForActivity(activity) != ActivityState.RESUMED;
mVisible = activity.hasWindowFocus();
mNativeVrShellDelegate = nativeInit();
mNativeVrShellDelegate = VrShellDelegateJni.get().init(VrShellDelegate.this);
updateVrSupportLevel(null);
mFeedbackFrequency = VrFeedbackStatus.getFeedbackFrequency();
ensureLifecycleObserverInitialized();
......@@ -1049,7 +1050,8 @@ public class VrShellDelegate
private void maybeSetPresentResult(boolean result) {
if (mNativeVrShellDelegate == 0 || !mRequestedWebVr) return;
nativeSetPresentResult(mNativeVrShellDelegate, result);
VrShellDelegateJni.get().setPresentResult(
mNativeVrShellDelegate, VrShellDelegate.this, result);
mRequestedWebVr = false;
}
......@@ -1071,7 +1073,7 @@ public class VrShellDelegate
}
enterVr(mActivateFromHeadsetInsertion);
if (mActivateFromHeadsetInsertion && mListeningForWebVrActivate) {
nativeDisplayActivate(mNativeVrShellDelegate);
VrShellDelegateJni.get().displayActivate(mNativeVrShellDelegate, VrShellDelegate.this);
mActivateFromHeadsetInsertion = false;
}
......@@ -1170,7 +1172,9 @@ public class VrShellDelegate
return;
}
if (!mInVr) nativeRecordVrStartAction(mNativeVrShellDelegate, VrStartAction.INTENT_LAUNCH);
if (!mInVr)
VrShellDelegateJni.get().recordVrStartAction(
mNativeVrShellDelegate, VrStartAction.INTENT_LAUNCH);
mStartedFromVrIntent = true;
// Setting DON succeeded will cause us to enter VR when resuming.
......@@ -1464,7 +1468,8 @@ public class VrShellDelegate
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
try {
if (mNativeVrShellDelegate != 0) nativeOnResume(mNativeVrShellDelegate);
if (mNativeVrShellDelegate != 0)
VrShellDelegateJni.get().onResume(mNativeVrShellDelegate, VrShellDelegate.this);
} finally {
StrictMode.setThreadPolicy(oldPolicy);
}
......@@ -1551,7 +1556,8 @@ public class VrShellDelegate
}
if (mInVr) mVrShell.pause();
if (mNativeVrShellDelegate != 0) nativeOnPause(mNativeVrShellDelegate);
if (mNativeVrShellDelegate != 0)
VrShellDelegateJni.get().onPause(mNativeVrShellDelegate, VrShellDelegate.this);
mIsDaydreamCurrentViewer = null;
}
......@@ -1660,7 +1666,8 @@ public class VrShellDelegate
if (mActivateFromHeadsetInsertion) {
// Dispatch vrdisplayactivate so that the WebVr page can call requestPresent
// to start presentation.
nativeDisplayActivate(mNativeVrShellDelegate);
VrShellDelegateJni.get().displayActivate(
mNativeVrShellDelegate, VrShellDelegate.this);
mActivateFromHeadsetInsertion = false;
}
} else {
......@@ -1946,18 +1953,22 @@ public class VrShellDelegate
private void destroy() {
if (sInstance == null) return;
shutdownVr(false /* disableVrMode */, false /* stayingInChrome */);
if (mNativeVrShellDelegate != 0) nativeDestroy(mNativeVrShellDelegate);
if (mNativeVrShellDelegate != 0)
VrShellDelegateJni.get().destroy(mNativeVrShellDelegate, VrShellDelegate.this);
mNativeVrShellDelegate = 0;
sInstance = null;
}
private native long nativeInit();
private static native void nativeOnLibraryAvailable();
private native void nativeSetPresentResult(long nativeVrShellDelegate, boolean result);
private native void nativeRecordVrStartAction(long nativeVrShellDelegate, int startAction);
private native void nativeDisplayActivate(long nativeVrShellDelegate);
private native void nativeOnPause(long nativeVrShellDelegate);
private native void nativeOnResume(long nativeVrShellDelegate);
private native void nativeDestroy(long nativeVrShellDelegate);
private static native void nativeRegisterVrAssetsComponent();
@NativeMethods
interface Natives {
long init(VrShellDelegate caller);
void onLibraryAvailable();
void setPresentResult(long nativeVrShellDelegate, VrShellDelegate caller, boolean result);
void recordVrStartAction(long nativeVrShellDelegate, int startAction);
void displayActivate(long nativeVrShellDelegate, VrShellDelegate caller);
void onPause(long nativeVrShellDelegate, VrShellDelegate caller);
void onResume(long nativeVrShellDelegate, VrShellDelegate caller);
void destroy(long nativeVrShellDelegate, VrShellDelegate caller);
void registerVrAssetsComponent();
}
}
......@@ -150,7 +150,6 @@ void VrShellDelegate::SetPresentResult(JNIEnv* env,
void VrShellDelegate::RecordVrStartAction(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint start_action) {
VrStartAction action = static_cast<VrStartAction>(start_action);
......
......@@ -58,7 +58,6 @@ class VrShellDelegate : public device::GvrDelegateProvider,
const base::android::JavaParamRef<jobject>& obj,
jboolean success);
void RecordVrStartAction(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint start_action);
void DisplayActivate(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
......
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