diff options
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | res/drawable/app_gauge.9.png | bin | 98 -> 152 bytes | |||
-rw-r--r-- | res/layout/power_usage_detail_item_text.xml | 11 | ||||
-rw-r--r-- | res/layout/power_usage_details.xml | 2 | ||||
-rw-r--r-- | res/values/strings.xml | 10 | ||||
-rw-r--r-- | res/xml/power_usage_summary.xml | 3 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/PowerUsageDetail.java | 72 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/PowerUsageSummary.java | 19 | ||||
-rw-r--r-- | src/com/android/settings/fuelgauge/Utils.java | 84 |
9 files changed, 126 insertions, 76 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 2714457..20f43c9 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -190,6 +190,7 @@ <action android:name="android.intent.action.MAIN" /> <action android:name="com.android.settings.SOUND_SETTINGS" /> <action android:name="com.android.settings.DISPLAY_SETTINGS" /> + <action android:name="android.settings.DISPLAY_SETTINGS" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.VOICE_LAUNCH" /> </intent-filter> diff --git a/res/drawable/app_gauge.9.png b/res/drawable/app_gauge.9.png Binary files differindex f8ff669..f6c7c99 100644 --- a/res/drawable/app_gauge.9.png +++ b/res/drawable/app_gauge.9.png diff --git a/res/layout/power_usage_detail_item_text.xml b/res/layout/power_usage_detail_item_text.xml index 097469b..7ea2432 100644 --- a/res/layout/power_usage_detail_item_text.xml +++ b/res/layout/power_usage_detail_item_text.xml @@ -27,8 +27,9 @@ android:textStyle="bold" android:singleLine="true" android:layout_alignParentLeft="true" - android:layout_marginBottom="2dip" - android:layout_marginTop="2dip" /> + android:layout_marginBottom="4dip" + android:layout_marginTop="4dip" + android:layout_marginLeft="4dip" /> <TextView android:id="@+id/value" android:layout_width="wrap_content" @@ -37,7 +38,7 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:textStyle="normal" android:singleLine="true" - android:layout_marginBottom="2dip" - android:layout_marginTop="2dip" - android:layout_marginRight="4dip"/> + android:layout_marginBottom="4dip" + android:layout_marginTop="4dip" + android:layout_marginRight="10dip"/> </RelativeLayout> diff --git a/res/layout/power_usage_details.xml b/res/layout/power_usage_details.xml index 206eb05..8aa625f 100644 --- a/res/layout/power_usage_details.xml +++ b/res/layout/power_usage_details.xml @@ -96,6 +96,7 @@ <TextView android:id="@+id/controls_section_title" style="?android:attr/listSeparatorTextViewStyle" + android:layout_marginTop="6dip" android:text="@string/controls_subtitle" /> <RelativeLayout @@ -130,6 +131,7 @@ <TextView android:id="@+id/packages_section_title" style="?android:attr/listSeparatorTextViewStyle" + android:layout_marginTop="6dip" android:text="@string/packages_subtitle" /> <LinearLayout diff --git a/res/values/strings.xml b/res/values/strings.xml index d2ca51b..c19f833 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1532,16 +1532,16 @@ found in the list of installed applications.</string> <string name="battery_history_starts">Starts: <xliff:g id="starts">%1$d</xliff:g></string> <!-- Used to show an amount of time in the form "d days, h hours, m minutes, s seconds" in BatteryHistory --> - <string name="battery_history_days"><xliff:g id="days">%1$d</xliff:g> d, <xliff:g id="hours">%2$d</xliff:g> h, <xliff:g id="minutes">%3$d</xliff:g> m, <xliff:g id="seconds">%4$d</xliff:g> s</string> + <string name="battery_history_days"><xliff:g id="days">%1$d</xliff:g>d <xliff:g id="hours">%2$d</xliff:g>h <xliff:g id="minutes">%3$d</xliff:g>m <xliff:g id="seconds">%4$d</xliff:g>s</string> <!-- Used to show an amount of time in the form "h hours, m minutes, s seconds" in BatteryHistory --> - <string name="battery_history_hours"><xliff:g id="hours">%1$d</xliff:g> h, <xliff:g id="minutes">%2$d</xliff:g> m, <xliff:g id="seconds">%3$d</xliff:g> s</string> + <string name="battery_history_hours"><xliff:g id="hours">%1$d</xliff:g>h <xliff:g id="minutes">%2$d</xliff:g>m <xliff:g id="seconds">%3$d</xliff:g>s</string> <!-- Used to show an amount of time in the form "m minutes, s seconds" in BatteryHistory --> - <string name="battery_history_minutes"><xliff:g id="minutes">%1$d</xliff:g> m, <xliff:g id="seconds">%2$d</xliff:g> s</string> + <string name="battery_history_minutes"><xliff:g id="minutes">%1$d</xliff:g>m <xliff:g id="seconds">%2$d</xliff:g>s</string> <!-- Used to show an amount of time in the form "s seconds" in BatteryHistory --> - <string name="battery_history_seconds"><xliff:g id="seconds">%1$d</xliff:g> s</string> + <string name="battery_history_seconds"><xliff:g id="seconds">%1$d</xliff:g>s</string> <!-- Used to head a list of packages that share a given user id BatteryHistory --> <string name="battery_history_packages_sharing_this_uid">Packages sharing this UID:</string> @@ -1634,6 +1634,8 @@ found in the list of installed applications.</string> <string name="battery_since_unplugged">Battery usage since unplugged</string> <!-- Battery usage since user reset the stats --> <string name="battery_since_reset">Battery usage since reset</string> + <!-- Battery usage duration --> + <string name="battery_stats_duration">Usage duration - <xliff:g id="time">%1$s</xliff:g></string> <!-- CPU awake time title --> <string name="awake">Device awake time</string> <!-- Wifi on time --> diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml index 80342a8..450e438 100644 --- a/res/xml/power_usage_summary.xml +++ b/res/xml/power_usage_summary.xml @@ -16,5 +16,6 @@ <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:title="@string/battery_since_unplugged"> - + <PreferenceCategory + android:key="app_list"/> </PreferenceScreen> diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index 54a0b88..e36a8bc 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -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)); - break; - case ACTION_FORCE_STOP: - killProcesses(); + startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); 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); - } - } } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 10ede87..b8919ee 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -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++) { diff --git a/src/com/android/settings/fuelgauge/Utils.java b/src/com/android/settings/fuelgauge/Utils.java new file mode 100644 index 0000000..2ffc9de --- /dev/null +++ b/src/com/android/settings/fuelgauge/Utils.java @@ -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); + } + } +} |