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