/*
* Copyright 2011 Artiom Chilaru (http://flexlabs.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.flexlabs.widgets.dualbattery;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import java.util.Date;
public class BatteryLevel {
private static BatteryLevel _instance;
public static Date dockLastConnected = null, lastCharged = null;
public static Integer lastDockLevel = null;
private boolean _dockFriendly;
private int _status;
private int _level;
private int _dock_status;
private int _dock_level;
private BatteryLevel() { }
public static void update(BatteryLevel level) { _instance = level; }
public static BatteryLevel getCurrent() {
if (_instance == null) {
Intent intent = BatteryApplication.getInstance().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
_instance = parse(intent.getExtras());
}
return _instance;
}
public static BatteryLevel parse(Bundle extras) {
if (extras == null)
return null;
BatteryLevel level = new BatteryLevel();
level._status = extras.getInt("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
level._level = extras.getInt("level");
level._dock_status = extras.getInt("dock_status", Constants.DOCK_STATE_UNKNOWN);
level._dock_level = extras.getInt("dock_level", -1);
level._dockFriendly = extras.containsKey("dock_level");
return level;
}
public boolean isDifferent(BatteryLevel level) {
return
level == null ||
level._level != _level ||
level._status != _status ||
level._dock_status != _dock_status ||
level._dock_level != _dock_level;
}
public boolean is_dockFriendly() {
return _dockFriendly;
}
public boolean is_dockConnected() {
return (_dockFriendly && _dock_status >= Constants.DOCK_STATE_CHARGING && _dock_level >= 0);
}
public int get_status() {
return _status;
}
public int get_level() {
return _level;
}
public int get_dock_status() {
if (!_dockFriendly)
return Constants.DOCK_STATE_UNKNOWN;
return _dock_status;
}
public Integer get_dock_level() {
if (is_dockConnected())
return _dock_level;
return null;
}
public void undock() {
_dock_status = Constants.DOCK_STATE_UNDOCKED;
}
public void dock(int dock_level) {
_dock_status = Constants.DOCK_STATE_DOCKED;
_dock_level = dock_level;
}
}