/*
* Copyright (C) 2013 The CyanogenMod Project
*
* 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 com.cyanogenmod.asusdec;
import android.content.Context;
import android.os.BatteryManager;
import android.os.Bundle;
import com.android.internal.os.DeviceDockBatteryHandler;
public final class DockBatteryHandler implements DeviceDockBatteryHandler {
private static final String TAG = "AsusdecDockBatteryHandler";
private static final boolean DEBUG = false;
private static final int DOCK_BATTERY_STATUS_UNKNOWN =
BatteryManager.BATTERY_STATUS_UNKNOWN;
private static final int DOCK_BATTERY_STATUS_CHARGING =
BatteryManager.BATTERY_STATUS_CHARGING;
private static final int DOCK_BATTERY_STATUS_NOT_CHARGING =
BatteryManager.BATTERY_STATUS_NOT_CHARGING;
private Context mContext;
/* Begin native fields: All of these fields are set by native code. */
private int mDockBatteryStatus;
private int mDockBatteryLevel;
private boolean mDockBatteryPresent;
private int mDockBatteryPlugged;
private boolean mPadUsbOnline;
private boolean mAcOnline;
private boolean mDockAcOnline;
/* End native fields. */
private boolean mInitial;
private int mLastDockBatteryStatus;
private int mLastDockBatteryLevel;
private boolean mLastDockBatteryPresent;
private int mLastDockBatteryPlugged;
private boolean mLastPadUsbOnline;
private boolean mLastAcOnline;
private boolean mLastDockAcOnline;
private Object mLock = new Object();
private boolean mIgnoreUpdates = false;
static {
AsusdecNative.loadAsusdecLib();
}
public DockBatteryHandler(Context context) {
mContext = context;
mInitial = true;
}
@Override
public void update() {
nativeDockBatteryUpdate();
}
@Override
public void process() {
mDockBatteryPlugged = 0;
if (this.mDockAcOnline || this.mAcOnline) {
mDockBatteryPlugged = BatteryManager.BATTERY_PLUGGED_AC;
} else if (this.mPadUsbOnline) {
mDockBatteryPlugged = BatteryManager.BATTERY_PLUGGED_USB;
}
}
public Bundle getNotifyData() {
Bundle bundle = new Bundle();
// Common data
bundle.putInt(BatteryManager.EXTRA_DOCK_STATUS, this.mDockBatteryStatus);
bundle.putInt(BatteryManager.EXTRA_DOCK_LEVEL, this.mDockBatteryLevel);
bundle.putBoolean(BatteryManager.EXTRA_DOCK_PRESENT, this.mDockBatteryPresent);
bundle.putInt(BatteryManager.EXTRA_DOCK_PLUGGED, this.mDockBatteryPlugged);
// EEPAD data
bundle.putBoolean("usb_wakeup", this.mPadUsbOnline);
bundle.putBoolean("ac_online", this.mAcOnline);
bundle.putBoolean("dock_ac_online", this.mDockAcOnline);
return bundle;
}
@Override
public boolean hasNewData() {
// Has anything changed?
boolean hasNewData =
mInitial ||
mDockBatteryLevel != mLastDockBatteryLevel ||
mDockBatteryStatus != mLastDockBatteryStatus ||
mDockBatteryPresent != mLastDockBatteryPresent ||
mDockBatteryPlugged != mLastDockBatteryPlugged ||
mPadUsbOnline != mLastPadUsbOnline ||
mAcOnline != mLastAcOnline ||
mDockAcOnline != mLastDockAcOnline;
// Save data
mInitial = false;
mLastDockBatteryLevel = mDockBatteryLevel;
mLastDockBatteryStatus = mDockBatteryStatus;
mLastDockBatteryPresent = mDockBatteryPresent;
mLastDockBatteryPlugged = mDockBatteryPlugged;
mLastPadUsbOnline = mPadUsbOnline;
mLastAcOnline = mAcOnline;
mLastDockAcOnline = mDockAcOnline;
return hasNewData;
}
@Override
public boolean isPlugged() {
return mDockBatteryPresent && mDockBatteryPlugged != 0;
}
private native void nativeDockBatteryUpdate();
}