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

Unified Diff: components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc

Issue 2707003003: Initial checkin of the Java OfflineContentProvider (Closed)
Patch Set: Fixed findbugs warning Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc
diff --git a/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc
new file mode 100644
index 0000000000000000000000000000000000000000..52cca1872fa4d7ff92b144d99eb786e17d54369f
--- /dev/null
+++ b/components/offline_items_collection/core/android/offline_content_aggregator_bridge.cc
@@ -0,0 +1,174 @@
+// 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/offline_items_collection/core/android/offline_content_aggregator_bridge.h"
+
+#include "base/android/jni_string.h"
+#include "components/offline_items_collection/core/android/offline_item_bridge.h"
+#include "components/offline_items_collection/core/offline_item.h"
+#include "jni/OfflineContentAggregatorBridge_jni.h"
+
+using base::android::AttachCurrentThread;
+using base::android::ConvertJavaStringToUTF8;
+using base::android::ConvertUTF8ToJavaString;
+using base::android::JavaParamRef;
+using base::android::ScopedJavaLocalRef;
+
+namespace offline_items_collection {
+namespace android {
+
+namespace {
+const char kOfflineContentAggregatorBridgeUserDataKey[] = "aggregator_bridge";
+
+ContentId CreateContentId(JNIEnv* env,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ return ContentId(ConvertJavaStringToUTF8(env, j_namespace),
+ ConvertJavaStringToUTF8(env, j_id));
+}
+
+} // namespace
+
+// static.
+bool OfflineContentAggregatorBridge::Register(JNIEnv* env) {
+ return RegisterNativesImpl(env);
+}
+
+// static
+OfflineContentAggregatorBridge*
+OfflineContentAggregatorBridge::GetForOfflineContentAggregator(
+ OfflineContentAggregator* aggregator) {
+ if (!aggregator->GetUserData(kOfflineContentAggregatorBridgeUserDataKey)) {
+ aggregator->SetUserData(kOfflineContentAggregatorBridgeUserDataKey,
+ new OfflineContentAggregatorBridge(aggregator));
+ }
+
+ return static_cast<OfflineContentAggregatorBridge*>(
+ aggregator->GetUserData(kOfflineContentAggregatorBridgeUserDataKey));
+}
+
+OfflineContentAggregatorBridge::OfflineContentAggregatorBridge(
+ OfflineContentAggregator* aggregator)
+ : aggregator_(aggregator) {
+ JNIEnv* env = AttachCurrentThread();
+ java_ref_.Reset(Java_OfflineContentAggregatorBridge_create(
+ env, reinterpret_cast<intptr_t>(this)));
+
+ aggregator_->AddObserver(this);
+}
+
+OfflineContentAggregatorBridge::~OfflineContentAggregatorBridge() {
+ // TODO(dtrainor): Do not need to unregister because in the destructor of the
+ // base class of OfflineContentAggregator. Is |observers_| already dead?
+ aggregator_->RemoveObserver(this);
+
+ Java_OfflineContentAggregatorBridge_onNativeDestroyed(AttachCurrentThread(),
+ java_ref_.obj());
+}
+
+jboolean OfflineContentAggregatorBridge::AreItemsAvailable(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj) {
+ return aggregator_->AreItemsAvailable();
+}
+
+void OfflineContentAggregatorBridge::OpenItem(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ aggregator_->OpenItem(CreateContentId(env, j_namespace, j_id));
+}
+
+void OfflineContentAggregatorBridge::RemoveItem(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ aggregator_->RemoveItem(CreateContentId(env, j_namespace, j_id));
+}
+
+void OfflineContentAggregatorBridge::CancelDownload(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ aggregator_->CancelDownload(CreateContentId(env, j_namespace, j_id));
+}
+
+void OfflineContentAggregatorBridge::PauseDownload(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_guid) {
+ aggregator_->PauseDownload(CreateContentId(env, j_namespace, j_guid));
+}
+
+void OfflineContentAggregatorBridge::ResumeDownload(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ aggregator_->ResumeDownload(CreateContentId(env, j_namespace, j_id));
+}
+
+ScopedJavaLocalRef<jobject> OfflineContentAggregatorBridge::GetItemById(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj,
+ const JavaParamRef<jstring>& j_namespace,
+ const JavaParamRef<jstring>& j_id) {
+ const OfflineItem* item =
+ aggregator_->GetItemById(CreateContentId(env, j_namespace, j_id));
+
+ return OfflineItemBridge::CreateOfflineItem(env, item);
+}
+
+ScopedJavaLocalRef<jobject> OfflineContentAggregatorBridge::GetAllItems(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& jobj) {
+ return OfflineItemBridge::CreateOfflineItemList(env,
+ aggregator_->GetAllItems());
+}
+
+void OfflineContentAggregatorBridge::OnItemsAvailable(
+ OfflineContentProvider* provider) {
+ if (java_ref_.is_null())
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_OfflineContentAggregatorBridge_onItemsAvailable(env, java_ref_.obj());
+}
+
+void OfflineContentAggregatorBridge::OnItemsAdded(
+ const OfflineContentProvider::OfflineItemList& items) {
+ if (java_ref_.is_null())
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_OfflineContentAggregatorBridge_onItemsAdded(
+ env, java_ref_.obj(),
+ OfflineItemBridge::CreateOfflineItemList(env, items));
+}
+
+void OfflineContentAggregatorBridge::OnItemRemoved(const ContentId& id) {
+ if (java_ref_.is_null())
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_OfflineContentAggregatorBridge_onItemRemoved(
+ env, java_ref_.obj(), ConvertUTF8ToJavaString(env, id.name_space),
+ ConvertUTF8ToJavaString(env, id.id));
+}
+
+void OfflineContentAggregatorBridge::OnItemUpdated(const OfflineItem& item) {
+ if (java_ref_.is_null())
+ return;
+
+ JNIEnv* env = AttachCurrentThread();
+ Java_OfflineContentAggregatorBridge_onItemUpdated(
+ env, java_ref_.obj(), OfflineItemBridge::CreateOfflineItem(env, &item));
+}
+
+} // namespace android
+} // namespace offline_items_collection

Powered by Google App Engine
This is Rietveld 408576698