Files
brave-core/browser/sync/brave_sync_devices_android.cc
T
mkarolin 8ac1f664cf Adapt to relocation of components/sync/driver/profile_sync_service.* II.
Followup to a prior commit that follows upstream and renames
ProfileSyncService to SyncServiceImpl in various class names.
2021-08-18 11:00:03 -04:00

136 lines
4.6 KiB
C++

/* Copyright (c) 2020 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "brave/browser/sync/brave_sync_devices_android.h"
#include <string>
#include <utility>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/json/json_writer.h"
#include "brave/build/android/jni_headers/BraveSyncDevices_jni.h"
#include "brave/components/brave_sync/sync_service_impl_helper.h"
#include "brave/components/sync/driver/brave_sync_service_impl.h"
#include "brave/components/sync_device_info/brave_device_info.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/sync/device_info_sync_service_factory.h"
#include "chrome/browser/sync/sync_service_factory.h"
#include "components/sync_device_info/device_info_sync_service.h"
#include "components/sync_device_info/device_info_tracker.h"
#include "components/sync_device_info/local_device_info_provider.h"
namespace chrome {
namespace android {
BraveSyncDevicesAndroid::BraveSyncDevicesAndroid(
JNIEnv* env, const base::android::JavaRef<jobject>& obj) :
weak_java_brave_sync_worker_(env, obj) {
Java_BraveSyncDevices_setNativePtr(env, obj,
reinterpret_cast<intptr_t>(this));
profile_ =
ProfileManager::GetActiveUserProfile()->GetOriginalProfile();
DCHECK_NE(profile_, nullptr);
syncer::DeviceInfoTracker* tracker =
DeviceInfoSyncServiceFactory::GetForProfile(profile_)
->GetDeviceInfoTracker();
DCHECK(tracker);
if (tracker) {
device_info_tracker_observer_.Observe(tracker);
}
}
BraveSyncDevicesAndroid::~BraveSyncDevicesAndroid() {
// Observer will be removed by ScopedObservation
}
void BraveSyncDevicesAndroid::Destroy(JNIEnv* env) {
delete this;
}
void BraveSyncDevicesAndroid::OnDeviceInfoChange() {
// Notify Java code
JNIEnv* env = base::android::AttachCurrentThread();
Java_BraveSyncDevices_deviceInfoChanged(env,
weak_java_brave_sync_worker_.get(env));
}
base::Value BraveSyncDevicesAndroid::GetSyncDeviceList() {
auto* device_info_service =
DeviceInfoSyncServiceFactory::GetForProfile(profile_);
syncer::DeviceInfoTracker* tracker =
device_info_service->GetDeviceInfoTracker();
DCHECK(tracker);
const syncer::DeviceInfo* local_device_info = device_info_service
->GetLocalDeviceInfoProvider()->GetLocalDeviceInfo();
base::Value device_list(base::Value::Type::LIST);
for (const auto& device : tracker->GetAllBraveDeviceInfo()) {
auto device_value = base::Value::FromUniquePtrValue(device->ToValue());
bool is_current_device = local_device_info
? local_device_info->guid() == device->guid()
: false;
device_value.SetBoolKey("isCurrentDevice", is_current_device);
// DeviceInfo::ToValue doesn't put guid
device_value.SetStringKey("guid", device->guid());
device_value.SetBoolKey("supportsSelfDelete",
device->is_self_delete_supported());
device_list.Append(std::move(device_value));
}
return device_list;
}
base::android::ScopedJavaLocalRef<jstring>
BraveSyncDevicesAndroid::GetSyncDeviceListJson(JNIEnv* env) {
base::Value device_list = GetSyncDeviceList();
std::string json_string;
if (!base::JSONWriter::Write(device_list, &json_string)) {
VLOG(1) << "Writing as JSON failed. Passing empty string to Java code.";
json_string = std::string();
}
return base::android::ConvertUTF8ToJavaString(env, json_string);
}
// TODO(AlexeyBarabash): duplicate with BraveSyncWorker?
syncer::BraveSyncServiceImpl* BraveSyncDevicesAndroid::GetSyncService() const {
return SyncServiceFactory::IsSyncAllowed(profile_)
? static_cast<syncer::BraveSyncServiceImpl*>(
SyncServiceFactory::GetForProfile(profile_))
: nullptr;
}
void BraveSyncDevicesAndroid::DeleteDevice(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& device_guid) {
std::string str_device_guid =
base::android::ConvertJavaStringToUTF8(device_guid);
auto* sync_service = GetSyncService();
DCHECK(sync_service);
auto* device_info_sync_service =
DeviceInfoSyncServiceFactory::GetForProfile(profile_);
DCHECK(device_info_sync_service);
brave_sync::DeleteDevice(sync_service, device_info_sync_service,
str_device_guid);
}
static void JNI_BraveSyncDevices_Init(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller) {
new BraveSyncDevicesAndroid(env, jcaller);
}
} // namespace android
} // namespace chrome