Minor UI improvements and showing of unplugged duration.

This commit is contained in:
Amith Yamasani
2009-06-12 14:15:20 -07:00
parent 188ca77870
commit 0422a3bf61
9 changed files with 126 additions and 76 deletions

View File

@@ -51,8 +51,8 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
public static final int ACTION_DISPLAY_SETTINGS = 1;
public static final int ACTION_WIFI_SETTINGS = 2;
public static final int ACTION_BLUETOOTH_SETTINGS = 3;
public static final int ACTION_FORCE_STOP = 4;
public static final int ACTION_UNINSTALL = 5;
public static final int ACTION_WIRELESS_SETTINGS = 4;
public static final int ACTION_APP_DETAILS = 6;
public static final int USAGE_SINCE_UNPLUGGED = 1;
public static final int USAGE_SINCE_RESET = 2;
@@ -66,10 +66,6 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
public static final String EXTRA_DETAIL_VALUES = "values";
public static final String EXTRA_DRAIN_TYPE = "drainType";
private static final int SECONDS_PER_MINUTE = 60;
private static final int SECONDS_PER_HOUR = 60 * 60;
private static final int SECONDS_PER_DAY = 24 * 60 * 60;
private static final boolean DEBUG = true;
private String mTitle;
private double mPercentage;
@@ -135,10 +131,10 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
switch (mTypes[i]) {
case R.string.usage_type_data_recv:
case R.string.usage_type_data_send:
value = formatBytes(mValues[i]);
value = Utils.formatBytes(this, mValues[i]);
break;
default:
value = formatTime(mValues[i]);
value = Utils.formatElapsedTime(this, mValues[i]);
}
ViewGroup item = (ViewGroup) inflater.inflate(R.layout.power_usage_detail_item_text,
null);
@@ -165,15 +161,12 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
break;
case ACTION_WIFI_SETTINGS:
startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
break;
case ACTION_BLUETOOTH_SETTINGS:
startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
break;
case ACTION_FORCE_STOP:
killProcesses();
break;
case ACTION_UNINSTALL:
case ACTION_APP_DETAILS:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClass(this, InstalledAppDetails.class);
intent.putExtra("com.android.settings.ApplicationPkgName", mPackages[0]);
@@ -199,18 +192,17 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
if (uid == 0 || !isSystem) {
switch (mDrainType) {
case APP:
label1 = getString(R.string.battery_action_stop);
//label1 = getString(R.string.battery_action_stop);
label2 = getString(R.string.battery_action_app_details);
mAction1 = ACTION_FORCE_STOP;
mAction2 = ACTION_UNINSTALL;
mAction2 = ACTION_APP_DETAILS;
break;
case SCREEN:
//label2 = getString(R.string.battery_action_display);
//mAction2 = ACTION_DISPLAY_SETTINGS;
label2 = getString(R.string.battery_action_display);
mAction2 = ACTION_DISPLAY_SETTINGS;
break;
case WIFI:
label2 = getString(R.string.battery_action_wifi);
mAction2 = ACTION_WIFI_SETTINGS;
mAction2 = ACTION_WIRELESS_SETTINGS;
break;
case BLUETOOTH:
//label2 = getString(R.string.battery_action_bluetooth);
@@ -291,44 +283,4 @@ public class PowerUsageDetail extends Activity implements Button.OnClickListener
}
}
}
private String formatTime(double millis) {
StringBuilder sb = new StringBuilder();
int seconds = (int) Math.floor(millis / 1000);
int days = 0, hours = 0, minutes = 0;
if (seconds > SECONDS_PER_DAY) {
days = seconds / SECONDS_PER_DAY;
seconds -= days * SECONDS_PER_DAY;
}
if (seconds > SECONDS_PER_HOUR) {
hours = seconds / SECONDS_PER_HOUR;
seconds -= hours * SECONDS_PER_HOUR;
}
if (seconds > SECONDS_PER_MINUTE) {
minutes = seconds / SECONDS_PER_MINUTE;
seconds -= minutes * SECONDS_PER_MINUTE;
}
if (days > 0) {
sb.append(getString(R.string.battery_history_days, days, hours, minutes, seconds));
} else if (hours > 0) {
sb.append(getString(R.string.battery_history_hours, hours, minutes, seconds));
} else if (minutes > 0) {
sb.append(getString(R.string.battery_history_minutes, minutes, seconds));
} else {
sb.append(getString(R.string.battery_history_seconds, seconds));
}
return sb.toString();
}
private String formatBytes(double bytes) {
// TODO: I18N
if (bytes > 1000 * 1000) {
return String.format("%.2f MB", ((int) (bytes / 1000)) / 1000f);
} else if (bytes > 1024) {
return String.format("%.2f KB", ((int) (bytes / 10)) / 100f);
} else {
return String.format("%d bytes", (int) bytes);
}
}
}

