10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/battery_status/battery_status_manager_android.h"
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_android.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/android/scoped_java_ref.h"
9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/metrics/histogram.h"
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "jni/BatteryStatusManager_jni.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochusing base::android::AttachCurrentThread;
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace content {
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBatteryStatusManagerAndroid::BatteryStatusManagerAndroid(
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    const BatteryStatusService::BatteryUpdateCallback& callback)
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : callback_(callback) {
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  j_manager_.Reset(
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      Java_BatteryStatusManager_getInstance(
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          AttachCurrentThread(), base::android::GetApplicationContext()));
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben MurdochBatteryStatusManagerAndroid::~BatteryStatusManagerAndroid() {
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool BatteryStatusManagerAndroid::Register(JNIEnv* env) {
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return RegisterNativesImpl(env);
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid BatteryStatusManagerAndroid::GotBatteryStatus(JNIEnv*,
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                   jobject,
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                   jboolean charging,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                   jdouble charging_time,
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                   jdouble discharging_time,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                                   jdouble level) {
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  blink::WebBatteryStatus status;
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  status.charging = charging;
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  status.chargingTime = charging_time;
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  status.dischargingTime = discharging_time;
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  status.level = level;
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  callback_.Run(status);
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool BatteryStatusManagerAndroid::StartListeningBatteryChange() {
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool result = Java_BatteryStatusManager_start(AttachCurrentThread(),
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      j_manager_.obj(), reinterpret_cast<intptr_t>(this));
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  UMA_HISTOGRAM_BOOLEAN("BatteryStatus.StartAndroid", result);
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return result;
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid BatteryStatusManagerAndroid::StopListeningBatteryChange() {
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  Java_BatteryStatusManager_stop(
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      AttachCurrentThread(), j_manager_.obj());
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_ptr<BatteryStatusManager> BatteryStatusManager::Create(
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    const BatteryStatusService::BatteryUpdateCallback& callback) {
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return scoped_ptr<BatteryStatusManager>(
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      new BatteryStatusManagerAndroid(callback));
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace content
66