BatteryController.java revision 853b070f19801058182ac1172d7c21c7651253c8
1/* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.systemui.statusbar.policy; 18 19import com.android.internal.app.IBatteryStats; 20import com.android.systemui.R; 21import com.android.systemui.statusbar.phone.StatusBarHeaderView; 22 23import android.content.BroadcastReceiver; 24import android.content.Context; 25import android.content.Intent; 26import android.content.IntentFilter; 27import android.os.BatteryManager; 28import android.os.BatteryStats; 29import android.os.RemoteException; 30import android.os.ServiceManager; 31import android.text.format.Formatter; 32import android.util.Log; 33 34import java.util.ArrayList; 35 36public class BatteryController extends BroadcastReceiver { 37 private static final String TAG = "StatusBar.BatteryController"; 38 39 private ArrayList<BatteryStateChangeCallback> mChangeCallbacks = new ArrayList<>(); 40 41 private int mLevel; 42 private boolean mPluggedIn; 43 private boolean mCharging; 44 private boolean mCharged; 45 46 public interface BatteryStateChangeCallback { 47 public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging); 48 } 49 50 public BatteryController(Context context) { 51 IntentFilter filter = new IntentFilter(); 52 filter.addAction(Intent.ACTION_BATTERY_CHANGED); 53 context.registerReceiver(this, filter); 54 } 55 56 public void addStateChangedCallback(BatteryStateChangeCallback cb) { 57 mChangeCallbacks.add(cb); 58 cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging); 59 } 60 61 public void removeStateChangedCallback(BatteryStateChangeCallback cb) { 62 mChangeCallbacks.remove(cb); 63 } 64 65 public void onReceive(Context context, Intent intent) { 66 final String action = intent.getAction(); 67 if (action.equals(Intent.ACTION_BATTERY_CHANGED)) { 68 mLevel = (int)(100f 69 * intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0) 70 / intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100)); 71 mPluggedIn = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; 72 73 final int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 74 BatteryManager.BATTERY_STATUS_UNKNOWN); 75 mCharged = status == BatteryManager.BATTERY_STATUS_FULL; 76 mCharging = mCharged || status == BatteryManager.BATTERY_STATUS_CHARGING; 77 78 for (BatteryStateChangeCallback cb : mChangeCallbacks) { 79 cb.onBatteryLevelChanged(mLevel, mPluggedIn, mCharging); 80 } 81 } 82 } 83} 84