blob: afa8771c14143327e51ff4d7fbdea626a3ff3ffa [file] [log] [blame]
// Copyright 2016 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 "chrome/browser/android/contextualsearch/ctr_suppression.h"
#include <set>
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "chrome/android/chrome_jni_headers/CtrSuppression_jni.h"
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
using contextual_search::CtrAggregator;
CtrSuppression::CtrSuppression(JNIEnv* env, jobject obj)
: WeeklyActivityStorage(contextual_search::kNumWeeksNeededFor28DayData) {
java_object_.Reset(env, obj);
// NOTE: Creating the aggregator needs to be done after setting up the Java
// object because the constructor will call back through the Java object
// to access storage.
aggregator_.reset(new CtrAggregator(*this));
DCHECK(aggregator_);
}
CtrSuppression::~CtrSuppression() {
JNIEnv* env = AttachCurrentThread();
Java_CtrSuppression_clearNativePointer(env, java_object_);
}
// Java conduit
void CtrSuppression::RecordImpression(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jboolean did_click) {
aggregator_->RecordImpression(did_click);
}
jint CtrSuppression::GetCurrentWeekNumber(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->GetCurrentWeekNumber();
}
jboolean CtrSuppression::HasPreviousWeekData(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->HasPreviousWeekData();
}
jint CtrSuppression::GetPreviousWeekImpressions(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->GetPreviousWeekImpressions();
}
jfloat CtrSuppression::GetPreviousWeekCtr(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->GetPreviousWeekCtr();
}
jboolean CtrSuppression::HasPrevious28DayData(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->HasPrevious28DayData();
}
jint CtrSuppression::GetPrevious28DayImpressions(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->GetPrevious28DayImpressions();
}
jfloat CtrSuppression::GetPrevious28DayCtr(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return aggregator_->GetPrevious28DayCtr();
}
// WeeklyActivityStorage overrides
int CtrSuppression::ReadClicksForWeekRemainder(int week_remainder) {
JNIEnv* env = AttachCurrentThread();
return Java_CtrSuppression_readClicks(env, java_object_, week_remainder);
}
int CtrSuppression::ReadImpressionsForWeekRemainder(int week_remainder) {
JNIEnv* env = AttachCurrentThread();
return Java_CtrSuppression_readImpressions(env, java_object_, week_remainder);
}
int CtrSuppression::ReadOldestWeekWritten() {
JNIEnv* env = AttachCurrentThread();
return Java_CtrSuppression_readOldestWeek(env, java_object_);
}
int CtrSuppression::ReadNewestWeekWritten() {
JNIEnv* env = AttachCurrentThread();
return Java_CtrSuppression_readNewestWeek(env, java_object_);
}
void CtrSuppression::WriteClicksForWeekRemainder(int week_remainder,
int value) {
JNIEnv* env = AttachCurrentThread();
Java_CtrSuppression_writeClicks(env, java_object_, week_remainder, value);
}
void CtrSuppression::WriteImpressionsForWeekRemainder(int week_remainder,
int value) {
JNIEnv* env = AttachCurrentThread();
Java_CtrSuppression_writeImpressions(env, java_object_, week_remainder,
value);
}
void CtrSuppression::WriteOldestWeekWritten(int value) {
JNIEnv* env = AttachCurrentThread();
Java_CtrSuppression_writeOldestWeek(env, java_object_, value);
}
void CtrSuppression::WriteNewestWeekWritten(int value) {
JNIEnv* env = AttachCurrentThread();
Java_CtrSuppression_writeNewestWeek(env, java_object_, value);
}
// Java wrapper boilerplate
void CtrSuppression::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
delete this;
}
jlong JNI_CtrSuppression_Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
CtrSuppression* suppression = new CtrSuppression(env, obj);
return reinterpret_cast<intptr_t>(suppression);
}