auto import from //depot/cupcake/@135843
This commit is contained in:
208
src/com/android/settings/BatteryInfo.java
Normal file
208
src/com/android/settings/BatteryInfo.java
Normal file
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* Copyright (C) 2006 The Android Open Source 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.android.settings;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.BatteryManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IPowerManager;
|
||||
import android.os.Message;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.SystemClock;
|
||||
import android.text.format.DateUtils;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.android.internal.app.IBatteryStats;
|
||||
|
||||
public class BatteryInfo extends Activity {
|
||||
private TextView mStatus;
|
||||
private TextView mLevel;
|
||||
private TextView mScale;
|
||||
private TextView mHealth;
|
||||
private TextView mVoltage;
|
||||
private TextView mTemperature;
|
||||
private TextView mTechnology;
|
||||
private TextView mUptime;
|
||||
private TextView mAwakeBattery;
|
||||
private TextView mAwakePlugged;
|
||||
private TextView mScreenOn;
|
||||
private IBatteryStats mBatteryStats;
|
||||
private IPowerManager mScreenStats;
|
||||
|
||||
private static final int EVENT_TICK = 1;
|
||||
|
||||
private Handler mHandler = new Handler() {
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case EVENT_TICK:
|
||||
updateBatteryStats();
|
||||
sendEmptyMessageDelayed(EVENT_TICK, 1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Format a number of tenths-units as a decimal string without using a
|
||||
* conversion to float. E.g. 347 -> "34.7"
|
||||
*/
|
||||
private final String tenthsToFixedString(int x) {
|
||||
int tens = x / 10;
|
||||
return new String("" + tens + "." + (x - 10*tens));
|
||||
}
|
||||
|
||||
/**
|
||||
*Listens for intent broadcasts
|
||||
*/
|
||||
private IntentFilter mIntentFilter;
|
||||
|
||||
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String action = intent.getAction();
|
||||
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
|
||||
int plugType = intent.getIntExtra("plugged", 0);
|
||||
|
||||
mLevel.setText("" + intent.getIntExtra("level", 0));
|
||||
mScale.setText("" + intent.getIntExtra("scale", 0));
|
||||
mVoltage.setText("" + intent.getIntExtra("voltage", 0) + " "
|
||||
+ getString(R.string.battery_info_voltage_units));
|
||||
mTemperature.setText("" + tenthsToFixedString(intent.getIntExtra("temperature", 0))
|
||||
+ getString(R.string.battery_info_temperature_units));
|
||||
mTechnology.setText("" + intent.getStringExtra("technology"));
|
||||
|
||||
int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
|
||||
String statusString;
|
||||
if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
|
||||
statusString = getString(R.string.battery_info_status_charging);
|
||||
if (plugType > 0) {
|
||||
statusString = statusString + " " + getString(
|
||||
(plugType == BatteryManager.BATTERY_PLUGGED_AC)
|
||||
? R.string.battery_info_status_charging_ac
|
||||
: R.string.battery_info_status_charging_usb);
|
||||
}
|
||||
} else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
|
||||
statusString = getString(R.string.battery_info_status_discharging);
|
||||
} else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
|
||||
statusString = getString(R.string.battery_info_status_not_charging);
|
||||
} else if (status == BatteryManager.BATTERY_STATUS_FULL) {
|
||||
statusString = getString(R.string.battery_info_status_full);
|
||||
} else {
|
||||
statusString = getString(R.string.battery_info_status_unknown);
|
||||
}
|
||||
mStatus.setText(statusString);
|
||||
|
||||
int health = intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
String healthString;
|
||||
if (health == BatteryManager.BATTERY_HEALTH_GOOD) {
|
||||
healthString = getString(R.string.battery_info_health_good);
|
||||
} else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT) {
|
||||
healthString = getString(R.string.battery_info_health_overheat);
|
||||
} else if (health == BatteryManager.BATTERY_HEALTH_DEAD) {
|
||||
healthString = getString(R.string.battery_info_health_dead);
|
||||
} else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE) {
|
||||
healthString = getString(R.string.battery_info_health_over_voltage);
|
||||
} else if (health == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE) {
|
||||
healthString = getString(R.string.battery_info_health_unspecified_failure);
|
||||
} else {
|
||||
healthString = getString(R.string.battery_info_health_unknown);
|
||||
}
|
||||
mHealth.setText(healthString);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
|
||||
setContentView(R.layout.battery_info);
|
||||
|
||||
// create the IntentFilter that will be used to listen
|
||||
// to battery status broadcasts
|
||||
mIntentFilter = new IntentFilter();
|
||||
mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
|
||||
mStatus = (TextView)findViewById(R.id.status);
|
||||
mLevel = (TextView)findViewById(R.id.level);
|
||||
mScale = (TextView)findViewById(R.id.scale);
|
||||
mHealth = (TextView)findViewById(R.id.health);
|
||||
mTechnology = (TextView)findViewById(R.id.technology);
|
||||
mVoltage = (TextView)findViewById(R.id.voltage);
|
||||
mTemperature = (TextView)findViewById(R.id.temperature);
|
||||
mUptime = (TextView) findViewById(R.id.uptime);
|
||||
mAwakeBattery = (TextView) findViewById(R.id.awakeBattery);
|
||||
mAwakePlugged = (TextView) findViewById(R.id.awakePlugged);
|
||||
mScreenOn = (TextView) findViewById(R.id.screenOn);
|
||||
|
||||
// Get awake time plugged in and on battery
|
||||
mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));
|
||||
mScreenStats = IPowerManager.Stub.asInterface(ServiceManager.getService(POWER_SERVICE));
|
||||
mHandler.sendEmptyMessageDelayed(EVENT_TICK, 1000);
|
||||
|
||||
registerReceiver(mIntentReceiver, mIntentFilter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
mHandler.removeMessages(EVENT_TICK);
|
||||
|
||||
// we are no longer on the screen stop the observers
|
||||
unregisterReceiver(mIntentReceiver);
|
||||
}
|
||||
|
||||
private void updateBatteryStats() {
|
||||
long uptime = SystemClock.elapsedRealtime();
|
||||
mUptime.setText(DateUtils.formatElapsedTime(uptime / 1000));
|
||||
|
||||
if (mBatteryStats != null) {
|
||||
try {
|
||||
long awakeTimeBattery = mBatteryStats.getAwakeTimeBattery() / 1000;
|
||||
long awakeTimePluggedIn = mBatteryStats.getAwakeTimePlugged() / 1000;
|
||||
mAwakeBattery.setText(DateUtils.formatElapsedTime(awakeTimeBattery / 1000)
|
||||
+ " (" + (100 * awakeTimeBattery / uptime) + "%)");
|
||||
mAwakePlugged.setText(DateUtils.formatElapsedTime(awakeTimePluggedIn / 1000)
|
||||
+ " (" + (100 * awakeTimePluggedIn / uptime) + "%)");
|
||||
} catch (RemoteException re) {
|
||||
mAwakeBattery.setText("Unknown");
|
||||
mAwakePlugged.setText("Unknown");
|
||||
}
|
||||
}
|
||||
if (mScreenStats != null) {
|
||||
try {
|
||||
long screenOnTime = mScreenStats.getScreenOnTime();
|
||||
mScreenOn.setText(DateUtils.formatElapsedTime(screenOnTime / 1000));
|
||||
} catch (RemoteException re) {
|
||||
mScreenOn.setText("Unknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user