blob: 85f65349ab2bb8822530f1cf397ddb8aabe98129 [file] [log] [blame]
// Copyright 2020 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/feed/v2/feed_stream_surface.h"
#include <vector>
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "chrome/android/chrome_jni_headers/FeedStreamSurface_jni.h"
#include "chrome/browser/android/feed/v2/feed_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "components/feed/core/proto/v2/ui.pb.h"
#include "components/feed/core/v2/public/feed_service.h"
#include "components/feed/core/v2/public/feed_stream_api.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaLocalRef;
using base::android::ToJavaByteArray;
namespace feed {
static jlong JNI_FeedStreamSurface_Init(JNIEnv* env,
const JavaParamRef<jobject>& j_this) {
return reinterpret_cast<intptr_t>(new FeedStreamSurface(j_this));
}
FeedStreamSurface::FeedStreamSurface(const JavaRef<jobject>& j_this)
: feed_stream_api_(nullptr) {
java_ref_.Reset(j_this);
// TODO(iwells): check that this profile is okay to use. what about first run?
Profile* profile = ProfileManager::GetLastUsedProfile();
if (!profile)
return;
feed_stream_api_ =
FeedServiceFactory::GetForBrowserContext(profile)->GetStream();
}
FeedStreamSurface::~FeedStreamSurface() {
if (feed_stream_api_)
feed_stream_api_->DetachSurface(this);
}
void FeedStreamSurface::StreamUpdate(
const feedui::StreamUpdate& stream_update) {
JNIEnv* env = base::android::AttachCurrentThread();
int32_t data_size = stream_update.ByteSize();
std::vector<uint8_t> data;
data.resize(data_size);
stream_update.SerializeToArray(data.data(), data_size);
ScopedJavaLocalRef<jbyteArray> j_data =
ToJavaByteArray(env, data.data(), data_size);
Java_FeedStreamSurface_onStreamUpdated(env, java_ref_, j_data);
}
void FeedStreamSurface::LoadMore(JNIEnv* env,
const JavaParamRef<jobject>& obj) {}
void FeedStreamSurface::ProcessThereAndBackAgain(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jbyteArray>& data) {}
int FeedStreamSurface::ExecuteEphemeralChange(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& data) {
return 0;
}
void FeedStreamSurface::CommitEphemeralChange(JNIEnv* env,
const JavaParamRef<jobject>& obj,
int change_id) {}
void FeedStreamSurface::DiscardEphemeralChange(JNIEnv* env,
const JavaParamRef<jobject>& obj,
int change_id) {}
void FeedStreamSurface::SurfaceOpened(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
if (feed_stream_api_ && !attached_) {
attached_ = true;
feed_stream_api_->AttachSurface(this);
}
}
void FeedStreamSurface::SurfaceClosed(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
if (feed_stream_api_ && attached_) {
attached_ = false;
feed_stream_api_->DetachSurface(this);
}
}
void FeedStreamSurface::ReportOpenAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& slice_id) {
feed_stream_api_->ReportOpenAction(
base::android::ConvertJavaStringToUTF8(env, slice_id));
}
void FeedStreamSurface::ReportOpenInNewTabAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& slice_id) {
feed_stream_api_->ReportOpenInNewTabAction(
base::android::ConvertJavaStringToUTF8(env, slice_id));
}
void FeedStreamSurface::ReportOpenInNewIncognitoTabAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportOpenInNewIncognitoTabAction();
}
void FeedStreamSurface::ReportSliceViewed(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& slice_id) {
feed_stream_api_->ReportSliceViewed(
base::android::ConvertJavaStringToUTF8(env, slice_id));
}
void FeedStreamSurface::ReportSendFeedbackAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportSendFeedbackAction();
}
void FeedStreamSurface::ReportLearnMoreAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportLearnMoreAction();
}
void FeedStreamSurface::ReportDownloadAction(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportDownloadAction();
}
void FeedStreamSurface::ReportNavigationStarted(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& url,
jboolean in_new_tab) {
feed_stream_api_->ReportNavigationStarted();
}
void FeedStreamSurface::ReportNavigationDone(JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& url,
jboolean in_new_tab) {
feed_stream_api_->ReportNavigationDone();
}
void FeedStreamSurface::ReportRemoveAction(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportRemoveAction();
}
void FeedStreamSurface::ReportNotInterestedInAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportNotInterestedInAction();
}
void FeedStreamSurface::ReportManageInterestsAction(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportManageInterestsAction();
}
void FeedStreamSurface::ReportContextMenuOpened(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
feed_stream_api_->ReportContextMenuOpened();
}
void FeedStreamSurface::ReportStreamScrolled(JNIEnv* env,
const JavaParamRef<jobject>& obj,
int distance_dp) {
feed_stream_api_->ReportStreamScrolled(distance_dp);
}
} // namespace feed