1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/data_sharing/public/android/conversion_utils.h"
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "components/data_sharing/public/group_data.h"
#include "components/signin/public/identity_manager/account_info.h"
#include "google_apis/gaia/gaia_id.h"
#include "url/android/gurl_android.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "components/data_sharing/public/jni_headers/DataSharingNetworkResult_jni.h"
#include "components/data_sharing/public/jni_headers/GroupData_jni.h"
#include "components/data_sharing/public/jni_headers/GroupMember_jni.h"
#include "components/data_sharing/public/jni_headers/GroupToken_jni.h"
#include "components/data_sharing/public/jni_headers/SharedTabGroupPreview_jni.h"
#include "components/data_sharing/public/jni_headers/TabPreview_jni.h"
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
using base::android::ToJavaByteArray;
using base::android::ToTypedJavaArrayOfObjects;
namespace data_sharing::conversion {
ScopedJavaLocalRef<jobject> CreateJavaGroupMember(JNIEnv* env,
const GroupMember& member) {
auto gaia_id = member.gaia_id.empty()
? ScopedJavaLocalRef<jobject>()
: ConvertToJavaGaiaId(env, member.gaia_id);
return Java_GroupMember_createGroupMember(
env, gaia_id, ConvertUTF8ToJavaString(env, member.display_name),
ConvertUTF8ToJavaString(env, member.email), static_cast<int>(member.role),
url::GURLAndroid::FromNativeGURL(env, member.avatar_url),
ConvertUTF8ToJavaString(env, member.given_name));
}
ScopedJavaLocalRef<jobject> CreateJavaGroupToken(JNIEnv* env,
const GroupToken& token) {
return Java_GroupToken_createGroupToken(
env, ConvertUTF8ToJavaString(env, token.group_id.value()),
ConvertUTF8ToJavaString(env, token.access_token));
}
ScopedJavaLocalRef<jobject> CreateJavaGroupData(JNIEnv* env,
const GroupData& group_data) {
std::vector<ScopedJavaLocalRef<jobject>> j_members;
j_members.reserve(group_data.members.size());
for (const GroupMember& member : group_data.members) {
j_members.push_back(CreateJavaGroupMember(env, member));
}
return Java_GroupData_createGroupData(
env,
ConvertUTF8ToJavaString(env, group_data.group_token.group_id.value()),
ConvertUTF8ToJavaString(env, group_data.display_name),
ToTypedJavaArrayOfObjects(
env, base::span(j_members),
org_chromium_components_data_1sharing_GroupMember_clazz(env)),
ConvertUTF8ToJavaString(env, group_data.group_token.access_token));
}
ScopedJavaLocalRef<jobjectArray> CreateGroupedDataArray(
JNIEnv* env,
const std::set<GroupData>& groups) {
std::vector<ScopedJavaLocalRef<jobject>> j_groups_data;
for (const GroupData& group : groups) {
j_groups_data.push_back(CreateJavaGroupData(env, group));
}
ScopedJavaLocalRef<jobjectArray> j_group_array;
if (!j_groups_data.empty()) {
j_group_array = ToTypedJavaArrayOfObjects(
env, base::span(j_groups_data),
org_chromium_components_data_1sharing_GroupData_clazz(env));
}
return j_group_array;
}
ScopedJavaLocalRef<jobject> CreateJavaSharedTabGroupPreview(
JNIEnv* env,
const SharedTabGroupPreview& preview) {
std::vector<ScopedJavaLocalRef<jobject>> j_tabs;
for (const auto& tab : preview.tabs) {
j_tabs.push_back(Java_TabPreview_createTabPreview(
env, url::GURLAndroid::FromNativeGURL(env, tab.url),
ConvertUTF8ToJavaString(env, tab.GetDisplayUrl())));
}
ScopedJavaLocalRef<jobjectArray> j_tabs_array;
if (!j_tabs.empty()) {
j_tabs_array = ToTypedJavaArrayOfObjects(
env, base::span(j_tabs),
org_chromium_components_data_1sharing_TabPreview_clazz(env));
}
return Java_SharedTabGroupPreview_createSharedTabGroupPreview(
env, ConvertUTF8ToJavaString(env, preview.title), j_tabs_array);
}
ScopedJavaLocalRef<jobject> CreateDataSharingNetworkResult(
JNIEnv* env,
DataSharingNetworkLoader::LoadResult* response) {
if (response == nullptr) {
return ScopedJavaLocalRef<jobject>();
}
return Java_DataSharingNetworkResult_createDataSharingNetworkResult(
env,
ToJavaByteArray(env, std::vector<uint8_t>(response->result_bytes.begin(),
response->result_bytes.end())),
static_cast<int>(response->status), response->network_error_code);
}
} // namespace data_sharing::conversion
|