blob: bdad81cfe89b7b26440586cace083c20c86cd473 [file] [log] [blame]
// 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_item_bridge.h"
#include "base/android/jni_string.h"
#include "jni/OfflineItemBridge_jni.h"
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
namespace offline_items_collection {
namespace android {
namespace {
// Helper method to unify the OfflineItem conversion argument list to a single
// place. This is meant to reduce code churn from OfflineItem member
// modification. The behavior is as follows:
// - The method always returns the new Java OfflineItem instance.
// - If |jlist| is specified (an ArrayList<OfflineItem>), the item is added to
// that list. |jlist| can also be null, in which case the item isn't added to
// anything.
ScopedJavaLocalRef<jobject>
JNI_OfflineItemBridge_createOfflineItemAndMaybeAddToList(
JNIEnv* env,
ScopedJavaLocalRef<jobject> jlist,
const OfflineItem& item) {
return Java_OfflineItemBridge_createOfflineItemAndMaybeAddToList(
env, jlist, ConvertUTF8ToJavaString(env, item.id.name_space),
ConvertUTF8ToJavaString(env, item.id.id),
ConvertUTF8ToJavaString(env, item.title),
ConvertUTF8ToJavaString(env, item.description),
static_cast<jint>(item.filter), item.is_transient, item.is_suggested,
item.is_accelerated, item.refresh_visuals, item.promote_origin,
item.total_size_bytes, item.externally_removed,
item.creation_time.ToJavaTime(), item.completion_time.ToJavaTime(),
item.last_accessed_time.ToJavaTime(), item.is_openable,
ConvertUTF8ToJavaString(env, item.file_path.value()),
ConvertUTF8ToJavaString(env, item.mime_type),
ConvertUTF8ToJavaString(env, item.page_url.spec()),
ConvertUTF8ToJavaString(env, item.original_url.spec()),
item.is_off_the_record, static_cast<jint>(item.state),
static_cast<jint>(item.pending_state), item.is_resumable,
item.allow_metered, item.received_bytes, item.progress.value,
item.progress.max.value_or(-1), static_cast<jint>(item.progress.unit),
item.time_remaining_ms, item.is_dangerous);
}
} // namespace
// static
ScopedJavaLocalRef<jobject> OfflineItemBridge::CreateOfflineItem(
JNIEnv* env,
const OfflineItem& item) {
return JNI_OfflineItemBridge_createOfflineItemAndMaybeAddToList(env, nullptr,
item);
}
// static
ScopedJavaLocalRef<jobject> OfflineItemBridge::CreateOfflineItemList(
JNIEnv* env,
const std::vector<OfflineItem>& items) {
ScopedJavaLocalRef<jobject> jlist =
Java_OfflineItemBridge_createArrayList(env);
for (const auto& item : items)
JNI_OfflineItemBridge_createOfflineItemAndMaybeAddToList(env, jlist, item);
return jlist;
}
OfflineItemBridge::OfflineItemBridge() = default;
} // namespace android
} // namespace offline_items_collection