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">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD">&lt;/b&gt;&lt;br&gt;&lt;br&gt;</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">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD">&lt;/b&gt;&lt;br&gt;&lt;br&gt;</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">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD">&lt;/b&gt;&lt;br&gt;&lt;br&gt;</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:&lt;br&gt;&lt;b&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/b&gt;&lt;br&gt;&lt;br&gt;Assegura\'t que apareix aquesta contrasenya:&lt;br&gt;&lt;b&gt;<xliff:g id="PASSKEY">%2$s</xliff:g>&lt;/b&gt;"</string>
     <string name="bluetooth_incoming_pairing_msg" msgid="1615930853859551491">"De:&lt;br&gt;&lt;b&gt;<xliff:g id="DEVICE_NAME">%1$s</xliff:g>&lt;/b&gt;&lt;br&gt;&lt;br&gt;Vols emparellar-lo amb aquest dispositiu?"</string>
-    <string name="bluetooth_display_passkey_pin_msg" msgid="2796550001376088433">"Per sincronitzar amb:<xliff:g id="BOLD1_0">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1">&lt;/b&gt;&lt;br&gt;&lt;br&gt;</xliff:g>Escriu-hi:<xliff:g id="BOLD2_1">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2">&lt;/b&gt;</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">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1">&lt;/b&gt;&lt;br&gt;&lt;br&gt;</xliff:g>Escriu <xliff:g id="BOLD2_1">&lt;br&gt;&lt;b&gt;</xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2">&lt;/b&gt;</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);