View File

@@ -100,7 +100,7 @@ public class PowerUsageSummary extends PreferenceActivity implements Runnable {
addPreferencesFromResource(R.xml.power_usage_summary);
mBatteryInfo = IBatteryStats.Stub.asInterface(
ServiceManager.getService("batteryinfo"));
mAppListGroup = getPreferenceScreen();
mAppListGroup = (PreferenceGroup) findPreference("app_list");
mPowerProfile = new PowerProfile(this);
}
@@ -108,7 +108,7 @@ public class PowerUsageSummary extends PreferenceActivity implements Runnable {
protected void onResume() {
super.onResume();
mAbort = false;
updateAppsList();
refreshStats();
}
@Override
@@ -207,18 +207,18 @@ public class PowerUsageSummary extends PreferenceActivity implements Runnable {
} else {
mStatsType = BatteryStats.STATS_TOTAL;
}
updateAppsList();
refreshStats();
return true;
case MENU_STATS_REFRESH:
mStats = null;
updateAppsList();
refreshStats();
return true;
default:
return false;
}
}
private void updateAppsList() {
private void refreshStats() {
if (mStats == null) {
load();
}
@@ -263,12 +263,19 @@ public class PowerUsageSummary extends PreferenceActivity implements Runnable {
}
}
private void updateStatsPeriod(long duration) {
String durationString = Utils.formatElapsedTime(this, duration / 1000);
String label = getString(R.string.battery_stats_duration, durationString);
mAppListGroup.setTitle(label);
}
private void processAppUsage() {
SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
final int which = mStatsType;
final double powerCpuNormal = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_NORMAL);
final double averageCostPerByte = getAverageDataCost();
long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime(), which) * 1000;
long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which);
updateStatsPeriod(uSecTime);
SparseArray<? extends Uid> uidStats = mStats.getUidStats();
final int NU = uidStats.size();
for (int iu = 0; iu < NU; iu++) {

View File

@@ -0,0 +1,84 @@
/*
* Copyright (C) 2009 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.fuelgauge;
import android.content.Context;
import com.android.settings.R;
/**
* Contains utility functions for formatting elapsed time and consumed bytes
*/
public class Utils {
private static final int SECONDS_PER_MINUTE = 60;
private static final int SECONDS_PER_HOUR = 60 * 60;
private static final int SECONDS_PER_DAY = 24 * 60 * 60;
/**
* Returns elapsed time for the given millis, in the following format:
* 2d 5h 40m 29s
* @param context the application context
* @param millis the elapsed time in milli seconds
* @return the formatted elapsed time
*/
public static String formatElapsedTime(Context context, double millis) {
StringBuilder sb = new StringBuilder();
int seconds = (int) Math.floor(millis / 1000);
int days = 0, hours = 0, minutes = 0;
if (seconds > SECONDS_PER_DAY) {
days = seconds / SECONDS_PER_DAY;
seconds -= days * SECONDS_PER_DAY;
}
if (seconds > SECONDS_PER_HOUR) {
hours = seconds / SECONDS_PER_HOUR;
seconds -= hours * SECONDS_PER_HOUR;
}
if (seconds > SECONDS_PER_MINUTE) {
minutes = seconds / SECONDS_PER_MINUTE;
seconds -= minutes * SECONDS_PER_MINUTE;
}
if (days > 0) {
sb.append(context.getString(R.string.battery_history_days,
days, hours, minutes, seconds));
} else if (hours > 0) {
sb.append(context.getString(R.string.battery_history_hours, hours, minutes, seconds));
} else if (minutes > 0) {
sb.append(context.getString(R.string.battery_history_minutes, minutes, seconds));
} else {
sb.append(context.getString(R.string.battery_history_seconds, seconds));
}
return sb.toString();
}
/**
* Formats data size in KB, MB, from the given bytes.
* @param context the application context
* @param bytes data size in bytes
* @return the formatted size such as 4.52 MB or 245 KB or 332 bytes
*/
public static String formatBytes(Context context, double bytes) {
// TODO: I18N
if (bytes > 1000 * 1000) {
return String.format("%.2f MB", ((int) (bytes / 1000)) / 1000f);
} else if (bytes > 1024) {
return String.format("%.2f KB", ((int) (bytes / 10)) / 100f);
} else {
return String.format("%d bytes", (int) bytes);
}
}
}