Merge "BLE peripheral mode (4/4): Settings change for advertising preference."
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 7c0c7b4..e94da8b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -113,7 +113,7 @@
<string name="bluetooth_is_discoverable" msgid="8373421452106840526">"Visible per a tots els dispositius Bluetooth propers (<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>)"</string>
<string name="bluetooth_is_discoverable_always" msgid="2849387702249327748">"Visible per a tots els dispositius Bluetooth propers"</string>
<string name="bluetooth_not_visible_to_other_devices" msgid="9120274591523391910">"Ocult per a altres dispositius Bluetooth"</string>
- <string name="bluetooth_only_visible_to_paired_devices" msgid="2049983392373296028">"Només visible per als dispositius sincronitzats"</string>
+ <string name="bluetooth_only_visible_to_paired_devices" msgid="2049983392373296028">"Només visible per als dispositius emparellats"</string>
<string name="bluetooth_visibility_timeout" msgid="8002247464357005429">"Temps de visibilitat"</string>
<string name="bluetooth_lock_voice_dialing" msgid="3139322992062086225">"Bloqueja el marcatge per veu"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="4741338867496787042">"Impedeix l\'ús del marcador Bluetooth quan la pantalla estigui bloquejada"</string>
@@ -448,15 +448,15 @@
<string name="bluetooth_settings_summary" msgid="2091062709530570462">"Gestiona les connexions, defineix el nom i la visibilitat del dispositiu"</string>
<string name="bluetooth_pairing_request" msgid="6385750334766370310">"Sol·licitud d\'emparellament de Bluetooth"</string>
<string name="bluetooth_enter_pin_msg" msgid="5698297871117529185">"Per emparellar amb:<xliff:g id="BOLD_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD"></b><br><br></xliff:g>Escriu el PIN sol·licitat pel dispositiu:"</string>
- <string name="bluetooth_enter_passkey_msg" msgid="2220143735340367939">"Per emparellar amb:<xliff:g id="BOLD_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD"></b><br><br></xliff:g>Escriu la contrasenya que requereix el dispositiu:"</string>
+ <string name="bluetooth_enter_passkey_msg" msgid="2220143735340367939">"Per emparellar amb:<xliff:g id="BOLD_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD"></b><br><br></xliff:g>Escriu la contrasenya sol·licitada pel dispositiu:"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="7222713483058171357">"El PIN conté lletres o símbols"</string>
<string name="bluetooth_pin_values_hint" msgid="3815897557875873646">"En general, 0000 o 1234"</string>
<string name="bluetooth_enter_pin_other_device" msgid="4637977124526813470">"Pot ser que també hagis d\'introduir aquest PIN a l\'altre dispositiu."</string>
<string name="bluetooth_enter_passkey_other_device" msgid="2798719004030279602">"Pot ser que també hagis d\'introduir aquesta contrasenya a l\'altre dispositiu."</string>
<string name="bluetooth_confirm_passkey_msg" msgid="3708312912841950052">"Per emparellar amb:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Assegura\'t que apareix aquesta contrasenya:<br><b><xliff:g id="PASSKEY">%2$s</xliff:g></b>"</string>
<string name="bluetooth_incoming_pairing_msg" msgid="1615930853859551491">"De:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Vols emparellar-lo amb aquest dispositiu?"</string>
- <string name="bluetooth_display_passkey_pin_msg" msgid="2796550001376088433">"Per sincronitzar amb:<xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g>Escriu-hi:<xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g> i, a continuació, prem la tecla de retorn."</string>
- <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Sincronitza"</string>
+ <string name="bluetooth_display_passkey_pin_msg" msgid="2796550001376088433">"Per sincronitzar amb:<xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g>Escriu <xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g> en el dispositiu i, a continuació, prem la tecla de retorn."</string>
+ <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Emparella"</string>
<string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Cancel·la"</string>
<string name="bluetooth_error_title" msgid="6850384073923533096"></string>
<string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"No s\'ha pogut emparellar amb <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -468,7 +468,7 @@
<string name="bluetooth_search_for_devices" msgid="5957007154213560390">"Cerca dispositius"</string>
<string name="bluetooth_searching_for_devices" msgid="9203739709307871727">"S\'està cercant..."</string>
<string name="bluetooth_preference_device_settings" msgid="907776049862799122">"Configuració del dispositiu"</string>
- <string name="bluetooth_preference_paired_devices" msgid="1970524193086791964">"Dispositius sincronitzats"</string>
+ <string name="bluetooth_preference_paired_devices" msgid="1970524193086791964">"Dispositius emparellats"</string>
<string name="bluetooth_preference_found_devices" msgid="1647983835063249680">"Dispositius disponibles"</string>
<string name="bluetooth_device_context_connect" msgid="3997659895003244941">"Connecta"</string>
<string name="bluetooth_device_context_disconnect" msgid="8220072022970148683">"Desconnecta"</string>
@@ -493,7 +493,7 @@
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"L\'accés a Internet mitjançant <xliff:g id="DEVICE_NAME">%1$s</xliff:g> es desconnectarà."</string>
<string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="5455448395850929200">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> es desconnectarà de la compartició de la connexió a Internet de la tauleta."</string>
<string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5266851881175033601">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> es desconnectarà de la compartició de la connexió a Internet del telèfon."</string>
- <string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Dispositiu Bluetooth sincronitzat"</string>
+ <string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Dispositiu Bluetooth emparellat"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"Connecta"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"Connecta\'t al dispositiu Bluetooth"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="3764437426089639639">"Perfils"</string>
@@ -1038,7 +1038,7 @@
<string name="regulatory_information" msgid="5695464367088752150">"Informació de regulació"</string>
<string name="copyright_title" msgid="865906688917260647">"Copyright"</string>
<string name="license_title" msgid="1990487604356037871">"Llicència"</string>
- <string name="terms_title" msgid="7697580845616764642">"Condicions del servei"</string>
+ <string name="terms_title" msgid="7697580845616764642">"Termes i condicions"</string>
<string name="settings_license_activity_title" msgid="7553683406244228650">"Llicències de codi obert"</string>
<string name="settings_license_activity_unavailable" msgid="4210539215951487627">"S\'ha produït un problema en llegir les llicències."</string>
<string name="settings_license_activity_loading" msgid="3337535809093591740">"S\'està carregant…"</string>
@@ -2064,15 +2064,15 @@
<string name="user_image_choose_photo" msgid="7940990613897477057">"Selecciona una foto de la galeria"</string>
<string name="regulatory_info_text" msgid="5623087902354026557"></string>
<string name="lock_settings_nfc_title" msgid="33998875572836425">"Configuració de bloqueig de pantalla de NFC"</string>
- <string name="nfc_unlock_paired_tags_title" msgid="3837232675294949824">"Etiquetes sincronitzades"</string>
+ <string name="nfc_unlock_paired_tags_title" msgid="3837232675294949824">"Etiquetes emparellades"</string>
<string name="nfc_unlock_enabled" msgid="7306199149460932989">"Activat"</string>
- <string name="start_nfc_pairing" msgid="5363319136364735698">"Sincronitza amb una etiqueta"</string>
+ <string name="start_nfc_pairing" msgid="5363319136364735698">"Emparella amb una etiqueta"</string>
<string name="title_activity_nfc_pairing" msgid="6821817665260628279">"NfcPairingActivity"</string>
- <string name="pairing_button_title" msgid="7411638037556429744">"Sincronitza ara"</string>
+ <string name="pairing_button_title" msgid="7411638037556429744">"Emparella ara"</string>
<string name="status_no_ring_detected" msgid="838954925249421062">"Posa l\'etiqueta plana en una taula i col·loca el telèfon a sobre."</string>
- <string name="status_device_paired" msgid="4916932520416516526">"L\'etiqueta i el telèfon s\'han sincronitzat correctament. Llestos."</string>
+ <string name="status_device_paired" msgid="4916932520416516526">"L\'etiqueta i el telèfon s\'han emparellat correctament. Llestos."</string>
<string name="status_error_invalid_device" msgid="5045003971535647259">"L\'etiqueta que has proporcionat no es pot utilitzar per desbloquejar el telèfon."</string>
- <string name="status_error_pairing_failed" msgid="8260473909085202868">"S\'ha produït un error amb la sincronització de l\'etiqueta. Torna-ho a provar."</string>
+ <string name="status_error_pairing_failed" msgid="8260473909085202868">"S\'ha produït un error en emparellar l\'etiqueta. Torna-ho a provar."</string>
<string name="enable_nfc" msgid="5234514241098808766">"L\'NFC no està activada i és necessària per desbloquejar la pantalla mitjançant NFC. Activa-la."</string>
<string name="ok" msgid="3651563352754792958">"Configuració de NFC"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d395309..8a14ddd 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -697,7 +697,7 @@
<string name="notification_sound_title" msgid="5137483249425507572">"Standardlyd for underretninger"</string>
<string name="notification_pulse_title" msgid="1247988024534030629">"Blinkende meddelelseslys"</string>
<string name="incoming_call_volume_title" msgid="8073714801365904099">"Ringetone"</string>
- <string name="notification_volume_title" msgid="2012640760341080408">"Meddelelse"</string>
+ <string name="notification_volume_title" msgid="2012640760341080408">"Underretning"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="1073644356290338921">"Brug lydstyrke for indgående opkald til underretninger"</string>
<string name="notification_sound_dialog_title" msgid="3805140135741385667">"Standardlyd for underretninger"</string>
<string name="media_volume_title" msgid="3576565767317118106">"Medier"</string>
@@ -2027,7 +2027,7 @@
<string name="global_change_warning" product="default" msgid="2461264421590324675">"Denne indstilling påvirker alle brugere på denne telefon."</string>
<string name="global_locale_change_title" msgid="5956281361384221451">"Skift sprog"</string>
<string name="global_font_change_title" msgid="1887126466191012035">"Skift skriftstørrelse"</string>
- <string name="nfc_payment_settings_title" msgid="1807298287380821613">"Peg og betal"</string>
+ <string name="nfc_payment_settings_title" msgid="1807298287380821613">"Tryk og betal"</string>
<string name="nfc_payment_no_apps" msgid="2481080809791416010">"Betal med et enkelt tryk"</string>
<string name="nfc_payment_learn_more" msgid="5583407773744324447">"Få flere oplysninger"</string>
<string name="nfc_payment_menu_item_add_service" msgid="2885947408068969081">"Find apps"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b86c086..9ac51f4 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -92,14 +92,14 @@
<string name="battery_info_status_charging" msgid="1705179948350365604">"Идет зарядка"</string>
<string name="battery_info_status_charging_ac" msgid="5874340256342956252">"от сети"</string>
<string name="battery_info_status_charging_usb" msgid="4059070156126770959">"по USB"</string>
- <string name="battery_info_status_charging_wireless" msgid="1822125795446772771">"Wi-Fi"</string>
+ <string name="battery_info_status_charging_wireless" msgid="1822125795446772771">"(беспроводная)"</string>
<string name="battery_info_status_discharging" msgid="310932812698268588">"Не заряжается"</string>
<string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не заряжается"</string>
<string name="battery_info_status_full" msgid="2824614753861462808">"Батарея заряжена"</string>
<string name="battery_info_power_unplugged" msgid="5987246575519551081">"Не подключено"</string>
<string name="battery_info_power_ac" msgid="6808516193001604634">"Питание от сети"</string>
<string name="battery_info_power_usb" msgid="8012931702516331797">"USB"</string>
- <string name="battery_info_power_wireless" msgid="6819163295739305097">"Wi-Fi"</string>
+ <string name="battery_info_power_wireless" msgid="6819163295739305097">"беспроводная"</string>
<string name="battery_info_power_ac_usb" msgid="6777734146838328688">"Питание от сети и USB"</string>
<string name="battery_info_power_unknown" msgid="7344115502868899881">"Неизвестно"</string>
<string name="battery_info_health_unknown" msgid="5664295556921944255">"Неизвестно"</string>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
index 111f001..6e57979 100644
--- a/res/values-sv/arrays.xml
+++ b/res/values-sv/arrays.xml
@@ -232,7 +232,7 @@
<string-array name="app_ops_categories">
<item msgid="6358963769537892925">"Plats"</item>
<item msgid="255608127647030286">"Personligt"</item>
- <item msgid="4588829735729884491">"Meddelanden"</item>
+ <item msgid="4588829735729884491">"SMS/MMS"</item>
<item msgid="886742181977884584">"Media"</item>
<item msgid="7924928667052300589">"Enhet"</item>
</string-array>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d6b8c4e..f041f6f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3603,6 +3603,10 @@
<string name="power_idle" product="tablet">Tablet idle</string>
<!-- Label for power consumed when Idle -->
<string name="power_idle" product="default">Phone idle</string>
+ <!-- Label for power that we aren't able to account for -->
+ <string name="power_unaccounted">Unaccounted</string>
+ <!-- Label for power that we computed too much for -->
+ <string name="power_overcounted">Over-counted</string>
<!-- Label for CPU usage time -->
<string name="usage_type_cpu">CPU total</string>
@@ -3634,6 +3638,14 @@
<string name="usage_type_on_time">Time on</string>
<!-- Label for time that there was no cell coverage -->
<string name="usage_type_no_coverage">Time without a signal</string>
+ <!-- Label for the total power capacity of the device's battery -->
+ <string name="usage_type_total_battery_capacity">Total battery capacity</string>
+ <!-- Label for amount of power use that was computed -->
+ <string name="usage_type_computed_power">Computed power</string>
+ <!-- Label for minimum amount of actual power use -->
+ <string name="usage_type_min_actual_power">Min real power</string>
+ <!-- Label for maximum amount of power use -->
+ <string name="usage_type_max_actual_power">Max real power</string>
<!-- Label for force stop action -->
<string name="battery_action_stop">Force stop</string>
<!-- Label for app details action -->
@@ -3689,6 +3701,13 @@
<!-- [CHAR LIMIT=50] Description for power consumed by users -->
<string name="battery_desc_users">Battery used by user</string>
+ <!-- [CHAR LIMIT=50] Description for unaccounted power use -->
+ <string name="battery_desc_unaccounted">Unaccounted power use</string>
+ <!-- [CHAR LIMIT=50] Description for over-counted power use -->
+ <string name="battery_desc_overcounted">Over-counted power use</string>
+ <!-- Representation of a mAh value. [CHAR LIMIT=NONE] -->
+ <string name="mah"><xliff:g id="number" example="30">%d</xliff:g> mAh</string>
+
<!-- Menu label for viewing battery usage since unplugged -->
<string name="menu_stats_unplugged"><xliff:g id="unplugged">%1$s</xliff:g> since unplugged</string>
<!-- Menu label for viewing battery usage since unplugged -->
diff --git a/src/com/android/settings/PairNfcDevice.java b/src/com/android/settings/PairNfcDevice.java
index 638f0d7..7c75b9f 100644
--- a/src/com/android/settings/PairNfcDevice.java
+++ b/src/com/android/settings/PairNfcDevice.java
@@ -151,7 +151,7 @@
public void run() {
finish();
}
- }, 4000);
+ }, 1000);
}
private void setErrorMode(int errorMsgResourceId) {
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 271bf2d..2e31318 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -111,13 +111,8 @@
"com.android.settings.TOP_LEVEL_HEADER_ID";
private static final String META_DATA_KEY_FRAGMENT_CLASS =
"com.android.settings.FRAGMENT_CLASS";
-
private static final String EXTRA_UI_OPTIONS = "settings:ui_options";
-
private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER";
- private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER";
-
- static final int DIALOG_ONLY_ONE_HOME = 1;
private static boolean sShowNoHomeNotice = false;
@@ -362,32 +357,6 @@
super.switchToHeader(header);
}
- /**
- * Switch to parent fragment and store the grand parent's info
- * @param className name of the activity wrapper for the parent fragment.
- */
- private void switchToParent(String className) {
- final ComponentName cn = new ComponentName(this, className);
- try {
- final PackageManager pm = getPackageManager();
- final ActivityInfo parentInfo = pm.getActivityInfo(cn, PackageManager.GET_META_DATA);
-
- if (parentInfo != null && parentInfo.metaData != null) {
- String fragmentClass = parentInfo.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
- CharSequence fragmentTitle = parentInfo.loadLabel(pm);
- Header parentHeader = new Header();
- parentHeader.fragment = fragmentClass;
- parentHeader.title = fragmentTitle;
- mCurrentHeader = parentHeader;
-
- switchToHeaderLocal(parentHeader);
- highlightHeader(mTopLevelHeaderId);
- }
- } catch (NameNotFoundException nnfe) {
- Log.w(LOG_TAG, "Could not find parent activity : " + className);
- }
- }
-
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
@@ -711,6 +680,7 @@
mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
} catch (NameNotFoundException nnfe) {
// No recovery
+ Log.d(LOG_TAG, "Cannot get Metadata for: " + getComponentName().toString());
}
}
@@ -756,8 +726,8 @@
TextView title;
TextView summary;
Switch switch_;
- ImageButton button_;
- View divider_;
+ ImageButton button;
+ View divider;
}
private LayoutInflater mInflater;
@@ -849,8 +819,8 @@
view.findViewById(com.android.internal.R.id.title);
holder.summary = (TextView)
view.findViewById(com.android.internal.R.id.summary);
- holder.button_ = (ImageButton) view.findViewById(R.id.buttonWidget);
- holder.divider_ = view.findViewById(R.id.divider);
+ holder.button = (ImageButton) view.findViewById(R.id.buttonWidget);
+ holder.divider = view.findViewById(R.id.divider);
break;
case HEADER_TYPE_NORMAL:
@@ -890,16 +860,16 @@
if (header.id == R.id.security_settings) {
boolean hasCert = DevicePolicyManager.hasAnyCaCertsInstalled();
if (hasCert) {
- holder.button_.setVisibility(View.VISIBLE);
- holder.divider_.setVisibility(View.VISIBLE);
+ holder.button.setVisibility(View.VISIBLE);
+ holder.divider.setVisibility(View.VISIBLE);
boolean isManaged = mDevicePolicyManager.getDeviceOwner() != null;
if (isManaged) {
- holder.button_.setImageResource(R.drawable.ic_settings_about);
+ holder.button.setImageResource(R.drawable.ic_settings_about);
} else {
- holder.button_.setImageResource(
+ holder.button.setImageResource(
android.R.drawable.stat_notify_error);
}
- holder.button_.setOnClickListener(new OnClickListener() {
+ holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(
@@ -908,8 +878,8 @@
}
});
} else {
- holder.button_.setVisibility(View.GONE);
- holder.divider_.setVisibility(View.GONE);
+ holder.button.setVisibility(View.GONE);
+ holder.divider.setVisibility(View.GONE);
}
}
updateCommonHeaderView(header, holder);
diff --git a/src/com/android/settings/SubSettings.java b/src/com/android/settings/SubSettings.java
index 34e9ba3..bcc56e1 100644
--- a/src/com/android/settings/SubSettings.java
+++ b/src/com/android/settings/SubSettings.java
@@ -16,11 +16,8 @@
package com.android.settings;
-import android.app.Fragment;
import android.util.Log;
-import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment;
-
/**
* Stub class for showing sub-settings; we can't use the main Settings class
* since for our app it is a special singleTask class.
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index b9e729c..c676ee8 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -16,7 +16,6 @@
package com.android.settings;
-import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -40,7 +39,6 @@
import android.net.Uri;
import android.os.BatteryManager;
import android.os.Bundle;
-import android.os.ParcelFileDescriptor;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.Preference;
@@ -48,23 +46,17 @@
import android.preference.PreferenceFrameLayout;
import android.preference.PreferenceGroup;
import android.provider.ContactsContract.CommonDataKinds;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Profile;
import android.provider.ContactsContract.RawContacts;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
-import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TabWidget;
-import com.android.settings.users.ProfileUpdateReceiver;
-
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
diff --git a/src/com/android/settings/fuelgauge/BatteryStatsHelper.java b/src/com/android/settings/fuelgauge/BatteryStatsHelper.java
index 8ae9409..a02917e 100644
--- a/src/com/android/settings/fuelgauge/BatteryStatsHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryStatsHelper.java
@@ -89,8 +89,11 @@
private long mStatsPeriod = 0;
private double mMaxPower = 1;
private double mTotalPower;
+ private double mTotalPowermAh;
private double mWifiPower;
private double mBluetoothPower;
+ private double mMinDrainedPower;
+ private double mMaxDrainedPower;
// How much the apps together have left WIFI running.
private long mAppWifiRunning;
@@ -304,6 +307,22 @@
sipper.wifiTxPackets,
};
} break;
+ case UNACCOUNTED:
+ case OVERCOUNTED:
+ {
+ types = new int[] {
+ R.string.usage_type_total_battery_capacity,
+ R.string.usage_type_computed_power,
+ R.string.usage_type_min_actual_power,
+ R.string.usage_type_max_actual_power,
+ };
+ values = new double[] {
+ mPowerProfile.getBatteryCapacity(),
+ mTotalPowermAh,
+ mMinDrainedPower,
+ mMaxDrainedPower,
+ };
+ } break;
default:
{
types = new int[] {
@@ -341,9 +360,35 @@
mUserSippers.clear();
mUserPower.clear();
+ mMinDrainedPower = (mStats.getLowDischargeAmountSinceCharge()
+ * mPowerProfile.getBatteryCapacity()) / 100;
+ mMaxDrainedPower = (mStats.getHighDischargeAmountSinceCharge()
+ * mPowerProfile.getBatteryCapacity()) / 100;
+
processAppUsage(includeZeroConsumption);
processMiscUsage();
+ // We have been computing totals in seconds, convert to hours.
+ mTotalPowermAh = mTotalPower / 3600;
+
+ if (true || mStats.getLowDischargeAmountSinceCharge() > 10) {
+ if (mMinDrainedPower > mTotalPowermAh) {
+ double amount = mMinDrainedPower - mTotalPowermAh;
+ if (mMaxPower < amount) {
+ mMaxPower = amount;
+ }
+ addEntryNoTotal(mActivity.getString(R.string.power_unaccounted),
+ DrainType.UNACCOUNTED, 0, R.drawable.ic_power_system, amount * 3600);
+ } else if (mMaxDrainedPower < mTotalPowermAh) {
+ double amount = mTotalPowermAh - mMaxDrainedPower;
+ if (mMaxPower < amount) {
+ mMaxPower = amount;
+ }
+ addEntryNoTotal(mActivity.getString(R.string.power_overcounted),
+ DrainType.OVERCOUNTED, 0, R.drawable.ic_power_system, amount * 3600);
+ }
+ }
+
Collections.sort(mUsageList);
if (mHandler != null) {
@@ -807,6 +852,12 @@
private BatterySipper addEntry(String label, DrainType drainType, long time, int iconId,
double power) {
+ mTotalPower += power;
+ return addEntryNoTotal(label, drainType, time, iconId, power);
+ }
+
+ private BatterySipper addEntryNoTotal(String label, DrainType drainType, long time, int iconId,
+ double power) {
if (power > mMaxPower) mMaxPower = power;
mTotalPower += power;
BatterySipper bs = new BatterySipper(mActivity, mRequestQueue, mHandler,
@@ -832,6 +883,14 @@
return mTotalPower;
}
+ public double getMinDrainedPower() {
+ return mMinDrainedPower;
+ }
+
+ public double getMaxDrainedPower() {
+ return mMaxDrainedPower;
+ }
+
private void load() {
try {
byte[] data = mBatteryInfo.getStatistics();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 8d316cf..79b7c42 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -67,7 +67,9 @@
BLUETOOTH,
SCREEN,
APP,
- USER
+ USER,
+ UNACCOUNTED,
+ OVERCOUNTED
}
// Note: Must match the sequence of the DrainType
@@ -80,6 +82,8 @@
R.string.battery_desc_display,
R.string.battery_desc_apps,
R.string.battery_desc_users,
+ R.string.battery_desc_unaccounted,
+ R.string.battery_desc_overcounted,
};
public static final int ACTION_DISPLAY_SETTINGS = 1;
@@ -329,6 +333,12 @@
final int percentage = (int) Math.floor(mValues[i]);
value = getActivity().getString(R.string.percentage, percentage);
break;
+ case R.string.usage_type_total_battery_capacity:
+ case R.string.usage_type_computed_power:
+ case R.string.usage_type_min_actual_power:
+ case R.string.usage_type_max_actual_power:
+ value = getActivity().getString(R.string.mah, (long)(mValues[i]));
+ break;
case R.string.usage_type_gps:
mUsesGps = true;
// Fall through
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index dc86b8d..2c78375 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -60,6 +60,8 @@
private static final int MENU_HELP = Menu.FIRST + 2;
private PreferenceGroup mAppListGroup;
+ private String mBatteryLevel;
+ private String mBatteryStatus;
private Preference mBatteryStatusPref;
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
@@ -74,13 +76,8 @@
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- String batteryLevel = com.android.settings.Utils.getBatteryPercentage(intent);
- String batteryStatus = com.android.settings.Utils.getBatteryStatus(getResources(),
- intent);
- String batterySummary = context.getResources().getString(
- R.string.power_usage_level_and_status, batteryLevel, batteryStatus);
- mBatteryStatusPref.setTitle(batterySummary);
+ if (Intent.ACTION_BATTERY_CHANGED.equals(action)
+ && updateBatteryStatus(intent)) {
mStatsHelper.clearStats();
refreshStats();
}
@@ -107,8 +104,8 @@
@Override
public void onResume() {
super.onResume();
- getActivity().registerReceiver(mBatteryInfoReceiver,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ updateBatteryStatus(getActivity().registerReceiver(mBatteryInfoReceiver,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
refreshStats();
}
@@ -194,12 +191,32 @@
mAppListGroup.addPreference(notAvailable);
}
+ private boolean updateBatteryStatus(Intent intent) {
+ if (intent != null) {
+ String batteryLevel = com.android.settings.Utils.getBatteryPercentage(intent);
+ String batteryStatus = com.android.settings.Utils.getBatteryStatus(getResources(),
+ intent);
+ if (!batteryLevel.equals(mBatteryLevel) || !batteryStatus.equals(mBatteryStatus)) {
+ mBatteryLevel = batteryLevel;
+ mBatteryStatus = batteryStatus;
+ return true;
+ }
+ }
+ return false;
+ }
+
private void refreshStats() {
mAppListGroup.removeAll();
mAppListGroup.setOrderingAsAdded(false);
mBatteryStatusPref.setOrder(-2);
+ if (mBatteryLevel != null && mBatteryStatus != null) {
+ String batterySummary = getActivity().getResources().getString(
+ R.string.power_usage_level_and_status, mBatteryLevel, mBatteryStatus);
+ mBatteryStatusPref.setTitle(batterySummary);
+ }
mAppListGroup.addPreference(mBatteryStatusPref);
+
BatteryHistoryPreference hist = new BatteryHistoryPreference(
getActivity(), mStatsHelper.getStats());
hist.setOrder(-1);