blob: 505d81b01b5d10b85d5d66d5736d89fb4ec479ed [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/download/network/android/network_status_listener_android.h"
#include "base/android/jni_android.h"
#include "base/trace_event/trace_event.h"
#include "jni/NetworkStatusListenerAndroid_jni.h"
namespace download {
NetworkStatusListenerAndroid::NetworkStatusListenerAndroid() = default;
NetworkStatusListenerAndroid::~NetworkStatusListenerAndroid() = default;
void NetworkStatusListenerAndroid::NotifyNetworkChange(
JNIEnv* env,
const base::android::JavaRef<jobject>& jobj,
jint connectionType) {
DCHECK(observer_);
using ConnectionType = network::mojom::ConnectionType;
ConnectionType connection_type = static_cast<ConnectionType>(connectionType);
observer_->OnNetworkChanged(connection_type);
}
void NetworkStatusListenerAndroid::Start(
NetworkStatusListener::Observer* observer) {
TRACE_EVENT0("download_service", "NetworkStatusListenerAndroid.Start");
NetworkStatusListener::Start(observer);
JNIEnv* env = base::android::AttachCurrentThread();
java_obj_.Reset(env, Java_NetworkStatusListenerAndroid_create(
env, reinterpret_cast<intptr_t>(this))
.obj());
}
void NetworkStatusListenerAndroid::Stop() {
NetworkStatusListener::Stop();
Java_NetworkStatusListenerAndroid_clearNativePtr(
base::android::AttachCurrentThread(), java_obj_);
}
network::mojom::ConnectionType
NetworkStatusListenerAndroid::GetConnectionType() {
int connection_type =
Java_NetworkStatusListenerAndroid_getCurrentConnectionType(
base::android::AttachCurrentThread(), java_obj_);
return static_cast<network::mojom::ConnectionType>(connection_type);
}
} // namespace download