1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/browser/battery_status/battery_status_manager_android.h"
6
7#include "base/android/jni_android.h"
8#include "base/android/scoped_java_ref.h"
9#include "base/metrics/histogram.h"
10#include "jni/BatteryStatusManager_jni.h"
11
12using base::android::AttachCurrentThread;
13
14namespace content {
15
16BatteryStatusManagerAndroid::BatteryStatusManagerAndroid(
17    const BatteryStatusService::BatteryUpdateCallback& callback)
18    : callback_(callback) {
19  j_manager_.Reset(
20      Java_BatteryStatusManager_getInstance(
21          AttachCurrentThread(), base::android::GetApplicationContext()));
22}
23
24BatteryStatusManagerAndroid::~BatteryStatusManagerAndroid() {
25}
26
27// static
28bool BatteryStatusManagerAndroid::Register(JNIEnv* env) {
29  return RegisterNativesImpl(env);
30}
31
32void BatteryStatusManagerAndroid::GotBatteryStatus(JNIEnv*,
33                                                   jobject,
34                                                   jboolean charging,
35                                                   jdouble charging_time,
36                                                   jdouble discharging_time,
37                                                   jdouble level) {
38  blink::WebBatteryStatus status;
39  status.charging = charging;
40  status.chargingTime = charging_time;
41  status.dischargingTime = discharging_time;
42  status.level = level;
43  callback_.Run(status);
44}
45
46bool BatteryStatusManagerAndroid::StartListeningBatteryChange() {
47  bool result = Java_BatteryStatusManager_start(AttachCurrentThread(),
48      j_manager_.obj(), reinterpret_cast<intptr_t>(this));
49  UMA_HISTOGRAM_BOOLEAN("BatteryStatus.StartAndroid", result);
50  return result;
51}
52
53void BatteryStatusManagerAndroid::StopListeningBatteryChange() {
54  Java_BatteryStatusManager_stop(
55      AttachCurrentThread(), j_manager_.obj());
56}
57
58// static
59scoped_ptr<BatteryStatusManager> BatteryStatusManager::Create(
60    const BatteryStatusService::BatteryUpdateCallback& callback) {
61  return scoped_ptr<BatteryStatusManager>(
62      new BatteryStatusManagerAndroid(callback));
63}
64
65}  // namespace content
66