Index: components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc |
diff --git a/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0eefd7ffb46ec565697dd7b25d202a5d032a18f7 |
--- /dev/null |
+++ b/components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc |
@@ -0,0 +1,100 @@ |
+// Copyright 2017 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. |
+ |
+#include "components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.h" |
+ |
+#include "base/android/jni_android.h" |
+#include "base/android/jni_string.h" |
+#include "base/android/scoped_java_ref.h" |
+#include "components/feature_engagement_tracker/public/feature_engagement_tracker.h" |
+#include "jni/FeatureEngagementTrackerImpl_jni.h" |
+ |
+namespace feature_engagement_tracker { |
+ |
+// static |
+bool FeatureEngagementTrackerImplAndroid::RegisterJni(JNIEnv* env) { |
+ return RegisterNativesImpl(env); |
+} |
+ |
+// static |
+FeatureEngagementTrackerImplAndroid* |
+FeatureEngagementTrackerImplAndroid::FromJavaObject( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj) { |
+ return reinterpret_cast<FeatureEngagementTrackerImplAndroid*>( |
+ Java_FeatureEngagementTrackerImpl_getNativePtr(env, jobj)); |
+} |
+ |
+// This function is declared in |
+// //components/feature_engagement_tracker/public/feature_engagement_tracker.h |
+// and should be linked in to any binary using |
+// FeatureEngagementTracker::GetJavaObject. |
+// static |
+base::android::ScopedJavaLocalRef<jobject> |
+FeatureEngagementTracker::GetJavaObject( |
+ FeatureEngagementTracker* feature_engagement_tracker) { |
+ FeatureEngagementTrackerImplAndroid* feature_engagement_tracker_impl_android = |
+ static_cast<FeatureEngagementTrackerImplAndroid*>( |
+ feature_engagement_tracker); |
+ return feature_engagement_tracker_impl_android->GetJavaObject(); |
+} |
+ |
+FeatureEngagementTrackerImplAndroid::FeatureEngagementTrackerImplAndroid() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ |
+ java_obj_.Reset(env, Java_FeatureEngagementTrackerImpl_create( |
+ env, reinterpret_cast<intptr_t>(this)) |
+ .obj()); |
+} |
+ |
+FeatureEngagementTrackerImplAndroid::~FeatureEngagementTrackerImplAndroid() { |
+ Java_FeatureEngagementTrackerImpl_clearNativePtr( |
+ base::android::AttachCurrentThread(), java_obj_); |
+} |
+ |
+base::android::ScopedJavaLocalRef<jobject> |
+FeatureEngagementTrackerImplAndroid::GetJavaObject() { |
+ return base::android::ScopedJavaLocalRef<jobject>(java_obj_); |
+} |
+ |
+void FeatureEngagementTrackerImplAndroid::EventJava( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj, |
+ const base::android::JavaParamRef<jstring>& jfeature, |
+ const base::android::JavaParamRef<jstring>& jprecondition) { |
+ std::string feature = ConvertJavaStringToUTF8(env, jfeature); |
+ std::string precondition = ConvertJavaStringToUTF8(env, jprecondition); |
+ Event(feature, precondition); |
+} |
+ |
+void FeatureEngagementTrackerImplAndroid::UsedJava( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj, |
+ const base::android::JavaParamRef<jstring>& jfeature) { |
+ std::string feature = ConvertJavaStringToUTF8(env, jfeature); |
+ Used(feature); |
+} |
+ |
+bool FeatureEngagementTrackerImplAndroid::TriggerJava( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj, |
+ const base::android::JavaParamRef<jstring>& jfeature) { |
+ std::string feature = ConvertJavaStringToUTF8(env, jfeature); |
+ return Trigger(feature); |
+} |
+ |
+void FeatureEngagementTrackerImplAndroid::DismissedJava( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj) { |
+ Dismissed(); |
+} |
+ |
+void FeatureEngagementTrackerImplAndroid::AddOnInitializedCallbackJava( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& jobj, |
+ const base::android::JavaParamRef<jobject>& j_callback_obj) { |
+ // TODO(nyquist): Implement support for the wrapped base::Callback. |
+} |
+ |
+} // namespace feature_engagement_tracker |