diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | de2d9f5f109265873196f1615e1f3546b114aaa7 (patch) | |
tree | cd79c0fdeba9e5564571422a549b9a84e4ac43bb /src/com/android/settings/BatteryInfo.java | |
download | packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.zip packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.tar.gz packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.tar.bz2 |
Initial Contribution
Diffstat (limited to 'src/com/android/settings/BatteryInfo.java')
-rw-r--r-- | src/com/android/settings/BatteryInfo.java | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/src/com/android/settings/BatteryInfo.java b/src/com/android/settings/BatteryInfo.java new file mode 100644 index 0000000..ef60fc3 --- /dev/null +++ b/src/com/android/settings/BatteryInfo.java @@ -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.pim.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(); + long awakeTimePluggedIn = mBatteryStats.getAwakeTimePlugged(); + 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"); + } + } + } + +} |