Merge "Move HAS_TRANSIENT_STATE flag into a safe area." into jb-mr1-dev
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index fb7a4f8..446bbf0 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -21,6 +21,7 @@
import android.os.SystemClock;
import android.util.SparseBooleanArray;
+import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Objects;
import java.io.CharArrayWriter;
@@ -608,13 +609,13 @@
* Return all rows except those attributed to the requested UID; doesn't
* mutate the original structure.
*/
- public NetworkStats withoutUid(int uid) {
+ public NetworkStats withoutUids(int[] uids) {
final NetworkStats stats = new NetworkStats(elapsedRealtime, 10);
Entry entry = new Entry();
for (int i = 0; i < size; i++) {
entry = getValues(i, entry);
- if (entry.uid != uid) {
+ if (!ArrayUtils.contains(uids, entry.uid)) {
stats.addValues(entry);
}
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 68ce72f..2cda5a8 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -1338,7 +1338,7 @@
/** @deprecated - Do not use */
@Deprecated
public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
- /* intentionally empty */
+ setShowGTalkServiceStatusForUser(cr, flag, UserHandle.myUserId());
}
/**
diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java
index d9aeb70..e6eaa14 100644
--- a/core/java/android/webkit/JWebCoreJavaBridge.java
+++ b/core/java/android/webkit/JWebCoreJavaBridge.java
@@ -89,7 +89,6 @@
private void fireSharedTimer() {
// clear the flag so that sharedTimerFired() can set a new timer
mHasInstantTimer = false;
- removeMessages(TIMER_MESSAGE);
sharedTimerFired();
}
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 2d834ff..ddc0319 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -2198,20 +2198,12 @@
mEventHub.sendMessage(Message.obtain(null, EventHub.WEBKIT_DRAW));
}
m_skipDrawFlag = false;
- m_skipDrawFlagLock.notify();
}
}
private void webkitDraw() {
synchronized (m_skipDrawFlagLock) {
if (m_skipDrawFlag) {
- try {
- // Aggressively throttle webkit to give the UI more CPU
- // to catch up with
- m_skipDrawFlagLock.wait(50);
- } catch (InterruptedException e) {}
- }
- if (m_skipDrawFlag) {
m_drawWasSkipped = true;
return;
}
diff --git a/core/tests/coretests/src/android/net/NetworkStatsTest.java b/core/tests/coretests/src/android/net/NetworkStatsTest.java
index 098464f..6331964 100644
--- a/core/tests/coretests/src/android/net/NetworkStatsTest.java
+++ b/core/tests/coretests/src/android/net/NetworkStatsTest.java
@@ -287,7 +287,7 @@
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
- final NetworkStats after = before.withoutUid(100);
+ final NetworkStats after = before.withoutUids(new int[] { 100 });
assertEquals(6, before.size());
assertEquals(2, after.size());
assertValues(after, 0, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L);
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 24e07e0..fd8be33 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -153,18 +153,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Ενεργ. λειτ. dreams"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Λειτουργία πτήσης"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Φόρτιση, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Χρεώθηκε"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> συσκευές)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Φωτεινότητα"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Αυτόματη περιστροφή"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Η περιστροφή είναι κλειδωμένη"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Μέθοδος εισαγωγής"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Τοποθεσία σε χρήση"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Συσκευή μέσων"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 0514023..8ff3b0e 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -151,18 +151,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Start dreams"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Charged"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Rotate"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation Locked"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Location in use"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 966bc1d..a545b46 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -165,7 +165,7 @@
<skip />
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Sisestusmeetod"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Kasutatav asukoht"</string>
- <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Meediumiseade"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Meediaseade"</string>
<string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
<string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Ainult hädaabikõned"</string>
<string name="quick_settings_settings_label" msgid="5326556592578065401">"Seaded"</string>
@@ -173,13 +173,13 @@
<string name="quick_settings_user_label" msgid="5238995632130897840">"Mina"</string>
<string name="quick_settings_wifi_label" msgid="4393429107095001520">"WiFi"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
- <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WiFi-kuva"</string>
- <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"WiFi-kuva ühendus puudub"</string>
+ <string name="quick_settings_wifi_display_label" msgid="6653501376641018614">"WiFi-ekraan"</string>
+ <string name="quick_settings_wifi_display_no_connection_label" msgid="6255615315258869136">"WiFi-ekraani ühendus puudub"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string>
<string name="wifi_display_scan" msgid="8453135922233546097">"Skannimine"</string>
<string name="wifi_display_disconnect" msgid="5450214362789378584">"Katkesta ühendus"</string>
- <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WiFi-kuva"</string>
+ <string name="wifi_display_dialog_title" msgid="2817993038700218900">"WiFi-ekraan"</string>
<string name="wifi_display_state_available" msgid="980373281442607096">"Saadaval"</string>
<string name="wifi_display_state_connecting" msgid="1677010908036241940">"Ühendamine"</string>
<string name="wifi_display_state_connected" msgid="9154375061719151149">"Ühendatud"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index cf8fcb8..cd2aef8 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -151,7 +151,7 @@
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"L\'écran est verrouillé en mode paysage."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"L\'écran est verrouillé en mode portrait."</string>
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
- <string name="start_dreams" msgid="870400522982252717">"Lancer Rêves"</string>
+ <string name="start_dreams" msgid="870400522982252717">"Lancer fonct. Rêves"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode avion"</string>
<!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
<skip />
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 073bb02..506f6c5 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -59,7 +59,7 @@
<string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור מכשיר USB זה"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"השתמש כברירת מחדל עבור אביזר USB זה"</string>
<string name="usb_debugging_title" msgid="4513918393387141949">"האם לאפשר ניקוי באגים ב-USB?"</string>
- <string name="usb_debugging_message" msgid="2220143855912376496">"טביעת אצבע מפתח ה-RSA של המחשב היא:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"טביעת האצבע של מפתח ה-RSA של המחשב היא:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="303335496705863070">"אפשר תמיד ממחשב זה"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"הגדל תצוגה כדי למלא את המסך"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 4adde52..239ef18 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -151,18 +151,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Dromen starten"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegmodus"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Opladen, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Opgeladen"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> apparaten)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatische rotatie"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotatie vergrendeld"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermethode"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Locatie in gebruik"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media-apparaat"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 8e2ef95..7c063cb 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -59,7 +59,7 @@
<string name="always_use_device" msgid="1450287437017315906">"Использовать по умолчанию для этого USB-устройства"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Использовать по умолчанию для этого USB-аксессуара"</string>
<string name="usb_debugging_title" msgid="4513918393387141949">"Отладка по USB"</string>
- <string name="usb_debugging_message" msgid="2220143855912376496">"Контрольная сумма ключа RSA:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+ <string name="usb_debugging_message" msgid="2220143855912376496">"Цифровой отпечаток ключа RSA:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="303335496705863070">"Всегда разрешать отладку с этого компьютера"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"Подогнать по размерам экрана"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"Растянуть на весь экран"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 04af7cf..086c49f 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -151,18 +151,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Starta drömmar"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flygplansläge"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Laddar, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Laddat"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> enheter)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ljusstyrka"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotera automatiskt"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotationen har låsts"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Inmatningsmetod"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Plats som används"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medieenhet"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 2b967f1..b22c12d 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -151,18 +151,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Увімкнути Dreams"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим польоту"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Заряджається, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Заряджено"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (пристроїв: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яскравість"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Обертати автоматично"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Обертання заблоковано"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод введення"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Поточне місцезнаходження"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Носій"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 57fa40d..a408b2d 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -60,7 +60,7 @@
<string name="always_use_accessory" msgid="1210954576979621596">"默认情况下用于该 USB 配件"</string>
<string name="usb_debugging_title" msgid="4513918393387141949">"允许 USB 调试吗?"</string>
<string name="usb_debugging_message" msgid="2220143855912376496">"这台计算机的 RSA 密钥指纹如下:"\n"<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
- <string name="usb_debugging_always" msgid="303335496705863070">"一律允许通过这台计算机进行"</string>
+ <string name="usb_debugging_always" msgid="303335496705863070">"一律允许使用这台计算机进行调试"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"缩放以填满屏幕"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"拉伸以填满屏幕"</string>
<string name="compat_mode_help_header" msgid="7969493989397529910">"兼容性缩放"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 7c93982..f7da7a9 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -151,18 +151,13 @@
<string name="jelly_bean_dream_name" msgid="5992026543636816792">"I-BeanFlinger"</string>
<string name="start_dreams" msgid="870400522982252717">"Qala amaphupho"</string>
<string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Isimo sendiza"</string>
- <!-- no translation found for quick_settings_battery_charging_label (490074774465309209) -->
- <skip />
- <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
- <skip />
+ <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Iyashaja <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+ <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Kushajiwe"</string>
<string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"I-Bluetooth"</string>
- <!-- no translation found for quick_settings_bluetooth_multiple_devices_label (3912245565613684735) -->
- <skip />
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"I-Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> amadivayisi)"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ukugqama"</string>
- <!-- no translation found for quick_settings_rotation_unlocked_label (336054930362580584) -->
- <skip />
- <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
- <skip />
+ <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Ukuphendula ngokuzenzakalela"</string>
+ <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ukuphendula kukhiyiwe"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"Indlela yokungenayo"</string>
<string name="quick_settings_location_label" msgid="3292451598267467545">"Indawo iyasetshenziswa"</string>
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"Idivayisi yemidiya"</string>
diff --git a/services/java/com/android/server/net/NetworkStatsCollection.java b/services/java/com/android/server/net/NetworkStatsCollection.java
index 60666b4..3169035 100644
--- a/services/java/com/android/server/net/NetworkStatsCollection.java
+++ b/services/java/com/android/server/net/NetworkStatsCollection.java
@@ -31,6 +31,7 @@
import android.text.format.DateUtils;
import android.util.AtomicFile;
+import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FileRotator;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Objects;
@@ -431,13 +432,13 @@
* moving any {@link NetworkStats#TAG_NONE} series to
* {@link TrafficStats#UID_REMOVED}.
*/
- public void removeUid(int uid) {
+ public void removeUids(int[] uids) {
final ArrayList<Key> knownKeys = Lists.newArrayList();
knownKeys.addAll(mStats.keySet());
// migrate all UID stats into special "removed" bucket
for (Key key : knownKeys) {
- if (key.uid == uid) {
+ if (ArrayUtils.contains(uids, key.uid)) {
// only migrate combined TAG_NONE history
if (key.tag == TAG_NONE) {
final NetworkStatsHistory uidHistory = mStats.get(key);
diff --git a/services/java/com/android/server/net/NetworkStatsRecorder.java b/services/java/com/android/server/net/NetworkStatsRecorder.java
index c3ecf54..2b32b41 100644
--- a/services/java/com/android/server/net/NetworkStatsRecorder.java
+++ b/services/java/com/android/server/net/NetworkStatsRecorder.java
@@ -42,6 +42,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ref.WeakReference;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
@@ -233,23 +234,27 @@
* Remove the given UID from all {@link FileRotator} history, migrating it
* to {@link TrafficStats#UID_REMOVED}.
*/
- public void removeUidLocked(int uid) {
+ public void removeUidsLocked(int[] uids) {
try {
- // process all existing data to migrate uid
- mRotator.rewriteAll(new RemoveUidRewriter(mBucketDuration, uid));
+ // Rewrite all persisted data to migrate UID stats
+ mRotator.rewriteAll(new RemoveUidRewriter(mBucketDuration, uids));
} catch (IOException e) {
- Log.wtf(TAG, "problem removing UID " + uid, e);
+ Log.wtf(TAG, "problem removing UIDs " + Arrays.toString(uids), e);
recoverFromWtf();
}
- // clear UID from current stats snapshot
+ // Remove any pending stats
+ mPending.removeUids(uids);
+ mSinceBoot.removeUids(uids);
+
+ // Clear UID from current stats snapshot
if (mLastSnapshot != null) {
- mLastSnapshot = mLastSnapshot.withoutUid(uid);
+ mLastSnapshot = mLastSnapshot.withoutUids(uids);
}
final NetworkStatsCollection complete = mComplete != null ? mComplete.get() : null;
if (complete != null) {
- complete.removeUid(uid);
+ complete.removeUids(uids);
}
}
@@ -293,11 +298,11 @@
*/
public static class RemoveUidRewriter implements FileRotator.Rewriter {
private final NetworkStatsCollection mTemp;
- private final int mUid;
+ private final int[] mUids;
- public RemoveUidRewriter(long bucketDuration, int uid) {
+ public RemoveUidRewriter(long bucketDuration, int[] uids) {
mTemp = new NetworkStatsCollection(bucketDuration);
- mUid = uid;
+ mUids = uids;
}
@Override
@@ -309,7 +314,7 @@
public void read(InputStream in) throws IOException {
mTemp.read(in);
mTemp.clearDirty();
- mTemp.removeUid(mUid);
+ mTemp.removeUids(mUids);
}
@Override
diff --git a/services/java/com/android/server/net/NetworkStatsService.java b/services/java/com/android/server/net/NetworkStatsService.java
index 3a593e4..f2748a3 100644
--- a/services/java/com/android/server/net/NetworkStatsService.java
+++ b/services/java/com/android/server/net/NetworkStatsService.java
@@ -23,6 +23,7 @@
import static android.Manifest.permission.READ_NETWORK_USAGE_HISTORY;
import static android.content.Intent.ACTION_SHUTDOWN;
import static android.content.Intent.ACTION_UID_REMOVED;
+import static android.content.Intent.ACTION_USER_REMOVED;
import static android.content.Intent.EXTRA_UID;
import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE;
@@ -76,6 +77,8 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.net.IConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.INetworkStatsService;
@@ -112,6 +115,7 @@
import android.util.SparseIntArray;
import android.util.TrustedTime;
+import com.android.internal.util.ArrayUtils;
import com.android.internal.util.FileRotator;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.EventLogTags;
@@ -122,8 +126,10 @@
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
/**
* Collect and persist detailed network statistics, and provide this data to
@@ -322,6 +328,10 @@
final IntentFilter removedFilter = new IntentFilter(ACTION_UID_REMOVED);
mContext.registerReceiver(mRemovedReceiver, removedFilter, null, mHandler);
+ // listen for user changes to clean stats
+ final IntentFilter userFilter = new IntentFilter(ACTION_USER_REMOVED);
+ mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler);
+
// persist stats during clean shutdown
final IntentFilter shutdownFilter = new IntentFilter(ACTION_SHUTDOWN);
mContext.registerReceiver(mShutdownReceiver, shutdownFilter);
@@ -739,11 +749,34 @@
public void onReceive(Context context, Intent intent) {
// on background handler thread, and UID_REMOVED is protected
// broadcast.
- final int uid = intent.getIntExtra(EXTRA_UID, 0);
+
+ final int uid = intent.getIntExtra(EXTRA_UID, -1);
+ if (uid == -1) return;
+
synchronized (mStatsLock) {
mWakeLock.acquire();
try {
- removeUidLocked(uid);
+ removeUidsLocked(uid);
+ } finally {
+ mWakeLock.release();
+ }
+ }
+ }
+ };
+
+ private BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // On background handler thread, and USER_REMOVED is protected
+ // broadcast.
+
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ if (userId == -1) return;
+
+ synchronized (mStatsLock) {
+ mWakeLock.acquire();
+ try {
+ removeUserLocked(userId);
} finally {
mWakeLock.release();
}
@@ -1034,15 +1067,37 @@
/**
* Clean up {@link #mUidRecorder} after UID is removed.
*/
- private void removeUidLocked(int uid) {
- // perform one last poll before removing
+ private void removeUidsLocked(int... uids) {
+ if (LOGV) Slog.v(TAG, "removeUidsLocked() for UIDs " + Arrays.toString(uids));
+
+ // Perform one last poll before removing
performPollLocked(FLAG_PERSIST_ALL);
- mUidRecorder.removeUidLocked(uid);
- mUidTagRecorder.removeUidLocked(uid);
+ mUidRecorder.removeUidsLocked(uids);
+ mUidTagRecorder.removeUidsLocked(uids);
- // clear kernel stats associated with UID
- resetKernelUidStats(uid);
+ // Clear kernel stats associated with UID
+ for (int uid : uids) {
+ resetKernelUidStats(uid);
+ }
+ }
+
+ /**
+ * Clean up {@link #mUidRecorder} after user is removed.
+ */
+ private void removeUserLocked(int userId) {
+ if (LOGV) Slog.v(TAG, "removeUserLocked() for userId=" + userId);
+
+ // Build list of UIDs that we should clean up
+ int[] uids = new int[0];
+ final List<ApplicationInfo> apps = mContext.getPackageManager().getInstalledApplications(
+ PackageManager.GET_UNINSTALLED_PACKAGES | PackageManager.GET_DISABLED_COMPONENTS);
+ for (ApplicationInfo app : apps) {
+ final int uid = UserHandle.getUid(userId, app.uid);
+ uids = ArrayUtils.appendInt(uids, uid);
+ }
+
+ removeUidsLocked(uids);
}
@Override