am a55ae92a
: Remove isCustomized() check as the API is not used for now.
Merge commit 'a55ae92a132325e9307f291c455b1148d0bff3cf' * commit 'a55ae92a132325e9307f291c455b1148d0bff3cf': Remove isCustomized() check as the API is not used for now. Remove LAUNCHER category from VPN settings activity's intent filter. Improve power control widget GUI. Minor UI improvements and showing of unplugged duration. Make the Settings side of the date format settings more locale-aware.
This commit is contained in:
committed by
The Android Open Source Project
commit
4d863f471b
@@ -87,19 +87,25 @@ public class DateTimeSettings
|
||||
mDatePref = findPreference("date");
|
||||
mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT);
|
||||
|
||||
int currentFormatIndex = -1;
|
||||
String [] dateFormats = getResources().getStringArray(R.array.date_format_values);
|
||||
String [] formattedDates = new String[dateFormats.length];
|
||||
String currentFormat = getDateFormat();
|
||||
// Initialize if DATE_FORMAT is not set in the system settings
|
||||
// This can happen after a factory reset (or data wipe)
|
||||
if (currentFormat == null) {
|
||||
currentFormat = getResources().getString(R.string.default_date_format);
|
||||
setDateFormat(currentFormat);
|
||||
currentFormat = "";
|
||||
}
|
||||
for (int i = 0; i < formattedDates.length; i++) {
|
||||
formattedDates[i] = DateFormat.format(dateFormats[i], mDummyDate).toString();
|
||||
if (currentFormat.equals(dateFormats[i])) currentFormatIndex = i;
|
||||
String formatted =
|
||||
DateFormat.getDateFormatForSetting(this, dateFormats[i]).
|
||||
format(mDummyDate.getTime());
|
||||
|
||||
if (dateFormats[i].length() == 0) {
|
||||
formattedDates[i] = getResources().
|
||||
getString(R.string.normal_date_format, formatted);
|
||||
} else {
|
||||
formattedDates[i] = formatted;
|
||||
}
|
||||
}
|
||||
|
||||
mDateFormat.setEntries(formattedDates);
|
||||
@@ -314,6 +320,10 @@ public class DateTimeSettings
|
||||
}
|
||||
|
||||
private void setDateFormat(String format) {
|
||||
if (format.length() == 0) {
|
||||
format = null;
|
||||
}
|
||||
|
||||
Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format);
|
||||
}
|
||||
|
||||
|
@@ -163,12 +163,12 @@ public class SecuritySettings extends PreferenceActivity {
|
||||
|
||||
PreferenceScreen vpnPreferences = getPreferenceManager()
|
||||
.createPreferenceScreen(this);
|
||||
vpnPreferences.setTitle(R.string.vpn_settings_category);
|
||||
vpnPreferences.setTitle(R.string.vpn_settings_title);
|
||||
vpnPreferences.setSummary(R.string.vpn_settings_summary);
|
||||
vpnPreferences.setIntent(new VpnManager(this).createSettingsActivityIntent());
|
||||
|
||||
PreferenceCategory vpnCat = new PreferenceCategory(this);
|
||||
vpnCat.setTitle(R.string.vpn_settings_title);
|
||||
vpnCat.setSummary(R.string.vpn_settings_summary);
|
||||
vpnCat.setTitle(R.string.vpn_settings_category);
|
||||
root.addPreference(vpnCat);
|
||||
vpnCat.addPreference(vpnPreferences);
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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++) {
|
||||
|
84
src/com/android/settings/fuelgauge/Utils.java
Normal file
84
src/com/android/settings/fuelgauge/Utils.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -58,8 +58,6 @@ class L2tpIpsecEditor extends SingleServerEditor {
|
||||
String result = super.validate(c);
|
||||
if (result != null) {
|
||||
return result;
|
||||
} else if (mProfile.isCustomized()) {
|
||||
return null;
|
||||
} else if (Util.isNullOrEmpty(mUserkey.getValue())) {
|
||||
return c.getString(R.string.vpn_error_userkey_not_selected);
|
||||
} else if (Util.isNullOrEmpty(mUserCertificate.getValue())) {
|
||||
|
@@ -50,11 +50,9 @@ class SingleServerEditor implements VpnProfileEditor {
|
||||
|
||||
//@Override
|
||||
public String validate(Context c) {
|
||||
return (mProfile.isCustomized()
|
||||
? null
|
||||
: (Util.isNullOrEmpty(mServerName.getText())
|
||||
return (Util.isNullOrEmpty(mServerName.getText())
|
||||
? c.getString(R.string.vpn_error_server_name_empty)
|
||||
: null));
|
||||
: null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user