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

Side by Side Diff: components/feature_engagement_tracker/internal/android/feature_engagement_tracker_impl_android.cc

Issue 2782113002: Add component for feature engagement tracking. (Closed)
Patch Set: Fix typo in //chrome/android/java/DEPS Created 3 years, 8 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/feature_engagement_tracker/internal/android/feature_engagem ent_tracker_impl_android.h"
6
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/android/scoped_java_ref.h"
10 #include "components/feature_engagement_tracker/public/feature_engagement_tracke r.h"
11 #include "jni/FeatureEngagementTrackerImpl_jni.h"
12
13 namespace feature_engagement_tracker {
14
15 namespace {
16
17 const char kFeatureEngagementTrackerImplAndroidKey[] =
18 "feature_engagement_tracker_impl_android";
19
20 FeatureEngagementTrackerImplAndroid* FromFeatureEngagementTrackerImpl(
21 FeatureEngagementTracker* feature_engagement_tracker) {
22 FeatureEngagementTrackerImpl* impl =
23 static_cast<FeatureEngagementTrackerImpl*>(feature_engagement_tracker);
24 FeatureEngagementTrackerImplAndroid* impl_android =
25 static_cast<FeatureEngagementTrackerImplAndroid*>(
26 impl->GetUserData(kFeatureEngagementTrackerImplAndroidKey));
27 if (!impl_android) {
28 impl_android = new FeatureEngagementTrackerImplAndroid(impl);
29 impl->SetUserData(kFeatureEngagementTrackerImplAndroidKey, impl_android);
30 }
31 return impl_android;
32 }
33
34 } // namespace
35
36 // static
37 bool FeatureEngagementTrackerImplAndroid::RegisterJni(JNIEnv* env) {
38 return RegisterNativesImpl(env);
39 }
40
41 // static
42 FeatureEngagementTrackerImplAndroid*
43 FeatureEngagementTrackerImplAndroid::FromJavaObject(
44 JNIEnv* env,
45 const base::android::JavaRef<jobject>& jobj) {
46 return reinterpret_cast<FeatureEngagementTrackerImplAndroid*>(
47 Java_FeatureEngagementTrackerImpl_getNativePtr(env, jobj));
48 }
49
50 // This function is declared in
51 // //components/feature_engagement_tracker/public/feature_engagement_tracker.h
52 // and should be linked in to any binary using
53 // FeatureEngagementTracker::GetJavaObject.
54 // static
55 base::android::ScopedJavaLocalRef<jobject>
56 FeatureEngagementTracker::GetJavaObject(
57 FeatureEngagementTracker* feature_engagement_tracker) {
58 return FromFeatureEngagementTrackerImpl(feature_engagement_tracker)
59 ->GetJavaObject();
60 }
61
62 FeatureEngagementTrackerImplAndroid::FeatureEngagementTrackerImplAndroid(
63 FeatureEngagementTrackerImpl* feature_engagement_tracker_impl)
64 : feature_engagement_tracker_impl_(feature_engagement_tracker_impl) {
65 JNIEnv* env = base::android::AttachCurrentThread();
66
67 java_obj_.Reset(env, Java_FeatureEngagementTrackerImpl_create(
68 env, reinterpret_cast<intptr_t>(this))
69 .obj());
70 }
71
72 FeatureEngagementTrackerImplAndroid::~FeatureEngagementTrackerImplAndroid() {
73 Java_FeatureEngagementTrackerImpl_clearNativePtr(
74 base::android::AttachCurrentThread(), java_obj_);
75 }
76
77 base::android::ScopedJavaLocalRef<jobject>
78 FeatureEngagementTrackerImplAndroid::GetJavaObject() {
79 return base::android::ScopedJavaLocalRef<jobject>(java_obj_);
80 }
81
82 void FeatureEngagementTrackerImplAndroid::Event(
83 JNIEnv* env,
84 const base::android::JavaRef<jobject>& jobj,
85 const base::android::JavaParamRef<jstring>& jfeature,
86 const base::android::JavaParamRef<jstring>& jprecondition) {
87 std::string feature = ConvertJavaStringToUTF8(env, jfeature);
88 std::string precondition = ConvertJavaStringToUTF8(env, jprecondition);
89 feature_engagement_tracker_impl_->Event(feature, precondition);
90 }
91
92 void FeatureEngagementTrackerImplAndroid::Used(
93 JNIEnv* env,
94 const base::android::JavaRef<jobject>& jobj,
95 const base::android::JavaParamRef<jstring>& jfeature) {
96 std::string feature = ConvertJavaStringToUTF8(env, jfeature);
97 feature_engagement_tracker_impl_->Used(feature);
98 }
99
100 bool FeatureEngagementTrackerImplAndroid::Trigger(
101 JNIEnv* env,
102 const base::android::JavaRef<jobject>& jobj,
103 const base::android::JavaParamRef<jstring>& jfeature) {
104 std::string feature = ConvertJavaStringToUTF8(env, jfeature);
105 return feature_engagement_tracker_impl_->Trigger(feature);
106 }
107
108 void FeatureEngagementTrackerImplAndroid::Dismissed(
109 JNIEnv* env,
110 const base::android::JavaRef<jobject>& jobj) {
111 feature_engagement_tracker_impl_->Dismissed();
112 }
113
114 void FeatureEngagementTrackerImplAndroid::AddOnInitializedCallback(
115 JNIEnv* env,
116 const base::android::JavaRef<jobject>& jobj,
117 const base::android::JavaParamRef<jobject>& j_callback_obj) {
118 // TODO(nyquist): Implement support for the wrapped base::Callback.
119 }
120
121 } // namespace feature_engagement_tracker
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698