Merge "Import translations. DO NOT MERGE" into jb-mr1-dev
diff --git a/api/17.txt b/api/17.txt
index 6079818..e86de90 100644
--- a/api/17.txt
+++ b/api/17.txt
@@ -331,6 +331,7 @@
field public static final int checkboxStyle = 16842860; // 0x101006c
field public static final int checked = 16843014; // 0x1010106
field public static final int checkedButton = 16843080; // 0x1010148
+ field public static final int checkedTextViewStyle = 16843720; // 0x10103c8
field public static final int childDivider = 16843025; // 0x1010111
field public static final int childIndicator = 16843020; // 0x101010c
field public static final int childIndicatorLeft = 16843023; // 0x101010f
@@ -1789,6 +1790,7 @@
field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142
field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144
field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e
+ field public static final int Widget_DeviceDefault_CheckedTextView = 16974299; // 0x10301db
field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148
field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159
field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d
@@ -1822,6 +1824,7 @@
field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176
field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178
field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e
+ field public static final int Widget_DeviceDefault_Light_CheckedTextView = 16974300; // 0x10301dc
field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c
field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190
field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194
@@ -1907,6 +1910,7 @@
field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c
field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e
field public static final int Widget_Holo_CalendarView = 16974060; // 0x10300ec
+ field public static final int Widget_Holo_CheckedTextView = 16974297; // 0x10301d9
field public static final int Widget_Holo_CompoundButton_CheckBox = 16973969; // 0x1030091
field public static final int Widget_Holo_CompoundButton_RadioButton = 16973986; // 0x10300a2
field public static final int Widget_Holo_CompoundButton_Star = 16973990; // 0x10300a6
@@ -1940,6 +1944,7 @@
field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9
field public static final int Widget_Holo_Light_CalendarView = 16974061; // 0x10300ed
+ field public static final int Widget_Holo_Light_CheckedTextView = 16974298; // 0x10301da
field public static final int Widget_Holo_Light_CompoundButton_CheckBox = 16974012; // 0x10300bc
field public static final int Widget_Holo_Light_CompoundButton_RadioButton = 16974032; // 0x10300d0
field public static final int Widget_Holo_Light_CompoundButton_Star = 16974036; // 0x10300d4
@@ -2673,6 +2678,7 @@
method public void invalidateOptionsMenu();
method public boolean isChangingConfigurations();
method public final boolean isChild();
+ method public boolean isDestroyed();
method public boolean isFinishing();
method public boolean isTaskRoot();
method public final deprecated android.database.Cursor managedQuery(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
@@ -3480,6 +3486,7 @@
method public abstract int getBackStackEntryCount();
method public abstract android.app.Fragment getFragment(android.os.Bundle, java.lang.String);
method public void invalidateOptionsMenu();
+ method public abstract boolean isDestroyed();
method public abstract void popBackStack();
method public abstract void popBackStack(java.lang.String, int);
method public abstract void popBackStack(int, int);
@@ -18810,11 +18817,14 @@
field public static final java.lang.String ADB_ENABLED = "adb_enabled";
field public static final java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on";
field public static final java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+ field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+ field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
field public static final java.lang.String AUTO_TIME = "auto_time";
field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone";
field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DATA_ROAMING = "data_roaming";
+ field public static final java.lang.String DEBUG_APP = "debug_app";
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned";
field public static final java.lang.String HTTP_PROXY = "http_proxy";
@@ -18825,10 +18835,13 @@
field public static final java.lang.String RADIO_CELL = "cell";
field public static final java.lang.String RADIO_NFC = "nfc";
field public static final java.lang.String RADIO_WIFI = "wifi";
+ field public static final java.lang.String SHOW_PROCESSES = "show_processes";
field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_global_version";
+ field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
+ field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
@@ -18840,6 +18853,7 @@
field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+ field public static final java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
}
public static class Settings.NameValueTable implements android.provider.BaseColumns {
@@ -18954,9 +18968,9 @@
field public static final deprecated java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on";
field public static final deprecated java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
field public static final java.lang.String ALARM_ALERT = "alarm_alert";
- field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+ field public static final deprecated java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
field public static final deprecated java.lang.String ANDROID_ID = "android_id";
- field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+ field public static final deprecated java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
field public static final java.lang.String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
field public static final deprecated java.lang.String AUTO_TIME = "auto_time";
field public static final deprecated java.lang.String AUTO_TIME_ZONE = "auto_time_zone";
@@ -18966,7 +18980,7 @@
field public static final android.net.Uri CONTENT_URI;
field public static final deprecated java.lang.String DATA_ROAMING = "data_roaming";
field public static final java.lang.String DATE_FORMAT = "date_format";
- field public static final java.lang.String DEBUG_APP = "debug_app";
+ field public static final deprecated java.lang.String DEBUG_APP = "debug_app";
field public static final android.net.Uri DEFAULT_ALARM_ALERT_URI;
field public static final android.net.Uri DEFAULT_NOTIFICATION_URI;
field public static final android.net.Uri DEFAULT_RINGTONE_URI;
@@ -19005,7 +19019,7 @@
field public static final deprecated java.lang.String SETTINGS_CLASSNAME = "settings_classname";
field public static final java.lang.String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
field public static final java.lang.String SHOW_GTALK_SERVICE_STATUS = "SHOW_GTALK_SERVICE_STATUS";
- field public static final java.lang.String SHOW_PROCESSES = "show_processes";
+ field public static final deprecated java.lang.String SHOW_PROCESSES = "show_processes";
field public static final deprecated java.lang.String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
field public static final java.lang.String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
field public static final deprecated java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
@@ -19015,7 +19029,7 @@
field public static final java.lang.String TEXT_AUTO_REPLACE = "auto_replace";
field public static final java.lang.String TEXT_SHOW_PASSWORD = "show_password";
field public static final java.lang.String TIME_12_24 = "time_12_24";
- field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+ field public static final deprecated java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USER_ROTATION = "user_rotation";
field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
@@ -19028,8 +19042,8 @@
field public static final java.lang.String[] VOLUME_SETTINGS;
field public static final java.lang.String VOLUME_SYSTEM = "volume_system";
field public static final java.lang.String VOLUME_VOICE = "volume_voice";
- field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
- field public static final java.lang.String WALLPAPER_ACTIVITY = "wallpaper_activity";
+ field public static final deprecated java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+ field public static final deprecated java.lang.String WALLPAPER_ACTIVITY = "wallpaper_activity";
field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final deprecated java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
@@ -19057,7 +19071,7 @@
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
- field public static final java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+ field public static final deprecated java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
}
public class SyncStateContract {
@@ -23707,6 +23721,7 @@
public final class Display {
method public void getCurrentSizeRange(android.graphics.Point, android.graphics.Point);
method public int getDisplayId();
+ method public int getFlags();
method public deprecated int getHeight();
method public void getMetrics(android.util.DisplayMetrics);
method public java.lang.String getName();
@@ -23721,6 +23736,7 @@
method public deprecated int getWidth();
method public boolean isValid();
field public static final int DEFAULT_DISPLAY = 0; // 0x0
+ field public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1; // 0x1
}
public class DragEvent implements android.os.Parcelable {
diff --git a/api/current.txt b/api/current.txt
index d6c75d1..e86de90 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2678,6 +2678,7 @@
method public void invalidateOptionsMenu();
method public boolean isChangingConfigurations();
method public final boolean isChild();
+ method public boolean isDestroyed();
method public boolean isFinishing();
method public boolean isTaskRoot();
method public final deprecated android.database.Cursor managedQuery(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
@@ -3485,6 +3486,7 @@
method public abstract int getBackStackEntryCount();
method public abstract android.app.Fragment getFragment(android.os.Bundle, java.lang.String);
method public void invalidateOptionsMenu();
+ method public abstract boolean isDestroyed();
method public abstract void popBackStack();
method public abstract void popBackStack(java.lang.String, int);
method public abstract void popBackStack(int, int);
@@ -18815,11 +18817,14 @@
field public static final java.lang.String ADB_ENABLED = "adb_enabled";
field public static final java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on";
field public static final java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+ field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+ field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
field public static final java.lang.String AUTO_TIME = "auto_time";
field public static final java.lang.String AUTO_TIME_ZONE = "auto_time_zone";
field public static final java.lang.String BLUETOOTH_ON = "bluetooth_on";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DATA_ROAMING = "data_roaming";
+ field public static final java.lang.String DEBUG_APP = "debug_app";
field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned";
field public static final java.lang.String HTTP_PROXY = "http_proxy";
@@ -18830,10 +18835,13 @@
field public static final java.lang.String RADIO_CELL = "cell";
field public static final java.lang.String RADIO_NFC = "nfc";
field public static final java.lang.String RADIO_WIFI = "wifi";
+ field public static final java.lang.String SHOW_PROCESSES = "show_processes";
field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
field public static final java.lang.String SYS_PROP_SETTING_VERSION = "sys.settings_global_version";
+ field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
+ field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
field public static final java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
@@ -18845,6 +18853,7 @@
field public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
field public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
field public static final java.lang.String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+ field public static final java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
}
public static class Settings.NameValueTable implements android.provider.BaseColumns {
@@ -18959,9 +18968,9 @@
field public static final deprecated java.lang.String AIRPLANE_MODE_ON = "airplane_mode_on";
field public static final deprecated java.lang.String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
field public static final java.lang.String ALARM_ALERT = "alarm_alert";
- field public static final java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+ field public static final deprecated java.lang.String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
field public static final deprecated java.lang.String ANDROID_ID = "android_id";
- field public static final java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+ field public static final deprecated java.lang.String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
field public static final java.lang.String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
field public static final deprecated java.lang.String AUTO_TIME = "auto_time";
field public static final deprecated java.lang.String AUTO_TIME_ZONE = "auto_time_zone";
@@ -18971,7 +18980,7 @@
field public static final android.net.Uri CONTENT_URI;
field public static final deprecated java.lang.String DATA_ROAMING = "data_roaming";
field public static final java.lang.String DATE_FORMAT = "date_format";
- field public static final java.lang.String DEBUG_APP = "debug_app";
+ field public static final deprecated java.lang.String DEBUG_APP = "debug_app";
field public static final android.net.Uri DEFAULT_ALARM_ALERT_URI;
field public static final android.net.Uri DEFAULT_NOTIFICATION_URI;
field public static final android.net.Uri DEFAULT_RINGTONE_URI;
@@ -19010,7 +19019,7 @@
field public static final deprecated java.lang.String SETTINGS_CLASSNAME = "settings_classname";
field public static final java.lang.String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
field public static final java.lang.String SHOW_GTALK_SERVICE_STATUS = "SHOW_GTALK_SERVICE_STATUS";
- field public static final java.lang.String SHOW_PROCESSES = "show_processes";
+ field public static final deprecated java.lang.String SHOW_PROCESSES = "show_processes";
field public static final deprecated java.lang.String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
field public static final java.lang.String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
field public static final deprecated java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
@@ -19020,7 +19029,7 @@
field public static final java.lang.String TEXT_AUTO_REPLACE = "auto_replace";
field public static final java.lang.String TEXT_SHOW_PASSWORD = "show_password";
field public static final java.lang.String TIME_12_24 = "time_12_24";
- field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+ field public static final deprecated java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
field public static final deprecated java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
field public static final java.lang.String USER_ROTATION = "user_rotation";
field public static final deprecated java.lang.String USE_GOOGLE_MAIL = "use_google_mail";
@@ -19033,8 +19042,8 @@
field public static final java.lang.String[] VOLUME_SETTINGS;
field public static final java.lang.String VOLUME_SYSTEM = "volume_system";
field public static final java.lang.String VOLUME_VOICE = "volume_voice";
- field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
- field public static final java.lang.String WALLPAPER_ACTIVITY = "wallpaper_activity";
+ field public static final deprecated java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+ field public static final deprecated java.lang.String WALLPAPER_ACTIVITY = "wallpaper_activity";
field public static final deprecated java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
field public static final deprecated java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
field public static final deprecated java.lang.String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
@@ -19062,7 +19071,7 @@
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
field public static final deprecated java.lang.String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
- field public static final java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+ field public static final deprecated java.lang.String WINDOW_ANIMATION_SCALE = "window_animation_scale";
}
public class SyncStateContract {
@@ -23712,6 +23721,7 @@
public final class Display {
method public void getCurrentSizeRange(android.graphics.Point, android.graphics.Point);
method public int getDisplayId();
+ method public int getFlags();
method public deprecated int getHeight();
method public void getMetrics(android.util.DisplayMetrics);
method public java.lang.String getName();
@@ -23726,6 +23736,7 @@
method public deprecated int getWidth();
method public boolean isValid();
field public static final int DEFAULT_DISPLAY = 0; // 0x0
+ field public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1; // 0x1
}
public class DragEvent implements android.os.Parcelable {
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 7606d5e3..5dc9da2 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -685,6 +685,7 @@
private boolean mStopped;
boolean mFinished;
boolean mStartedActivity;
+ private boolean mDestroyed;
/** true if the activity is going through a transient pause */
/*package*/ boolean mTemporaryPause = false;
/** true if the activity is being destroyed in order to recreate it with a new configuration */
@@ -4089,6 +4090,14 @@
}
/**
+ * Returns true if the final {@link #onDestroy()} call has been made
+ * on the Activity, so this instance is now dead.
+ */
+ public boolean isDestroyed() {
+ return mDestroyed;
+ }
+
+ /**
* Check to see whether this activity is in the process of being destroyed in order to be
* recreated with a new configuration. This is often used in
* {@link #onStop} to determine whether the state needs to be cleaned up or will be passed
@@ -5258,6 +5267,7 @@
}
final void performDestroy() {
+ mDestroyed = true;
mWindow.destroy();
mFragments.dispatchDestroy();
onDestroy();
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index c41405b..59fa1e0 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -1703,6 +1703,7 @@
if (packageName.equals("system") || packageName.equals("android")) {
final ContextImpl context = new ContextImpl(mMainThread.getSystemContext());
context.mBasePackageName = mBasePackageName;
+ context.mUser = user;
return context;
}
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index e983299..10ea109 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -318,6 +318,12 @@
public abstract Fragment.SavedState saveFragmentInstanceState(Fragment f);
/**
+ * Returns true if the final {@link Activity#onDestroy() Activity.onDestroy()}
+ * call has been made on the FragmentManager's Activity, so this instance is now dead.
+ */
+ public abstract boolean isDestroyed();
+
+ /**
* Print the FragmentManager's state into the given stream.
*
* @param prefix Text to print at the front of each line.
@@ -588,6 +594,11 @@
}
@Override
+ public boolean isDestroyed() {
+ return mDestroyed;
+ }
+
+ @Override
public String toString() {
StringBuilder sb = new StringBuilder(128);
sb.append("FragmentManager{");
diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java
index 7b3d8cd..3579977 100644
--- a/core/java/android/content/pm/PackageUserState.java
+++ b/core/java/android/content/pm/PackageUserState.java
@@ -34,14 +34,6 @@
public HashSet<String> enabledComponents;
public PackageUserState() {
- this(true);
- }
-
- /** @hide */
- public PackageUserState(boolean isSystem) {
- if (!isSystem) {
- stopped = notLaunched = true;
- }
installed = true;
enabled = COMPONENT_ENABLED_STATE_DEFAULT;
}
diff --git a/core/java/android/hardware/usb/IUsbManager.aidl b/core/java/android/hardware/usb/IUsbManager.aidl
index 98bd4f5..8286686 100644
--- a/core/java/android/hardware/usb/IUsbManager.aidl
+++ b/core/java/android/hardware/usb/IUsbManager.aidl
@@ -44,12 +44,12 @@
/* Sets the default package for a USB device
* (or clears it if the package name is null)
*/
- void setDevicePackage(in UsbDevice device, String packageName);
+ void setDevicePackage(in UsbDevice device, String packageName, int userId);
/* Sets the default package for a USB accessory
* (or clears it if the package name is null)
*/
- void setAccessoryPackage(in UsbAccessory accessory, String packageName);
+ void setAccessoryPackage(in UsbAccessory accessory, String packageName, int userId);
/* Returns true if the caller has permission to access the device. */
boolean hasDevicePermission(in UsbDevice device);
@@ -77,10 +77,10 @@
void grantAccessoryPermission(in UsbAccessory accessory, int uid);
/* Returns true if the USB manager has default preferences or permissions for the package */
- boolean hasDefaults(String packageName);
+ boolean hasDefaults(String packageName, int userId);
/* Clears default preferences and permissions for the package */
- void clearDefaults(String packageName);
+ void clearDefaults(String packageName, int userId);
/* Sets the current USB function. */
void setCurrentFunction(String function, boolean makeDefault);
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index cf3b802..f07002e 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -683,8 +683,8 @@
com.android.internal.R.layout.input_method, null);
mWindow.setContentView(mRootView);
mRootView.getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsComputer);
- if (Settings.System.getInt(getContentResolver(),
- Settings.System.FANCY_IME_ANIMATIONS, 0) != 0) {
+ if (Settings.Global.getInt(getContentResolver(),
+ Settings.Global.FANCY_IME_ANIMATIONS, 0) != 0) {
mWindow.getWindow().setWindowAnimations(
com.android.internal.R.style.Animation_InputMethodFancy);
}
diff --git a/core/java/android/net/CaptivePortalTracker.java b/core/java/android/net/CaptivePortalTracker.java
index 9b11094..ce71e6b 100644
--- a/core/java/android/net/CaptivePortalTracker.java
+++ b/core/java/android/net/CaptivePortalTracker.java
@@ -31,6 +31,7 @@
import android.os.Message;
import android.os.RemoteException;
import android.provider.Settings;
+import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.internal.util.State;
@@ -63,6 +64,7 @@
private boolean mNotificationShown = false;
private boolean mIsCaptivePortalCheckEnabled = false;
private IConnectivityManager mConnService;
+ private TelephonyManager mTelephonyManager;
private Context mContext;
private NetworkInfo mNetworkInfo;
@@ -84,6 +86,7 @@
mContext = context;
mConnService = cs;
+ mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
@@ -326,17 +329,33 @@
if (visible) {
CharSequence title;
- if (mNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
- title = r.getString(R.string.wifi_available_sign_in, 0);
- } else {
- title = r.getString(R.string.network_available_sign_in, 0);
+ CharSequence details;
+ int icon;
+ switch (mNetworkInfo.getType()) {
+ case ConnectivityManager.TYPE_WIFI:
+ title = r.getString(R.string.wifi_available_sign_in, 0);
+ details = r.getString(R.string.network_available_sign_in_detailed,
+ mNetworkInfo.getExtraInfo());
+ icon = R.drawable.stat_notify_wifi_in_range;
+ break;
+ case ConnectivityManager.TYPE_MOBILE:
+ title = r.getString(R.string.network_available_sign_in, 0);
+ // TODO: Change this to pull from NetworkInfo once a printable
+ // name has been added to it
+ details = mTelephonyManager.getNetworkOperatorName();
+ icon = R.drawable.stat_notify_rssi_in_range;
+ break;
+ default:
+ title = r.getString(R.string.network_available_sign_in, 0);
+ details = r.getString(R.string.network_available_sign_in_detailed,
+ mNetworkInfo.getExtraInfo());
+ icon = R.drawable.stat_notify_rssi_in_range;
+ break;
}
- CharSequence details = r.getString(R.string.network_available_sign_in_detailed,
- mNetworkInfo.getExtraInfo());
Notification notification = new Notification();
notification.when = 0;
- notification.icon = com.android.internal.R.drawable.stat_notify_wifi_in_range;
+ notification.icon = icon;
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 7b16f4d..2e38960 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -117,4 +117,8 @@
public static final int BATTERY_PLUGGED_USB = 2;
/** Power source is wireless. */
public static final int BATTERY_PLUGGED_WIRELESS = 4;
+
+ /** @hide */
+ public static final int BATTERY_PLUGGED_ANY =
+ BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 8f1210b..2a8cf21 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -19,6 +19,7 @@
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.SearchManager;
+import android.app.WallpaperManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -940,6 +941,17 @@
MOVED_TO_GLOBAL.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
MOVED_TO_GLOBAL.add(Settings.Global.WIFI_SLEEP_POLICY);
MOVED_TO_GLOBAL.add(Settings.Global.MODE_RINGER);
+ MOVED_TO_GLOBAL.add(Settings.Global.WINDOW_ANIMATION_SCALE);
+ MOVED_TO_GLOBAL.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
+ MOVED_TO_GLOBAL.add(Settings.Global.ANIMATOR_DURATION_SCALE);
+ MOVED_TO_GLOBAL.add(Settings.Global.FANCY_IME_ANIMATIONS);
+ MOVED_TO_GLOBAL.add(Settings.Global.COMPATIBILITY_MODE);
+ MOVED_TO_GLOBAL.add(Settings.Global.EMERGENCY_TONE);
+ MOVED_TO_GLOBAL.add(Settings.Global.CALL_AUTO_RETRY);
+ MOVED_TO_GLOBAL.add(Settings.Global.DEBUG_APP);
+ MOVED_TO_GLOBAL.add(Settings.Global.WAIT_FOR_DEBUGGER);
+ MOVED_TO_GLOBAL.add(Settings.Global.SHOW_PROCESSES);
+ MOVED_TO_GLOBAL.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
}
/**
@@ -1608,14 +1620,20 @@
/**
* Name of an application package to be debugged.
+ *
+ * @deprecated Use {@link Global#DEBUG_APP} instead
*/
- public static final String DEBUG_APP = "debug_app";
+ @Deprecated
+ public static final String DEBUG_APP = Global.DEBUG_APP;
/**
* If 1, when launching DEBUG_APP it will wait for the debugger before
* starting user code. If 0, it will run normally.
+ *
+ * @deprecated Use {@link Global#WAIT_FOR_DEBUGGER} instead
*/
- public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+ @Deprecated
+ public static final String WAIT_FOR_DEBUGGER = Global.WAIT_FOR_DEBUGGER;
/**
* Whether or not to dim the screen. 0=no 1=yes
@@ -1630,14 +1648,6 @@
public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
/**
- * If 0, the compatibility mode is off for all applications.
- * If 1, older applications run under compatibility mode.
- * TODO: remove this settings before code freeze (bug/1907571)
- * @hide
- */
- public static final String COMPATIBILITY_MODE = "compatibility_mode";
-
- /**
* The screen backlight brightness between 0 and 255.
*/
public static final String SCREEN_BRIGHTNESS = "screen_brightness";
@@ -1666,16 +1676,21 @@
/**
* Control whether the process CPU usage meter should be shown.
+ *
+ * @deprecated Use {@link Global#SHOW_PROCESSES} instead
*/
- public static final String SHOW_PROCESSES = "show_processes";
+ @Deprecated
+ public static final String SHOW_PROCESSES = Global.SHOW_PROCESSES;
/**
* If 1, the activity manager will aggressively finish activities and
* processes as soon as they are no longer needed. If 0, the normal
* extended lifetime is used.
+ *
+ * @deprecated Use {@link Global#ALWAYS_FINISH_ACTIVITIES} instead
*/
- public static final String ALWAYS_FINISH_ACTIVITIES =
- "always_finish_activities";
+ @Deprecated
+ public static final String ALWAYS_FINISH_ACTIVITIES = Global.ALWAYS_FINISH_ACTIVITIES;
/**
* Determines which streams are affected by ringer mode changes. The
@@ -1899,7 +1914,10 @@
/**
* Name of activity to use for wallpaper on the home screen.
+ *
+ * @deprecated Use {@link WallpaperManager} instead.
*/
+ @Deprecated
public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
/**
@@ -1943,28 +1961,30 @@
/**
* Scaling factor for normal window animations. Setting to 0 will disable window
* animations.
+ *
+ * @deprecated Use {@link Global#WINDOW_ANIMATION_SCALE} instead
*/
- public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+ @Deprecated
+ public static final String WINDOW_ANIMATION_SCALE = Global.WINDOW_ANIMATION_SCALE;
/**
* Scaling factor for activity transition animations. Setting to 0 will disable window
* animations.
+ *
+ * @deprecated Use {@link Global#TRANSITION_ANIMATION_SCALE} instead
*/
- public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+ @Deprecated
+ public static final String TRANSITION_ANIMATION_SCALE = Global.TRANSITION_ANIMATION_SCALE;
/**
* Scaling factor for Animator-based animations. This affects both the start delay and
* duration of all such animations. Setting to 0 will cause animations to end immediately.
* The default value is 1.
+ *
+ * @deprecated Use {@link Global#ANIMATOR_DURATION_SCALE} instead
*/
- public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
-
- /**
- * Scaling factor for normal window animations. Setting to 0 will disable window
- * animations.
- * @hide
- */
- public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations";
+ @Deprecated
+ public static final String ANIMATOR_DURATION_SCALE = Global.ANIMATOR_DURATION_SCALE;
/**
* Control whether the accelerometer will be used to change screen
@@ -2028,23 +2048,6 @@
public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
/**
- * CDMA only settings
- * Emergency Tone 0 = Off
- * 1 = Alert
- * 2 = Vibrate
- * @hide
- */
- public static final String EMERGENCY_TONE = "emergency_tone";
-
- /**
- * CDMA only settings
- * Whether the auto retry is enabled. The value is
- * boolean (1 or 0).
- * @hide
- */
- public static final String CALL_AUTO_RETRY = "call_auto_retry";
-
- /**
* Whether the hearing aid is enabled. The value is
* boolean (1 or 0).
* @hide
@@ -2296,8 +2299,8 @@
DATE_FORMAT,
DTMF_TONE_WHEN_DIALING,
DTMF_TONE_TYPE_WHEN_DIALING,
- EMERGENCY_TONE,
- CALL_AUTO_RETRY,
+ Global.EMERGENCY_TONE,
+ Global.CALL_AUTO_RETRY,
HEARING_AID,
TTY_MODE,
SOUND_EFFECTS_ENABLED,
@@ -2695,6 +2698,8 @@
MOVED_TO_GLOBAL.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
MOVED_TO_GLOBAL.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
MOVED_TO_GLOBAL.add(Settings.Global.DEFAULT_DNS_SERVER);
+ MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_NETWORK_MODE);
+ MOVED_TO_GLOBAL.add(Settings.Global.PREFERRED_CDMA_SUBSCRIPTION);
}
/**
@@ -3653,20 +3658,6 @@
= "allowed_geolocation_origins";
/**
- * The preferred network mode 7 = Global
- * 6 = EvDo only
- * 5 = CDMA w/o EvDo
- * 4 = CDMA / EvDo auto
- * 3 = GSM / WCDMA auto
- * 2 = WCDMA only
- * 1 = GSM only
- * 0 = GSM / WCDMA preferred
- * @hide
- */
- public static final String PREFERRED_NETWORK_MODE =
- "preferred_network_mode";
-
- /**
* The preferred TTY mode 0 = TTy Off, CDMA default
* 1 = TTY Full
* 2 = TTY HCO
@@ -3677,14 +3668,6 @@
"preferred_tty_mode";
/**
- * The cdma subscription 0 = Subscription from RUIM, when available
- * 1 = Subscription from NV
- * @hide
- */
- public static final String PREFERRED_CDMA_SUBSCRIPTION =
- "preferred_cdma_subscription";
-
- /**
* Whether the enhanced voice privacy mode is enabled.
* 0 = normal voice privacy
* 1 = enhanced voice privacy
@@ -5170,6 +5153,104 @@
return BLUETOOTH_INPUT_DEVICE_PRIORITY_PREFIX + address.toUpperCase();
}
+ /**
+ * Scaling factor for normal window animations. Setting to 0 will
+ * disable window animations.
+ */
+ public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+
+ /**
+ * Scaling factor for activity transition animations. Setting to 0 will
+ * disable window animations.
+ */
+ public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+
+ /**
+ * Scaling factor for Animator-based animations. This affects both the
+ * start delay and duration of all such animations. Setting to 0 will
+ * cause animations to end immediately. The default value is 1.
+ */
+ public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+
+ /**
+ * Scaling factor for normal window animations. Setting to 0 will
+ * disable window animations.
+ *
+ * @hide
+ */
+ public static final String FANCY_IME_ANIMATIONS = "fancy_ime_animations";
+
+ /**
+ * If 0, the compatibility mode is off for all applications.
+ * If 1, older applications run under compatibility mode.
+ * TODO: remove this settings before code freeze (bug/1907571)
+ * @hide
+ */
+ public static final String COMPATIBILITY_MODE = "compatibility_mode";
+
+ /**
+ * CDMA only settings
+ * Emergency Tone 0 = Off
+ * 1 = Alert
+ * 2 = Vibrate
+ * @hide
+ */
+ public static final String EMERGENCY_TONE = "emergency_tone";
+
+ /**
+ * CDMA only settings
+ * Whether the auto retry is enabled. The value is
+ * boolean (1 or 0).
+ * @hide
+ */
+ public static final String CALL_AUTO_RETRY = "call_auto_retry";
+
+ /**
+ * The preferred network mode 7 = Global
+ * 6 = EvDo only
+ * 5 = CDMA w/o EvDo
+ * 4 = CDMA / EvDo auto
+ * 3 = GSM / WCDMA auto
+ * 2 = WCDMA only
+ * 1 = GSM only
+ * 0 = GSM / WCDMA preferred
+ * @hide
+ */
+ public static final String PREFERRED_NETWORK_MODE =
+ "preferred_network_mode";
+
+ /**
+ * The cdma subscription 0 = Subscription from RUIM, when available
+ * 1 = Subscription from NV
+ * @hide
+ */
+ public static final String PREFERRED_CDMA_SUBSCRIPTION =
+ "preferred_cdma_subscription";
+
+ /**
+ * Name of an application package to be debugged.
+ */
+ public static final String DEBUG_APP = "debug_app";
+
+ /**
+ * If 1, when launching DEBUG_APP it will wait for the debugger before
+ * starting user code. If 0, it will run normally.
+ */
+ public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+
+ /**
+ * Control whether the process CPU usage meter should be shown.
+ */
+ public static final String SHOW_PROCESSES = "show_processes";
+
+ /**
+ * If 1, the activity manager will aggressively finish activities and
+ * processes as soon as they are no longer needed. If 0, the normal
+ * extended lifetime is used.
+ */
+ public static final String ALWAYS_FINISH_ACTIVITIES =
+ "always_finish_activities";
+
// Populated lazily, guarded by class object:
private static NameValueCache sNameValueCache = new NameValueCache(
SYS_PROP_SETTING_VERSION,
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index cf58458..662dc45 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -79,38 +79,23 @@
public static final int DEFAULT_DISPLAY = 0;
/**
- * Display flag: Indicates that the display supports secure video output.
+ * Display flag: Indicates that the display supports compositing content
+ * that is stored in protected graphics buffers.
* <p>
- * This flag is used to indicate that the display supports content protection
- * mechanisms for secure video output at the display interface, such as HDCP.
- * These mechanisms may be used to protect secure content as it leaves the device.
+ * Secure (DRM) video decoders may allocate protected graphics buffers to request that
+ * a hardware-protected path be provided between the video decoder and the external
+ * display sink. If a hardware-protected path is not available, then content stored
+ * in protected graphics buffers may not be composited.
* </p><p>
- * While mirroring content to multiple displays, it can happen that certain
- * display devices support secure video output while other display devices do not.
- * The secure content will be shown only on the display devices that support
- * secure video output and will be blanked on other display devices that do
- * not support secure video output.
- * </p><p>
- * This flag mainly applies to external display devices such as HDMI or
- * Wifi display. Built-in display devices are usually considered secure.
+ * If this flag is not set, then the display device does not support compositing
+ * protected buffers; the user may see a blank region on the screen instead of
+ * the protected content. An application can use this flag as a hint that it should
+ * select an alternate content stream or adopt a different strategy for decoding
+ * content that does not rely on protected buffers so as to ensure that the user
+ * can view the content on the display as expected.
* </p>
- *
- * @hide pending review
*/
- public static final int FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT = 1 << 0;
-
- /**
- * Display flag: Indicates that the display supports secure in-memory video buffers.
- * <p>
- * This flag is used to indicate that the display supports content protection
- * mechanisms for in-memory video buffers, such as secure memory areas.
- * These mechanisms may be used to protect secure video buffers in memory from
- * the video decoder to the display compositor and the video interface.
- * </p>
- *
- * @hide pending review
- */
- public static final int FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS = 1 << 1;
+ public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1 << 0;
/**
* Internal method to create a display.
@@ -196,7 +181,7 @@
*
* @return The display flags.
*
- * @hide pending review
+ * @see #FLAG_SUPPORTS_PROTECTED_BUFFERS
*/
public int getFlags() {
synchronized (this) {
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index c968ec5..fe05634 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -299,11 +299,8 @@
private static String flagsToString(int flags) {
StringBuilder result = new StringBuilder();
- if ((flags & Display.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
- result.append(", FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT");
- }
- if ((flags & Display.FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS) != 0) {
- result.append(", FLAG_SUPPORTS_SECURE_VIDEO_BUFFERS");
+ if ((flags & Display.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) {
+ result.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS");
}
return result.toString();
}
diff --git a/core/java/android/view/ScaleGestureDetector.java b/core/java/android/view/ScaleGestureDetector.java
index 4873860..a74e438 100644
--- a/core/java/android/view/ScaleGestureDetector.java
+++ b/core/java/android/view/ScaleGestureDetector.java
@@ -19,9 +19,6 @@
import android.content.Context;
import android.os.SystemClock;
import android.util.FloatMath;
-import android.util.Log;
-
-import java.util.Arrays;
/**
* Detects scaling transformation gestures using the supplied {@link MotionEvent}s.
@@ -143,11 +140,16 @@
private int mSpanSlop;
private int mMinSpan;
- private float[] mTouchHistoryLastAccepted;
- private int[] mTouchHistoryDirection;
- private long[] mTouchHistoryLastAcceptedTime;
+ // Bounds for recently seen values
+ private float mTouchUpper;
+ private float mTouchLower;
+ private float mTouchHistoryLastAccepted;
+ private int mTouchHistoryDirection;
+ private long mTouchHistoryLastAcceptedTime;
+ private int mTouchMinMajor;
private static final long TOUCH_STABILIZE_TIME = 128; // ms
+ private static final int TOUCH_MIN_MAJOR = 48; // dp
/**
* Consistency verifier for debugging purposes.
@@ -160,6 +162,8 @@
mContext = context;
mListener = listener;
mSpanSlop = ViewConfiguration.get(context).getScaledTouchSlop() * 2;
+ mTouchMinMajor =
+ (int) (context.getResources().getDisplayMetrics().density * TOUCH_MIN_MAJOR + 0.5f);
mMinSpan = context.getResources().getDimensionPixelSize(
com.android.internal.R.dimen.config_minScalingSpan);
}
@@ -172,81 +176,55 @@
private void addTouchHistory(MotionEvent ev) {
final long currentTime = SystemClock.uptimeMillis();
final int count = ev.getPointerCount();
+ boolean accept = currentTime - mTouchHistoryLastAcceptedTime >= TOUCH_STABILIZE_TIME;
+ float total = 0;
+ int sampleCount = 0;
for (int i = 0; i < count; i++) {
- final int id = ev.getPointerId(i);
- ensureTouchHistorySize(id);
-
- final boolean hasLastAccepted = !Float.isNaN(mTouchHistoryLastAccepted[id]);
- boolean accept = true;
+ final boolean hasLastAccepted = !Float.isNaN(mTouchHistoryLastAccepted);
final int historySize = ev.getHistorySize();
- for (int h = 0; h < historySize + 1; h++) {
- final float major;
- final float minor;
+ final int pointerSampleCount = historySize + 1;
+ for (int h = 0; h < pointerSampleCount; h++) {
+ float major;
if (h < historySize) {
major = ev.getHistoricalTouchMajor(i, h);
- minor = ev.getHistoricalTouchMinor(i, h);
} else {
major = ev.getTouchMajor(i);
- minor = ev.getTouchMinor(i);
}
- final float avg = (major + minor) / 2;
+ if (major < mTouchMinMajor) major = mTouchMinMajor;
+ total += major;
+
+ if (Float.isNaN(mTouchUpper) || major > mTouchUpper) {
+ mTouchUpper = major;
+ }
+ if (Float.isNaN(mTouchLower) || major < mTouchLower) {
+ mTouchLower = major;
+ }
if (hasLastAccepted) {
- final int directionSig = (int) Math.signum(avg - mTouchHistoryLastAccepted[id]);
- if (directionSig != mTouchHistoryDirection[id] ||
- (directionSig == 0 && mTouchHistoryDirection[id] == 0)) {
- mTouchHistoryDirection[id] = directionSig;
+ final int directionSig = (int) Math.signum(major - mTouchHistoryLastAccepted);
+ if (directionSig != mTouchHistoryDirection ||
+ (directionSig == 0 && mTouchHistoryDirection == 0)) {
+ mTouchHistoryDirection = directionSig;
final long time = h < historySize ? ev.getHistoricalEventTime(h)
: ev.getEventTime();
- mTouchHistoryLastAcceptedTime[id] = time;
- accept = false;
- }
- if (currentTime - mTouchHistoryLastAcceptedTime[id] < TOUCH_STABILIZE_TIME) {
+ mTouchHistoryLastAcceptedTime = time;
accept = false;
}
}
}
-
- if (accept) {
- float newAccepted = (ev.getTouchMajor(i) + ev.getTouchMinor(i)) / 2;
- if (hasLastAccepted) {
- newAccepted = (mTouchHistoryLastAccepted[id] + newAccepted) / 2;
- }
- mTouchHistoryLastAccepted[id] = newAccepted;
- mTouchHistoryDirection[id] = 0;
- mTouchHistoryLastAcceptedTime[id] = ev.getEventTime();
- }
+ sampleCount += pointerSampleCount;
}
- }
- /**
- * Clear out the touch history for a given pointer id.
- * @param id pointer id to clear
- * @see #addTouchHistory(MotionEvent)
- */
- private boolean removeTouchHistoryForId(int id) {
- if (id >= mTouchHistoryLastAccepted.length) {
- return false;
- }
- mTouchHistoryLastAccepted[id] = Float.NaN;
- mTouchHistoryDirection[id] = 0;
- mTouchHistoryLastAcceptedTime[id] = 0;
- return true;
- }
+ final float avg = total / sampleCount;
- /**
- * Get the adjusted combined touchMajor/touchMinor value for a given pointer id
- * @param id the pointer id of the data to obtain
- * @return the adjusted major/minor value for the point at id
- * @see #addTouchHistory(MotionEvent)
- */
- private float getAdjustedTouchHistory(int id) {
- if (id >= mTouchHistoryLastAccepted.length) {
- Log.e(TAG, "Error retrieving adjusted touch history for id=" + id +
- " - incomplete event stream?");
- return 0;
+ if (accept) {
+ float newAccepted = (mTouchUpper + mTouchLower + avg) / 3;
+ mTouchUpper = (mTouchUpper + newAccepted) / 2;
+ mTouchLower = (mTouchLower + newAccepted) / 2;
+ mTouchHistoryLastAccepted = newAccepted;
+ mTouchHistoryDirection = 0;
+ mTouchHistoryLastAcceptedTime = ev.getEventTime();
}
- return mTouchHistoryLastAccepted[id];
}
/**
@@ -254,41 +232,11 @@
* @see #addTouchHistory(MotionEvent)
*/
private void clearTouchHistory() {
- if (mTouchHistoryLastAccepted == null) {
- // All three arrays will be null if this is the case; nothing to do.
- return;
- }
- Arrays.fill(mTouchHistoryLastAccepted, Float.NaN);
- Arrays.fill(mTouchHistoryDirection, 0);
- Arrays.fill(mTouchHistoryLastAcceptedTime, 0);
- }
-
- private void ensureTouchHistorySize(int id) {
- final int requiredSize = id + 1;
- if (mTouchHistoryLastAccepted == null || mTouchHistoryLastAccepted.length < requiredSize) {
- final float[] newLastAccepted = new float[requiredSize];
- final int[] newDirection = new int[requiredSize];
- final long[] newLastAcceptedTime = new long[requiredSize];
-
- int oldLength = 0;
- if (mTouchHistoryLastAccepted != null) {
- System.arraycopy(mTouchHistoryLastAccepted, 0, newLastAccepted, 0,
- mTouchHistoryLastAccepted.length);
- System.arraycopy(mTouchHistoryDirection, 0, newDirection, 0,
- mTouchHistoryDirection.length);
- System.arraycopy(mTouchHistoryLastAcceptedTime, 0, newLastAcceptedTime, 0,
- mTouchHistoryLastAcceptedTime.length);
- oldLength = mTouchHistoryLastAccepted.length;
- }
-
- Arrays.fill(newLastAccepted, oldLength, newLastAccepted.length, Float.NaN);
- Arrays.fill(newDirection, oldLength, newDirection.length, 0);
- Arrays.fill(newLastAcceptedTime, oldLength, newLastAcceptedTime.length, 0);
-
- mTouchHistoryLastAccepted = newLastAccepted;
- mTouchHistoryDirection = newDirection;
- mTouchHistoryLastAcceptedTime = newLastAcceptedTime;
- }
+ mTouchUpper = Float.NaN;
+ mTouchLower = Float.NaN;
+ mTouchHistoryLastAccepted = Float.NaN;
+ mTouchHistoryDirection = 0;
+ mTouchHistoryLastAcceptedTime = 0;
}
/**
@@ -346,23 +294,16 @@
final float focusX = sumX / div;
final float focusY = sumY / div;
- if (pointerUp) {
- final int id = event.getPointerId(event.getActionIndex());
- if (!removeTouchHistoryForId(id)) {
- Log.e(TAG, "Got ACTION_POINTER_UP for previously unknown id=" + id +
- " - incomplete event stream?");
- }
- } else {
- addTouchHistory(event);
- }
+
+ addTouchHistory(event);
// Determine average deviation from focal point
float devSumX = 0, devSumY = 0;
for (int i = 0; i < count; i++) {
if (skipIndex == i) continue;
- // Average touch major and touch minor and convert the resulting diameter into a radius.
- final float touchSize = getAdjustedTouchHistory(event.getPointerId(i)) / 2;
+ // Convert the resulting diameter into a radius.
+ final float touchSize = mTouchHistoryLastAccepted / 2;
devSumX += Math.abs(event.getX(i) - focusX) + touchSize;
devSumY += Math.abs(event.getY(i) - focusY) + touchSize;
}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 3ed47ea..2d083b6 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -5871,6 +5871,8 @@
((layoutDirection << PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT) & PFLAG2_LAYOUT_DIRECTION_MASK);
// We need to resolve all RTL properties as they all depend on layout direction
resolveRtlPropertiesIfNeeded();
+ requestLayout();
+ invalidate(true);
}
}
@@ -11568,8 +11570,6 @@
if (!isDrawablesResolved()) {
resolveDrawables();
}
- requestLayout();
- invalidate(true);
onRtlPropertiesChanged(getLayoutDirection());
}
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7f0af09..871f752 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -1055,30 +1055,30 @@
if (mChoiceMode == CHOICE_MODE_MULTIPLE ||
(mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode != null)) {
- boolean newValue = !mCheckStates.get(position, false);
- mCheckStates.put(position, newValue);
+ boolean checked = !mCheckStates.get(position, false);
+ mCheckStates.put(position, checked);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
- if (newValue) {
+ if (checked) {
mCheckedIdStates.put(mAdapter.getItemId(position), position);
} else {
mCheckedIdStates.delete(mAdapter.getItemId(position));
}
}
- if (newValue) {
+ if (checked) {
mCheckedItemCount++;
} else {
mCheckedItemCount--;
}
if (mChoiceActionMode != null) {
mMultiChoiceModeCallback.onItemCheckedStateChanged(mChoiceActionMode,
- position, id, newValue);
+ position, id, checked);
dispatchItemClick = false;
}
checkedStateChanged = true;
} else if (mChoiceMode == CHOICE_MODE_SINGLE) {
- boolean newValue = !mCheckStates.get(position, false);
- if (newValue) {
- mCheckStates.clear();
+ boolean checked = !mCheckStates.get(position, false);
+ mCheckStates.clear();
+ if (checked) {
mCheckStates.put(position, true);
if (mCheckedIdStates != null && mAdapter.hasStableIds()) {
mCheckedIdStates.clear();
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 84e1d95..f987fc5 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -125,7 +125,9 @@
private final ContentResolver mContentResolver;
private DevicePolicyManager mDevicePolicyManager;
private ILockSettings mLockSettingsService;
- private int mCurrentUserId = UserHandle.USER_NULL;
+
+ // The current user is set by KeyguardViewMediator and shared by all LockPatternUtils.
+ private static volatile int sCurrentUserId = UserHandle.USER_NULL;
public DevicePolicyManager getDevicePolicyManager() {
if (mDevicePolicyManager == null) {
@@ -215,13 +217,13 @@
}
public void setCurrentUser(int userId) {
- mCurrentUserId = userId;
+ sCurrentUserId = userId;
}
public int getCurrentUser() {
- if (mCurrentUserId != UserHandle.USER_NULL) {
+ if (sCurrentUserId != UserHandle.USER_NULL) {
// Someone is regularly updating using setCurrentUser() use that value.
- return mCurrentUserId;
+ return sCurrentUserId;
}
try {
return ActivityManagerNative.getDefault().getCurrentUser().id;
diff --git a/core/res/res/drawable-hdpi/stat_notify_rssi_in_range.png b/core/res/res/drawable-hdpi/stat_notify_rssi_in_range.png
new file mode 100644
index 0000000..74977e6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/stat_notify_rssi_in_range.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/stat_notify_rssi_in_range.png b/core/res/res/drawable-mdpi/stat_notify_rssi_in_range.png
new file mode 100644
index 0000000..62e4fe9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/stat_notify_rssi_in_range.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_left.9.png b/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_left.9.png
deleted file mode 100644
index c30eb1c..0000000
--- a/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_left.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_right.9.png b/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_right.9.png
deleted file mode 100644
index e5d5771..0000000
--- a/core/res/res/drawable-nodpi/kg_widget_overscroll_layer_right.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/stat_notify_rssi_in_range.png b/core/res/res/drawable-xhdpi/stat_notify_rssi_in_range.png
new file mode 100644
index 0000000..c0586d8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/stat_notify_rssi_in_range.png
Binary files differ
diff --git a/core/res/res/layout/keyguard_multi_user_avatar.xml b/core/res/res/layout/keyguard_multi_user_avatar.xml
index df3ee00..d6a858f 100644
--- a/core/res/res/layout/keyguard_multi_user_avatar.xml
+++ b/core/res/res/layout/keyguard_multi_user_avatar.xml
@@ -22,6 +22,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="125dp"
android:layout_height="125dp"
+ android:background="#000000"
android:gravity="center_horizontal">
<ImageView
android:id="@+id/keyguard_user_avatar"
@@ -29,12 +30,23 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
- <TextView
- android:id="@+id/keyguard_user_name"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom|right"
- android:textSize="12sp"
- android:background="#99FFFFFF"
- android:textColor="#ff000000"/>
-</com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <Space
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.78" />
+ <TextView
+ android:id="@+id/keyguard_user_name"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="0.22"
+ android:paddingLeft="6dp"
+ android:layout_gravity="center_vertical|left"
+ android:textSize="16sp"
+ android:textColor="#ffffff"
+ android:background="#808080" />
+ </LinearLayout>
+</com.android.internal.policy.impl.keyguard.KeyguardMultiUserAvatar>
\ No newline at end of file
diff --git a/core/res/res/layout/keyguard_multi_user_selector.xml b/core/res/res/layout/keyguard_multi_user_selector.xml
index c599fd5dd..5a6e998 100644
--- a/core/res/res/layout/keyguard_multi_user_selector.xml
+++ b/core/res/res/layout/keyguard_multi_user_selector.xml
@@ -21,7 +21,8 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_gravity="center">
+ android:layout_gravity="center"
+ android:contentDescription="@string/keyguard_accessibility_user_selector">
<com.android.internal.policy.impl.keyguard.KeyguardSubdivisionLayout
android:id="@+id/keyguard_users_grid"
diff --git a/core/res/res/layout/keyguard_multi_user_selector_widget.xml b/core/res/res/layout/keyguard_multi_user_selector_widget.xml
index c00089c..ad9fdfe 100644
--- a/core/res/res/layout/keyguard_multi_user_selector_widget.xml
+++ b/core/res/res/layout/keyguard_multi_user_selector_widget.xml
@@ -20,6 +20,7 @@
<!-- This is a view that shows general status information in Keyguard. -->
<com.android.internal.policy.impl.keyguard.KeyguardWidgetFrame
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/keyguard_multi_user_selector"
android:layout_width="match_parent"
android:layout_height="match_parent">
diff --git a/core/res/res/layout/keyguard_status_view.xml b/core/res/res/layout/keyguard_status_view.xml
index dc596f9..c7f6863 100644
--- a/core/res/res/layout/keyguard_status_view.xml
+++ b/core/res/res/layout/keyguard_status_view.xml
@@ -29,7 +29,8 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="center_horizontal">
+ android:gravity="center_horizontal"
+ android:contentDescription="@string/keyguard_accessibility_status">
<com.android.internal.policy.impl.keyguard.ClockView
android:id="@+id/clock_view"
diff --git a/core/res/res/layout/keyguard_transport_control_view.xml b/core/res/res/layout/keyguard_transport_control_view.xml
index c40aa66..5a6083a 100644
--- a/core/res/res/layout/keyguard_transport_control_view.xml
+++ b/core/res/res/layout/keyguard_transport_control_view.xml
@@ -26,7 +26,8 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:foreground="@drawable/ic_lockscreen_player_background">
+ android:foreground="@drawable/ic_lockscreen_player_background"
+ android:contentDescription="@string/keygaurd_accessibility_media_controls">
<!-- Use ImageView for its cropping features; otherwise could be android:background -->
<ImageView
android:id="@+id/albumart"
diff --git a/core/res/res/layout/keyguard_widget_region.xml b/core/res/res/layout/keyguard_widget_region.xml
index 42bf42b..01b5551 100644
--- a/core/res/res/layout/keyguard_widget_region.xml
+++ b/core/res/res/layout/keyguard_widget_region.xml
@@ -32,16 +32,14 @@
android:layout_weight="1"
android:clipChildren="false"
android:clipToPadding="false">
- <!-- TODO: Remove this when supported as a widget -->
- <include layout="@layout/keyguard_status_view"/>
- <include layout="@layout/keyguard_transport_control_view"/>
</com.android.internal.policy.impl.keyguard.KeyguardWidgetPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="10dp"
android:orientation="horizontal"
android:paddingLeft="@dimen/kg_widget_pager_horizontal_padding"
- android:paddingRight="@dimen/kg_widget_pager_horizontal_padding">
+ android:paddingRight="@dimen/kg_widget_pager_horizontal_padding"
+ android:layout_marginTop="@dimen/kg_runway_lights_top_margin">
<com.android.internal.policy.impl.keyguard.KeyguardGlowStripView
android:id="@+id/left_strip"
android:paddingTop="@dimen/kg_runway_lights_vertical_padding"
@@ -69,4 +67,4 @@
prvandroid:leftToRight="true"
prvandroid:glowDot="@*android:drawable/ic_lockscreen_glowdot" />
</LinearLayout>
-</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion>
\ No newline at end of file
+</com.android.internal.policy.impl.keyguard.KeyguardWidgetRegion>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 48f0cf9..3e5ca69 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Laat die program toe om die interne status van die stelsel op te haal. Kwaadwillige programme kan \'n verskeidenheid privaat en beveiligde inligting ophaal wat hulle gewoonlik nooit nodig het nie."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"haal skerminhoud op"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Laat die program toe om die inhoud van die aktiewe venster op te haal. Kwaadwillige programme kan die hele venster se inhoud ophaal, en al die teks ondersoek, behalwe wagwoorde."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktiveer toeganklikheid tydelik"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Laat \'n program toe om toeganklikheid tydelik op die toestel te aktiveer. Kwaadwillige programme kan sonder toestemming van die gebruiker toeganklikheid verkry."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"haal vensterinligting op"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Laat \'n program toe om inligting oor vensters vanaf die vensterbestuurder op te haal. Kwaadwillige programme kan moontlik inligting ophaal wat vir interne stelselgebruik bedoel is."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filter gebeure"</string>
@@ -1094,18 +1092,22 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"Aan:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Voer die vereiste PIN in:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"Die telefoon sal tydelik van Wi-Fi ontkoppel terwyl dit aan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gekoppel is"</string>
+ <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"Die foon sal tydelik van Wi-Fi ontkoppel terwyl dit aan <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gekoppel is"</string>
<string name="select_character" msgid="3365550120617701745">"Voeg karakter in"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Stuur SMS-boodskappe"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> stuur \'n groot aantal SMS-boodskappe. Wil jy hierdie program toelaat om voort te gaan om boodskappe te stuur?"</string>
<string name="sms_control_yes" msgid="3663725993855816807">"Laat toe"</string>
<string name="sms_control_no" msgid="625438561395534982">"Weier"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> wil \'n boodskap na <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> stuur."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Dit kan onkoste op jou selfoonrekening veroorsaak."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Dit sal onkoste op jou selfoonrekening veroorsaak."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Stuur"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Kanselleer"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Onthou my keuse"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Laat altyd toe"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Moet nooit toelaat nie"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kaart verwyder"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Foon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Oorfone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokluidsprekers"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-klank"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Stelsel"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-oudio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klaar"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ingeboude skerm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skerm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Oorlegger #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Voer SIM-PIN in"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Voer PIN in"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Voer wagwoord in"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-kode"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuwe PIN-kode"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ontsluit tans SIM-kaart…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Verkeerde PIN-kode."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 syfers lank is."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Tik \'n PUK in wat 8 syfers of meer is."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Voer PUK en nuwe PIN-kode in"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Jy het die verkeerde PUK getik."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogings"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Om te ontsluit, meld met jou Google-rekening aan."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Gebruikernaam (e-pos)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Meld aan"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ongeldige gebruikernaam of wagwoord."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Het jy jou gebruikernaam of wagwoord vergeet?"\n"Besoek "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontroleer tans..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jy het jou PIN <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerd ingetik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jy het <xliff:g id="NUMBER_0">%d</xliff:g> keer jou wagwoord verkeerdelik getik. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. "\n\n"Probeer weer oor <xliff:g id="NUMBER_1">%d</xliff:g> sekondes."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou tablet te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur middel van \'n e-posrekening."\n\n" Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Moet volume bo veilige vlak verhoog word?"\n"Deur vir lang tydperke op hoë volume te luister, kan jou gehoor beskadig."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Toeganklikheid geaktiveer."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 8ed4adba..ca2fb31 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"የስርዓቱን ውስጣዊ ሁናቴ ለመበርበር ለመተግበሪያው ይፈቅዳሉ፡፡ በተለምዶ የማያስፈልጋቸውን ብዙ አይነት የግል እና የደህንነት መረጃዎችን ተንኮል አዘል መተግበሪያዎች ሊበረብሩ ይችላሉ፡፡"</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"የማያ ይዘት ሰርስረህ አውጣ"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"የነቃ መስኮት ይዘትን ለመበርበር ለመተግበሪያው ይፈቅዳሉ፡፡ ጠቅላላውን የመስኮት ይዘት ለመበርበር እና ከይለፍ ቃል በስተቀር ሁሉንም ጽሑፉን ለማየት ጎጂ መተግበሪያዎች ይችላሉ፡፡"</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ተደራሽነት በጊዜያዊነት ያነቃል"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"አንድ መተግበሪያ በጊዜያዊነት በመሣሪያው ላይ ተደራሽነትን እንዲያነቃ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ያለተጠቃሚው ፍቃድ ተደራሽነትን ሊያነቁ ይችላሉ።"</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"የመስኮት መረጃን አምጣ"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"አንድ መተግበሪያ ከመስኮት አቀናባሪው ሆኖ ስለመስኮቱ መረጃ እንዲያመጣ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ለውስጣዊ ስርዓት ጥቅም የታሰበ መረጃን ሊወስዱ ይችላሉ።"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"ክስተቶችን አጣራ"</string>
@@ -1094,18 +1092,19 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"ለ፦"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"የሚፈለገውን ፒን ተይብ፦"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"ፒን፦"</string>
- <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"ስልኩ ከ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ጋር ተገናኝቶ ባለበት ጊዜ በጊዜያዊነት ከWi-Fi ጋር ይላቀቃል"</string>
+ <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"ስልኩ ከ<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ጋር ተገናኝቶ ባለበት ጊዜ በጊዜያዊነት ከWi-Fi ጋር ያለው ግንኙነት ይቋረጣል"</string>
<string name="select_character" msgid="3365550120617701745">"ቁምፊ አስገባ"</string>
<string name="sms_control_title" msgid="7296612781128917719">"የSMS መልዕክቶች መበላክ ላይ"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ቁጥራቸው ብዙ የሆኑ የኤስ.ኤም.ኤስ. መልዕክቶችን እየላከ ነው። ይሄ መተግበሪያ መልዕክቶችን መላኩን እንዲቀጥል መፍቀድ ትፈልጋለህ?"</string>
<string name="sms_control_yes" msgid="3663725993855816807">"ፍቀድ"</string>
<string name="sms_control_no" msgid="625438561395534982">"ከልክል"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ለ<b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> መልዕክት ለመላክ ይፈልጋል።"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ ክፍያዎችን ሊያስከፍል ይችላል።"</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ ክፍያዎችን ያስከፍላል።"</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ "<font fgcolor="#ffffb060">"ክፍያዎችን ሊያስከትል ይችላል"</font>"።"</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ ክፍያዎችን ያስከትላል።"</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"ላክ"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"ሰርዝ"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"ምርጫዬን አስታውስ"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ይሄንን በኋላ ላይ በቅንብሮች > መተግበሪያዎች ውስጥ ሊቀይሩት ይችላሉ"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"ሁልጊዜ ፍቀድ"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"በጭራሽ አትፍቀድ"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM ካርድ ተወግዷል"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"ስልክ"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"የጆሮ ማዳመጫዎች"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"የትከል ድምፅ ማጉያዎች"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI ድምጽ"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"ስርዓት"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"የብሉቱዝ ድምጽ"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ተከናውኗል"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"የሚዲያ ውጽዓት"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"በመቃኘት ላይ..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"በማገናኘት ላይ..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"የሚገኙ"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"አይገኝም"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"ውስጥ የተሰራ ማያ ገጽ"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ማያ ገጽ"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ተደራቢ #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"የሲም ፒን ያስገቡ"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"ፒን ያስገቡ"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"የይለፍ ቃል ያስገቡ"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"የPUK ኮድ"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"አዲስ ፒን ኮድ"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"ሲም አሁን ተሰናክሏል። ለመቀጠል የPUK ኮድ ያስገቡ። ለዝርዝር ድምጸ ተያያዥ ሞደምን ያግኙ።"</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"የተፈለገውን የፒን ኮድ ያስገቡ"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"የተፈለገውን የፒን ኮድ ያረጋግጡ"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ሲም ካርዱን በመክፈት ላይ…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ትክክል ያልሆነ ፒን ኮድ።"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ።"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"8 ወይም ከዚያ በላይ ቁጥሮችን የሆነ PUK ይተይቡ።"</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK እና አዲስ ፒን ይተይቡ"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"የተየቡት PUK ትክክል አይደለም።"</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"የPUK ኮድ 8 ወይም ከዚያ በላይ ቁጥሮች ሊኖረው ይገባል።"</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"ትክክለኛውን የPUK ኮድ እንደገና ያስገቡ። ተደጋጋሚ ሙከራዎች ሲም ካርዱን እስከመጨረሻው ያሰናክሉታል።"</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ፒን ኮዶች አይገጣጠሙም"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"በጣም ብዙ የስርዓተ ጥለት ሙከራዎች"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"ለመክፈት በGoogle መለያዎ ይግቡ።"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"የተጠቃሚ ስም (ኢሜይል)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"ግባ"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"ልክ ያልሆነ የተጠቃሚ ስም ወይም የይለፍ ቃል።"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"የተጠቃሚ ስምዎን ወይም የይለፍ ቃልዎን ረሱት?"\n<b>"google.com/accounts/recovery"</b>"ይጎብኙ።"</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"በማረጋገጥ ላይ…"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"ሲም በመክፈት ላይ…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ፒንዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልተየቡም። "\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"የይለፍ ቃልዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ ትክክል ባልሆነ መንገድ ተይበዋል።"\n\n"በ<xliff:g id="NUMBER_1">%d</xliff:g> ሰኮንዶች ውስጥ እንደገና ይሞክሩ።"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"የመክፈቻ ስርዓተ ጥለትዎን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። "\n\n" ከ<xliff:g id="NUMBER_1">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ጡባዊ ቱኮዎን እንዲከፍቱ ይጠየቃሉ።"\n\n" ከ<xliff:g id="NUMBER_2">%d</xliff:g> ከሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።"\n\n"እባክዎ ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"ድምጽ አደጋ ከሌለው መጠን በላይ ይጨመር??"\n"ለረጅም ጊዜ በከፍተኛ ድምጽ መስማት የመስማት ችሎታዎን ሊጎዳይ ይችላል።"</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"ተደራሽነት ነቅቷል።"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 14ed551..539dae5 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"للسماح للتطبيق باسترداد الحالة الداخلية للنظام. قد تسترد التطبيقات الضارة مجموعة كبيرة من المعلومات الخاصة والآمنة التي لا حاجة لها في العادة على الإطلاق."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"استرداد محتوى الشاشة"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"للسماح للتطبيق باسترداد محتوى النافذة النشطة. يمكن للبرامج الضارة استرداد محتوى النافذة بالكامل وفحص جميع النصوص الموجودة بها باستثناء كلمات المرور."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"تمكين إمكانية الدخول مؤقتًا"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"يتيح لتطبيق تمكين إمكانية الدخول مؤقتًا بالجهاز. قد تتيح التطبيقات الضارة تمكين إمكانية الدخول بدون موافقة المستخدم."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"استرداد معلومات النوافذ"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"للسماح لأحد التطبيقات باستعادة معلومات حول النوافذ من مدير النوافذ. يمكن أن تستعيد التطبيقات الضارة معلومات الغرض منها استخدام النظام الداخلي."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"تصفية الأحداث"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"السماح"</string>
<string name="sms_control_no" msgid="625438561395534982">"رفض"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"هناك رغبة من <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> في إرسال رسالة إلى <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"قد يتسبب هذا في تحميل رسوم على حساب جوالك."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"سوف يتسبب هذا في تحميل رسوم على حساب جوالك."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"إرسال"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"إلغاء"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"تذكر اختياري"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"السماح دومًا"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"عدم السماح مطلقًا"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"تمت إزالة بطاقة SIM"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"الهاتف"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"سماعات رأس"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"مكبرات صوت للإرساء"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"صوت HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"النظام"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"صوت بلوتوث"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"تم"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"المنفذ الإعلامي"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"شاشة مدمجة"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"شاشة HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"المركب #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخل رقم التعريف الشخصي لبطاقة SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"أدخل رقم التعريف الشخصي"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"رمز PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"رمز رقم التعريف الشخصي الجديد"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رقم التعريف الشخصي غير صحيح."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اكتب رقم التعريف الشخصي المكون من 4 إلى 8 أرقام."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"اكتب رمز PUK المكون من 8 أرقام أو أكثر."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"اكتب رمز PUK ورمز رقم التعريف الشخصي الجديد"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"رمز PUK الذي كتبته غير صحيح."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"تسجيل الدخول"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟"\n"انتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"جارٍ التحقق…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رقم التعريف الشخصي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. "\n\n"أعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستطالَب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات حساب بريد إلكتروني."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف."\n\n" أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"هل تريد رفع مستوى الصوت فوق المستوى الآمن؟"\n"قد يضر سماع صوت عالٍ لفترات طويلة بسمعك."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"تم تمكين إمكانية الدخول."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 5a95d6c..d047862 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Дазваляе прыкладанням атрымліваць інфармацыю аб унутраным стане сістэмы. Шкоднасныя прыкладанні могуць атрымліваць шырокі спектр прыватных дадзеных і дадзеных, прызначаных для забеспячэння бяспекі інфармацыі, якія звычайна ім не патрэбны."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"атрыманне зместу экрана"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дазваляе прыкладанням атрымліваць змесціва актыўнага акна. Шкоднасныя прыкладанні могуць атрымліваць усё змесціва акна і разглядаць увесь яго тэкст, акрамя пароляў."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"часова ўключыць даступнасць"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дазваляе прыкладанню часова ўключаць даступнасць прылады. Шкоднасныя прыкладаннi могуць уключыць даступнасць без згоды карыстальніка."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"атрымаць звесткi пра акно"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дазваляе прыкладанням вымаць iнфармацыю пра вокны з iнструмента кiравання вокнамi. Шкоднасныя прыкладаннi могуць вымаць iнфармацыю, якая прызначана для ўнутранага выкарыстання ў сiстэме."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"фільтр падзей"</string>
@@ -1102,11 +1100,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Дазволіць"</string>
<string name="sms_control_no" msgid="625438561395534982">"Забараніць"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> хоча адправiць паведамленне на адрас <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"У вашым улiковым запiсе можа спаганяцца дадатковая плата."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Можа спаганяцца плата ў вашым мабiльным улiковым запiсе."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Адправiць"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Адмена"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Захаваць мой выбар"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Заўсёды дазваляць"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ніколі не дазваляць"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта выдаленая"</string>
@@ -1366,11 +1368,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Тэлефон"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Навушнікі"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Дынамікі станцыi"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-аўдыёвыхад"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Сістэма"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-аўдыё"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Гатова"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Мультымедыйны выхад"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Убудаваны экран"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Экран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Оверлей # <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1385,14 +1396,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Увядзіце PIN-код SIM-карты"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Увядзіце PIN-код"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Увядзіце пароль"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Новы PIN-код"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблакiроўка SIM-карты..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Няправільны PIN-код."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Увядзіце PUK з 8 лічбаў ці больш."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Увядзіце PUK-код і новы PIN-код"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Няправільны PUK-код."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Занадта шмат спроб паўтарыць шаблон!"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Каб разблакiраваць, увайдзіце ў свой уліковы запіс Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Імя карыстальніка (электронная пошта)"</string>
@@ -1400,7 +1418,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Увайсцi"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Няправільнае імя карыстальніка ці пароль."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыліся на імя карыстальніка або пароль?"\n"Наведайце "<b>"google.com/accounts/recovery"</b></string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Праверка..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Паўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
@@ -1411,12 +1430,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google."\n\n" Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Павялiчыць гук больш за рэкамендаваны ўзровень?"\n"Доўгае слуханне музыкi на вялiкай гучнасцi можа пашкодзiць ваш слых."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Даступнасць уключана."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 8c992c1..cec0eb1 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Разрешава на приложението да извлича вътрешното състояние на системата. Злонамерените приложения могат да извлекат разнообразна частна и защитена информация, която нормално не би трябвало да им е нужна."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"извличане на съдържанието на екрана"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Разрешава на приложението да извлича съдържанието от активния прозорец. Злонамерените приложения могат да извлекат цялото му съдържание и да проследят целия текст в него освен паролите."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"временно активиране на достъпността"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Разрешава на приложението временно да активира достъпността на устройството. Злонамерените приложения може да я активират без съгласието на потребителя."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"извличане на информация за прозорците"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Разрешава на приложението да извлича информация за прозорците от съответния мениджър. Злонамерените приложения може да извличат данни, които са предназначени за вътрешно използване от системата."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"филтриране на събитията"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Разрешаване"</string>
<string name="sms_control_no" msgid="625438561395534982">"Отказване"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> иска да изпрати съобщение до <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Това може да доведе до таксуване на мобилната ви сметка."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Това ще доведе до таксуване на мобилната ви сметка."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Изпращане"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Отказ"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Изборът ми да се запомни"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Винаги да се разрешава"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Никога да не се разрешава"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM картата е премахната"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Слушалки"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Докинг станц.: Високогов."</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI аудио"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Звук през Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Изходяща мултимедия"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Вграден екран"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Екран „HDMI“"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наслагване №<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Въведете ПИН кода за SIM картата"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Въведете ПИН код"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Въведете паролата"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK код"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Нов ПИН код"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картата се отключва…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправилен ПИН код."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Въведете ПИН код с четири до осем цифри."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Въведете PUK код с поне осем цифри."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Въведете PUK и новия ПИН код"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Въведеният от вас PUK код е неправилен."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Опитите за фигурата са твърде много"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"За да отключите, влезте с профила си в Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Потребителско име (имейл)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Вход"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Невалидно потребителско име или парола."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забравили сте потребителското име или паролата си?"\n"Посетете "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Проверява се…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Въведохте неправилно ПИН кода си <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Въведохте неправилно паролата си <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. "\n\n"Опитайте отново след <xliff:g id="NUMBER_1">%d</xliff:g> секунди."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите таблета посредством имейл адрес."\n\n" Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите телефона посредством имейл адрес."\n\n" Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Да се увеличи ли силата на звука над безопасното ниво?"\n"Продължителното слушане при висока сила на звука може да увреди слуха ви."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Достъпността е активирана."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index d0e1e3c..d635231 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -155,8 +155,8 @@
<string name="global_action_lock" msgid="2844945191792119712">"Bloqueig de pantalla"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"Apaga"</string>
<string name="global_action_bug_report" msgid="7934010578922304799">"Informe d\'error"</string>
- <string name="bugreport_title" msgid="2667494803742548533">"Realització d\'informe d\'errors"</string>
- <string name="bugreport_message" msgid="398447048750350456">"Es recopilarà informació sobre l\'estat actual del dispositiu per enviar-la com a missatge de correu electrònic. Passarà un cert temps a partir del moment en què comenci a elaborar-se l\'informe d\'errors fins que no estigui llest per enviar; tingues paciència."</string>
+ <string name="bugreport_title" msgid="2667494803742548533">"Crea informe d\'errors"</string>
+ <string name="bugreport_message" msgid="398447048750350456">"Es recopilarà informació sobre l\'estat actual del dispositiu, que s\'enviarà per correu electrònic. Passaran uns quants minuts des de l\'inici de l\'informe d\'errors fins al seu enviament, per la qual cosa et recomanem que tinguis paciència."</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mode silenciós"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"So desactivat"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"El so està activat"</string>
@@ -272,7 +272,7 @@
<string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"definició de la compatibilitat de pantalla"</string>
<string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Permet que l\'aplicació controli el mode de compatibilitat de pantalla d\'altres aplicacions. És possible que les aplicacions malicioses interrompin el comportament d\'altres aplicacions."</string>
<string name="permlab_setDebugApp" msgid="3022107198686584052">"activa la depuració d\'aplicacions"</string>
- <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Permet que una aplicació activi la depuració per a una altra aplicació. Les aplicacions malicioses poden utilitzar aquesta funció per finalitzar altres aplicacions."</string>
+ <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Permet que l\'aplicació activi la depuració d\'altra aplicació. Les aplicacions malicioses poden utilitzar aquest permís per interrompre l\'execució d\'altres aplicacions."</string>
<string name="permlab_changeConfiguration" msgid="4162092185124234480">"canvi de la configuració de pantalla del sistema"</string>
<string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Permet que una aplicació canviï la configuració actual, com ara la configuració regional o la mida global del tipus de lletra."</string>
<string name="permlab_enableCarMode" msgid="5684504058192921098">"activar el mode de cotxe"</string>
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permet que l\'aplicació recuperi l\'estat intern del sistema. Les aplicacions malicioses poden recuperar una àmplia gamma d\'informació privada i de seguretat que normalment no haurien de necessitar mai."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"recuperació del contingut de la pantalla"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permet que l\'aplicació recuperi el contingut de la finestra activa. Les aplicacions malicioses poden recuperar el contingut de tota la finestra i examinar-ne tot el text, excepte les contrasenyes."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activació temporal de l\'accessibilitat"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permet que una aplicació activi temporalment l\'accessibilitat al dispositiu. És possible que les aplicacions malicioses activin l\'accessibilitat sense el consentiment de l\'usuari."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recupera informació de les finestres"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet que una aplicació recuperi informació sobre les finestres del gestor de finestres. Aplicacions malicioses podrien recuperar informació dirigida a la utilització per part del sistema intern."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtra els esdeveniments"</string>
@@ -344,7 +342,7 @@
<string name="permdesc_bindTextService" msgid="8151968910973998670">"Permet al titular vincular amb la interfície de nivell superior d\'un servei de text (per exemple, SpellCheckerService). Les aplicacions normals mai no ho haurien de necessitar."</string>
<string name="permlab_bindVpnService" msgid="4708596021161473255">"vincula a un servei de VPN"</string>
<string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de VPN. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
- <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un empaperat"</string>
+ <string name="permlab_bindWallpaper" msgid="8716400279937856462">"enllaça amb un fons de pantalla"</string>
<string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet que el titular vinculi a la interfície de nivell superior d\'un fons de pantalla. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
<string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincula a un servei de widget"</string>
<string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de widget. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
@@ -886,9 +884,9 @@
<string name="searchview_description_clear" msgid="1330281990951833033">"Neteja la consulta"</string>
<string name="searchview_description_submit" msgid="2688450133297983542">"Envia la consulta"</string>
<string name="searchview_description_voice" msgid="2453203695674994440">"Cerca per veu"</string>
- <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vols activar l\'Exploració per tacte?"</string>
- <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'Exploració per tacte. Quan l\'Exploració per tacte està activada, pots escoltar o veure les descripcions del que hi ha sota el dit o fer gestos per interactuar amb la tauleta."</string>
- <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'Exploració per tacte. Quan l\'Exploració per tacte està activada, pots escoltar o veure les descripcions del que hi ha sota el dit o fer gestos per interactuar amb el telèfon."</string>
+ <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Vols activar l\'exploració tàctil?"</string>
+ <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'exploració tàctil. Quan l\'exploració tàctil està activada, pots escoltar o veure les descripcions del contingut seleccionat o utilitzar gestos per interactuar amb la tauleta."</string>
+ <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'exploració tàctil. Quan l\'exploració per tàctil està activada, pots escoltar o veure les descripcions del contingut seleccionat o utilitzar gestos per interactuar amb el telèfon."</string>
<string name="oneMonthDurationPast" msgid="7396384508953779925">"Fa 1 mes"</string>
<string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa menys d\'1 mes"</string>
<plurals name="num_seconds_ago">
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Permet"</string>
<string name="sms_control_no" msgid="625438561395534982">"Denega"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> vol enviar un missatge a <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Això pot comportar càrrecs al teu compte de mòbil."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Això comportarà càrrecs al teu compte de mòbil."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"Aquesta acció "<font fgcolor="#ffffb060">"pot fer que s\'apliquin càrrecs"</font>" al compte del mòbil."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Aquesta acció farà que s\'apliquin càrrecs al compte del mòbil."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Envia"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancel·la"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Recorda la meva selecció"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Pots canviar aquesta opció més endavant a Configuració > Aplicacions"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Permet sempre"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"No permetis mai"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Extracció de la targeta SIM"</string>
@@ -1152,8 +1151,8 @@
<string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"S\'esborraran tots els fitxers emmagatzemats al dispositiu d\'emmagatzematge USB. Aquesta acció no es pot desfer."</string>
<string name="extmedia_format_message" product="default" msgid="14131895027543830">"Es perdran totes les dades d\'aquesta targeta."</string>
<string name="extmedia_format_button_format" msgid="4131064560127478695">"Formata"</string>
- <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuració d\'USB connectada"</string>
- <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca-ho per desactivar la depuració USB."</string>
+ <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuració USB activada"</string>
+ <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca per desactivar la depuració USB."</string>
<string name="select_input_method" msgid="4653387336791222978">"Selecciona un mètodes d\'entrada"</string>
<string name="configure_input_methods" msgid="9091652157722495116">"Configura els mètodes d\'entrada"</string>
<string name="use_physical_keyboard" msgid="6203112478095117625">"Teclat físic"</string>
@@ -1215,7 +1214,7 @@
<string name="sync_binding_label" msgid="3687969138375092423">"Sincronització"</string>
<string name="accessibility_binding_label" msgid="4148120742096474641">"Accessibilitat"</string>
<string name="wallpaper_binding_label" msgid="1240087844304687662">"Fons de pantalla"</string>
- <string name="chooser_wallpaper" msgid="7873476199295190279">"Canvi de l\'empaperat"</string>
+ <string name="chooser_wallpaper" msgid="7873476199295190279">"Canvia el fons de pantalla"</string>
<string name="vpn_title" msgid="19615213552042827">"VPN activada"</string>
<string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> ha activat VPN"</string>
<string name="vpn_text" msgid="3011306607126450322">"Toca per gestionar la xarxa."</string>
@@ -1275,7 +1274,7 @@
<string name="sync_undo_deletes" msgid="2941317360600338602">"Desfés les supressions"</string>
<string name="sync_do_nothing" msgid="3743764740430821845">"No facis res per ara"</string>
<string name="choose_account_label" msgid="5655203089746423927">"Tria un compte"</string>
- <string name="add_account_label" msgid="2935267344849993553">"Addició d\'un compte"</string>
+ <string name="add_account_label" msgid="2935267344849993553">"Afegeix un compte"</string>
<string name="add_account_button_label" msgid="3611982894853435874">"Afegeix un compte"</string>
<string name="number_picker_increment_button" msgid="2412072272832284313">"Incrementa"</string>
<string name="number_picker_decrement_button" msgid="476050778386779067">"Redueix"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telèfon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculars"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altaveus del connector"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Àudio HDMI"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Àudio per Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Sortida de contingut multimèdia"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està explorant..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"S\'està connectant..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"No disponible"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposa #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introdueix el PIN de la SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Introdueix el PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Introdueix la contrasenya"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Codi PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Codi PIN nou"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La SIM està desactivada. Introdueix el codi PUK per continuar. Contacta amb l\'operador de telefonia mòbil per obtenir detalls."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introdueix el codi PIN"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirma el codi PIN"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"S\'està desbloquejant la targeta SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codi PIN incorrecte."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escriu un PIN que tingui de 4 a 8 números."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Introdueix un PUK que tingui com a mínim 8 números."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Introdueix el codi PUK i el codi PIN nou"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"El PUK que has escrit no és correcte."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El codi PUK ha de tenir 8 números o més."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Torna a introduir el codi PUK correcte. Els intents repetits faran que es desactivi la SIM de manera permanent."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Els codis PIN no coincideixen"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Massa intents incorrectes"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Per desbloquejar el telèfon, inicia la sessió amb el compte de Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nom d\'usuari (correu electrònic)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Inicia la sessió"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nom d\'usuari o contrasenya no vàlids."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Has oblidat el teu nom d\'usuari o la contrasenya?"\n"Visita "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"S\'està comprovant..."</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"S\'està desbloquejant la targeta SIM…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Has escrit malament el PIN <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Has escrit malament la contrasenya <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Has dibuixat el patró de desbloqueig de manera incorrecta <xliff:g id="NUMBER_0">%d</xliff:g> vegades. "\n\n"Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_1">%d</xliff:g> segons."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis la tauleta amb un compte de correu electrònic."\n\n" Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis el telèfon amb un compte de correu electrònic."\n\n" Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Vols augmentar el volum per sobre del nivell de seguretat?"\n"Escoltar música a un volum alt durant períodes llargs pot perjudicar l\'oïda."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"S\'ha activat l\'accessibilitat."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 8e05c03..cf91801 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Umožňuje aplikaci získat informace o vnitřním stavu systému. Škodlivé aplikace mohou získat různé soukromé informace nebo informace o zabezpečení, které by běžně vůbec neměly potřebovat."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"načtení obsahu obrazovky"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Umožňuje aplikaci načíst obsah aktivního okna. Škodlivé aplikace mohou načíst obsah celého okna a prozkoumat všechen text kromě hesel."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dočasná aktivace usnadnění přístupu"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umožňuje aplikaci dočasně aktivovat usnadnění přístupu v zařízení. Škodlivé aplikace mohou usnadnění přístupu aktivovat bez souhlasu uživatele."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"načítání informací o oknech"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikaci načíst informace o oknech ze správce oken. Škodlivé aplikace mnohou načíst informace, které slouží k internímu systémovému využití."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrování událostí"</string>
@@ -752,7 +750,7 @@
<string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Nesprávný kód PIN."</string>
<string name="keyguard_label_text" msgid="861796461028298424">"Chcete-li telefon odemknout, stiskněte Menu a poté 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Číslo tísňové linky"</string>
- <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Žádný signál."</string>
+ <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Žádný signál"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Obrazovka uzamčena."</string>
<string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Chcete-li odemknout telefon nebo provést tísňové volání, stiskněte Menu."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Telefon odemknete stisknutím tlačítka Menu."</string>
@@ -767,7 +765,7 @@
<string name="lockscreen_charged" msgid="4938930459620989972">"nabito"</string>
<string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
<string name="lockscreen_low_battery" msgid="1482873981919249740">"Připojte dobíjecí zařízení."</string>
- <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Není vložena SIM karta."</string>
+ <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Není vložena SIM karta"</string>
<string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"V tabletu není SIM karta."</string>
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu není žádná SIM karta."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte SIM kartu."</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Povolit"</string>
<string name="sms_control_no" msgid="625438561395534982">"Odmítnout"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> chce odeslat zprávu na adresu <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Toto může vést k poplatkům na vašem mobilním účtu."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Toto povede k poplatkům na vašem mobilním účtu."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Odeslat"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Zrušit"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Zapamatovat moji volbu"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Povolit vždy"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nepovolit nikdy"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM karta odebrána"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Sluchátka"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Reproduktory doku"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Zvuk HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth Audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integrovaná obrazovka"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Obrazovka HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Překryvná vrstva č. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Zadejte kód PIN SIM karty"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Zadejte kód PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Zadejte heslo"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Kód PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nový kód PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokování SIM karty..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávný kód PIN."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadejte kód PIN o délce 4–8 číslic."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Zadejte osmimístný nebo delší kód PUK."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Zadejte kód PUK a nový kód PIN."</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Zadali jste nesprávný kód PUK."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Příliš mnoho pokusů o nakreslení gesta"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Chcete-li telefon odemknout, přihlaste se pomocí svého účtu Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Uživatelské jméno (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Přihlásit se"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Neplatné uživatelské jméno nebo heslo."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zapomněli jste uživatelské jméno nebo heslo?"\n"Přejděte na stránku "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrola…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste zadali nesprávný kód PIN. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně zadali heslo. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste zadali nesprávné bezpečnostní gesto. "\n\n"Zkuste to znovu za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g>dalších neúspěšných pokusech budete požádáni o odemčení tabletu pomocí e-mailového účtu."\n\n" Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech budete požádáni o odemčení telefonu pomocí e-mailového účtu."\n\n" Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Chcete hlasitost zvýšit nad bezpečnou úroveň?"\n"Dlouhodobý poslech hlasitého zvuku může poškodit sluch."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Usnadnění přístupu je aktivováno."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 21a7bf4..224329c 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Tillader, at appen kan hente systemets interne tilstand. Ondsindede apps kan hente en lang række fortrolige og beskyttede oplysninger, som de normalt aldrig ville have brug for."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"hente skærmindhold"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tillader, at appen kan hente indholdet i det aktive vindue. Ondsindede apps kan hente al indholdet i vinduet og undersøge al dens tekst med undtagelse af adgangskoder."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivér tilgængelighed midlertidigt"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tillader, at en applikation midlertidigt kan aktivere tilgængelighed på enheden. Skadelige apps kan muligvis aktivere tilgængelighed uden brugerens samtykke."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hent oplysninger om vinduer"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillader, at en applikation henter oplysninger om vinduerne i vinduesadministratoren. Skadelige apps kan muligvis hente oplysninger, der er beregnet til intern systembrug."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrer begivenheder"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Tillad"</string>
<string name="sms_control_no" msgid="625438561395534982">"Afvis"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> vil sende en besked til <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Din mobilkonto kan blive debiteret."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Dette vil medføre gebyrer på din mobilkonto."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Send"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Annuller"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Husk mit valg"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Tillad altid"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Tillad aldrig"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kort blev fjernet"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hovedtelefoner"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockstationens højttalere"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-lyd"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Udfør"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieudgang"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Indbygget skærm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skærm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlejring nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Indtast pinkode til SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Indtast pinkode"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Angiv adgangskode"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-kode"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Ny pinkode"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortet låses op…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Forkert pinkode."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Indtast en pinkode på mellem 4 og 8 tal."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Angiv en PUK-kode på 8 eller flere cifre."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Indtast PUK-koden og den nye pinkode"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Den indtastede PUK-kode er forkert."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøg på at tegne mønstret korrekt"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Lås op ved at logge ind med din Google-konto."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Brugernavn (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Log ind"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ugyldigt brugernavn eller ugyldig adgangskode."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glemt dit brugernavn eller din adgangskode?"\n"Gå til "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrollerer..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har indtastet en forkert pinkode <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har indtastet din adgangskode forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. "\n\n"Prøv igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg vil du blive bedt om at låse din tablet op ved hjælp af en e-mailkonto"\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg til vil du blive bedt om at låse din telefon op ved hjælp af en e-mailkonto."\n\n" Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Skal lydstyrken være over det sikre niveau?"\n"Du kan skade din hørelse ved at lytte ved høj lydstyrke i længere tid."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Tilgængelighed aktiveret."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index f46f313..35d9233 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Ermöglicht der App, den internen Systemstatus abzurufen. Schädliche Apps können so eine Vielzahl an privaten und geschützten Daten abrufen, die sie in der Regel nicht benötigen."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"Bildschirminhalt abrufen"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ermöglicht der App, den Inhalt des aktiven Fensters abzurufen. Schädliche Apps können so den gesamten Fensterinhalt abrufen und mit Ausnahme von Passwörtern den gesamten Text auswerten."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Bedienungshilfen vorübergehend aktivieren"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ermöglicht einer App, die Bedienungshilfen auf dem Gerät vorübergehend zu aktivieren. Schädliche Apps können Bedienungshilfen ohne die Zustimmung des Nutzers aktivieren."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"Fensterinformationen abrufen"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ermöglicht einer App, Informationen über die Fenster vom Fenster-Manager abzurufen. Schädliche Apps können Informationen abrufen, die für die systeminterne Nutzung gedacht sind."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Ereignisse filtern"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Zulassen"</string>
<string name="sms_control_no" msgid="625438561395534982">"Nicht zulassen"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> möchte eine Nachricht an <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> senden."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Hierfür können Ihrem Mobilfunkkonto Gebühren berechnet werden."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Hierfür werden Ihrem Mobilfunkkonto Gebühren berechnet."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Senden"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Abbrechen"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Auswahl merken"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Immer zulassen"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nie zulassen"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-Karte entfernt"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kopfhörer"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock-Lautsprecher"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-Audio"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-Audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fertig"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medienausgabe"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integrierter Bildschirm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-Bildschirm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay-Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM-PIN eingeben"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"PIN eingeben"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Passwort eingeben"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-Code"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Neuer PIN-Code"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-Karte wird entsperrt…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Falscher PIN-Code"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Geben Sie eine 4- bis 8-stellige PIN ein."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Geben Sie eine mindestens 8-stellige PUK ein."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK und neuen PIN-Code eingeben"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Die von Ihnen eingegebene PUK ist nicht korrekt."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zu viele Musterversuche"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Melden Sie sich zum Entsperren mit Ihrem Google-Konto an."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nutzername (E-Mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Anmelden"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ungültiger Nutzername oder ungültiges Passwort"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nutzernamen oder Passwort vergessen?"\n"Besuchen Sie "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Überprüfung…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Sie haben Ihre PIN <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch eingegeben."\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Sie haben Ihr Passwort <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch eingegeben."\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. "\n\n"Versuchen Sie es in <xliff:g id="NUMBER_1">%d</xliff:g> Sekunden erneut."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Tablet mithilfe eines E-Mail-Kontos zu entsperren."\n\n" Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Telefon mithilfe eines E-Mail-Kontos zu entsperren."\n\n" Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Lautstärke höher als Schwellenwert stellen?"\n"Wenn Sie über längere Zeiträume hinweg Musik in hoher Lautstärke hören, kann dies Ihr Gehör schädigen."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Bedienungshilfen aktiviert"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index ded1b1c..aef7e99 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Επιτρέπει στην εφαρμογή την ανάκτηση της εσωτερικής κατάστασης του συστήματος. Τυχόν κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν μεγάλη ποικιλία ιδιωτικών πληροφοριών και πληροφοριών ασφάλειας οι οποίες δεν θα έπρεπε να τους είναι απαραίτητες υπό φυσιολογικές συνθήκες."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ανάκτηση περιεχομένου οθόνης"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Επιτρέπει στην εφαρμογή την ανάκτηση του περιεχομένου του ενεργού παραθύρου. Τυχόν κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν ολόκληρο το περιεχόμενο του παραθύρου και να εξετάσουν ολόκληρο το κείμενό του εκτός από τους κωδικούς πρόσβασης."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"προσωρινή ενεργοποίηση προσβασιμότητας"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Επιτρέπει σε μια εφαρμογή να ενεργοποιήσει την προσβασιμότητα στη συσκευή. Οι κακόβουλες εφαρμογές ενδέχεται να ενεργοποιήσουν την προσβασιμότητα χωρίς τη συγκατάθεση των χρηστών."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ανάκτηση πληροφοριών παραθύρων"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Επιτρέπει σε μια εφαρμογή να ανακτήσει πληροφορίες σχετικά με τα παράθυρα από το διαχειριστή παραθύρων. Οι κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν πληροφορίες που προορίζονται για την εσωτερική χρήση του συστήματος."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"φιλτράρισμα συμβάντων"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Αποδοχή"</string>
<string name="sms_control_no" msgid="625438561395534982">"Άρνηση"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"Η εφαρμογή <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> θέλει να αποστείλει ένα μήνυμα στη διεύθυνση <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Ενδέχεται να χρεωθεί ο λογαριασμός κινητού τηλεφώνου σας."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Θα χρεωθεί ο λογαριασμός κινητού τηλεφώνου σας."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"Αυτή η ρύθμιση "<font fgcolor="#ffffb060">"ενδέχεται να επιφέρει χρεώσεις"</font>" στον λογαριασμό κινητού σας."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Αυτή η ρύθμιση θα επιφέρει χρεώσεις στον λογαριασμό κινητού σας."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Αποστολή"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Ακύρωση"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Απομνημόνευση της επιλογής μου"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Μπορ.να το αλλάξ.αργ.στις Ρυθ. > Εφ."</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Να επιτρέπεται πάντα"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Να μην επιτρέπεται ποτέ"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Η κάρτα SIM αφαιρέθηκε"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Τηλέφωνο"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ακουστικά"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Ηχεία βάσης σύνδεσης"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Ήχος HDMI"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Σύστημα"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ήχος Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Τέλος"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Έξοδος μέσων"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"Σάρωση…"</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"Σύνδεση…"</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Διαθέσιμη"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"Μη διαθέσιμο"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ενσωματωμένη οθόνη"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Οθόνη HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Επικάλυψη #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Εισαγωγή PIN SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Πληκτρολογήστε το PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Εισαγάγετε κωδικό πρόσβασης"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Κωδικός PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Νέος κωδικός PIN"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Η κάρτα SIM είναι απενεργοποιημένη αυτή τη στιγμή. Εισαγάγετε τον κωδικό PUK για να συνεχίσετε. Επικοινωνήστε με την εταιρεία κινητής τηλεφωνίας σας για λεπτομέρειες."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Εισαγάγετε τον απαιτούμενο κωδικό PIN"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Επιβεβαιώστε τον απαιτούμενο κωδικό PIN"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ξεκλείδωμα κάρτας SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Εσφαλμένος κωδικός PIN."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Πληκτρολογήστε έναν κωδικό PUK με 8 αριθμούς ή περισσότερους."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Πληκτρολογήστε τον κωδικό PUK και τον νέο κωδικό PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Ο κωδικός PUK που πληκτρολογήσατε είναι εσφαλμένος."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ο κωδικός PUK θα πρέπει να περιέχει τουλάχιστον 8 αριθμούς."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Εισαγάγετε ξανά τον κωδικό PUK. Οι επαναλαμβανόμενες προσπάθειες θα απενεργοποιήσουν οριστικά την κάρτα SIM."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Δεν υπάρχει αντιστοιχία των κωδικών PIN"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Πάρα πολλές προσπάθειες μοτίβου"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Για ξεκλείδωμα, συνδεθείτε με τον λογαριασμό σας Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Όνομα χρήστη (διεύθυνση ηλεκτρονικού ταχυδρομείου)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Σύνδεση"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Μη έγκυρο όνομα χρήστη ή κωδικός πρόσβασης."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ξεχάσατε το όνομα χρήστη ή τον κωδικό πρόσβασής σας;"\n"Επισκεφτείτε τη διεύθυνση "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Έλεγχος…"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"Ξεκλείδωμα SIM…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Έχετε πληκτρολογήσει εσφαλμένα τον κωδικό σας PIN <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Έχετε πληκτρολογήσει τον κωδικό πρόσβασης εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλεπτα."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Σχεδιάσατε εσφαλμένα το μοτίβο ξεκλειδώματος <xliff:g id="NUMBER_0">%d</xliff:g> φορές. "\n\n"Δοκιμάστε ξανά σε <xliff:g id="NUMBER_1">%d</xliff:g> δευτερόλετπα."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το tablet σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου."\n\n" Δοκιμάστε να συνδεθείτε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου."\n\n" Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Αύξηση έντασης ήχου πάνω από το επίπεδο ασφαλείας;"\n"Αν ακούτε μουσική σε υψηλή ένταση για μεγάλο χρονικό διάστημα ενδέχεται να προκληθεί βλάβη στην ακοή σας."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Ενεργοποιήθηκε η προσβασιμότητα."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index d8e924e..cd228ee 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Allows the app to retrieve the internal state of the system. Malicious apps may retrieve a wide variety of private and secure information that they should never normally need."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"retrieve screen content"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Allows the app to retrieve the content of the active window. Malicious apps may retrieve the entire window content and examine all its text except passwords."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"temporary enable accessibility"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Allows an application to temporarily enable accessibility on the device. Malicious apps may enable accessibility without user consent."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"retrieve window info"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Allows an application to retrieve information about the windows from the window manager. Malicious apps may retrieve information that is intended for internal system usage."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filter events"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Allow"</string>
<string name="sms_control_no" msgid="625438561395534982">"Deny"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> would like to send a message to <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"This may cause charges on your mobile account."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"This will cause charges on your mobile account."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"This "<font fgcolor="#ffffb060">"may cause charges"</font>" on your mobile account."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"This will cause charges on your mobile account."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Send"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancel"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Remember my choice"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"You can change this later in Settings > Apps"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Always Allow*"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Never Allow"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM card removed"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Phone"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphones"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dock speakers"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI audio"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"Scanning..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"Connecting..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Available"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"Not available"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Built-in Screen"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Screen"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Enter SIM PIN"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Enter PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Enter Password"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK code"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"New PIN code"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Type a PUK that is 8 numbers or longer."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Type PUK and new PIN code"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"The PUK you typed isn\'t correct."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"To unlock, sign in with your Google account."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Sign in"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Invalid username or password."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Forgot your username or password?"\n"Visit "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Checking…"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"Unlocking SIM…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. "\n\n"Try again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account."\n\n" Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account."\n\n" Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Raise volume above safe level?"\n"Listening at high volume for long periods may damage your hearing."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Accessibility enabled."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 8e3827d..75454d1 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permite que la aplicación recupere el estado interno del sistema. Las aplicaciones maliciosas pueden recuperar una amplia variedad de información privada y segura que normalmente no necesitarían."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"recuperar contenido de la pantalla"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que la aplicación recupere el contenido de la ventana activa. Las aplicaciones maliciosas pueden recuperar el contenido completo de la ventana y examinar todo el texto, excepto las contraseñas."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Activación temporal de la accesibilidad"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite a una aplicación activar la accesibilidad en el dispositivo temporalmente. Las aplicaciones maliciosas pueden activar la accesibilidad sin el consentimiento del usuario."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar información de ventanas"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere la información del administrador de ventanas relacionada con estas. Las aplicaciones maliciosas pueden recuperar información destinada al uso interno del sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
@@ -324,7 +322,7 @@
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"mostrar ventanas no autorizadas"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Permite que la aplicación cree ventanas para la interfaz de usuario interna del sistema. Las aplicaciones normales no deben usar este permiso."</string>
<string name="permlab_systemAlertWindow" msgid="3543347980839518613">"destacar sobre otras aplicaciones"</string>
- <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Permite a la aplicación elegir por encima de otras aplicaciones o partes de la interfaz de usuario que pueden interferir en tu uso de la interfaz en cualquier aplicación o cambiar lo que crees que ves en otras aplicaciones."</string>
+ <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Permite a la aplicación escribir por encima de otras aplicaciones o partes de la interfaz de usuario que pueden interferir en tu uso de la interfaz en cualquier aplicación o cambiar lo que crees que ves en otras aplicaciones."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"modificar la velocidad de la animación global"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permite que la aplicación cambie la velocidad de animación global (animaciones más rápidas o más lentas) en cualquier momento."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"administrar tokens de aplicación"</string>
@@ -372,8 +370,8 @@
<string name="permlab_installPackages" msgid="2199128482820306924">"instalar aplicaciones directamente"</string>
<string name="permdesc_installPackages" msgid="5628530972548071284">"Permite que la aplicación instale paquetes de Android nuevos o actualizados. Las aplicaciones maliciosas pueden utilizar este permiso para agregar nuevas aplicaciones con permisos arbitrarios potentes."</string>
<string name="permlab_clearAppCache" msgid="7487279391723526815">"eliminar todos los datos de caché de la aplicación"</string>
- <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Permite a la aplicación liberar almacenamiento de la tableta al eliminar archivos en los directorios de memoria cache de otras aplicaciones. Esto puede ocasionar que otras aplicaciones arranquen más lentamente, ya que deben volver a recuperar sus datos."</string>
- <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Permite a la aplicación liberar almacenamiento del teléfono al borrar los archivos en los directorios de memoria cache de otras aplicaciones. Esto puede ocasionar que otras aplicaciones arranquen más lentamente, ya que deben volver a recuperar sus datos."</string>
+ <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Permite a la aplicación liberar almacenamiento de la tableta al eliminar archivos en los directorios de la memoria cache de otras aplicaciones. Esto puede ocasionar que otras aplicaciones arranquen más lentamente, ya que deben volver a recuperar sus datos."</string>
+ <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Permite a la aplicación liberar almacenamiento del dispositivo al borrar los archivos en los directorios de la memoria cache de otras aplicaciones. Esto puede ocasionar que otras aplicaciones arranquen más lentamente, ya que deben volver a recuperar sus datos."</string>
<string name="permlab_movePackage" msgid="3289890271645921411">"mover recursos de la aplicación"</string>
<string name="permdesc_movePackage" msgid="319562217778244524">"Permite que la aplicación traslade recursos de la aplicación de medios internos a medios externos y viceversa."</string>
<string name="permlab_readLogs" msgid="6615778543198967614">"lee los datos confidenciales del registro"</string>
@@ -435,9 +433,9 @@
<string name="permlab_installLocationProvider" msgid="6578101199825193873">"autorización para instalar un proveedor de ubicación"</string>
<string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Permite crear fuentes de ubicación simuladas para hacer pruebas o instalar un nuevo proveedor de ubicación. Este permiso autoriza a la aplicación a sobrescribir la ubicación o el estado proporcionados por otras fuentes de ubicación, como los proveedores de ubicación o GPS."</string>
<string name="permlab_accessFineLocation" msgid="1191898061965273372">"ubicación precisa (según el GPS y la red)"</string>
- <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Permite a la aplicación obtener tu ubicación precisa mediante el Sistema de Posicionamiento Global (GPS) o las fuentes de ubicación de red, como las torres de celulares y Wi-Fi. Estos servicios de localización deben estar encendidos y disponibles en tu dispositivo para que los use la aplicación. Las aplicaciones pueden usarlo para determinar tu ubicación, lo cual puede consumir más batería."</string>
+ <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Permite a la aplicación obtener tu ubicación precisa mediante el Sistema de Posicionamiento Global (GPS) o las fuentes de ubicación de red, como las torres de celulares y Wi-Fi. Estos servicios de ubicación deben estar encendidos y disponibles en tu dispositivo para que los use la aplicación. Las aplicaciones pueden usarlo para determinar tu ubicación, lo cual puede consumir más batería."</string>
<string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"ubicación aproximada (según la red)"</string>
- <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Permite a la aplicación obtener tu ubicación aproximada. Esta ubicación se deriva de los servicios de localización que usan fuentes de ubicación de red, como torres de celulares y Wi-Fi. Estos servicios de localización deben estar encendidos y disponibles en tu dispositivo para que los use la aplicación. Las aplicaciones pueden usarlo para determinar tu ubicación aproximada."</string>
+ <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Permite a la aplicación obtener tu ubicación aproximada. Esta ubicación deriva de los servicios de ubicación que usan fuentes de ubicación de red, como torres de celulares y Wi-Fi. Estos servicios de ubicación deben estar encendidos y disponibles en tu dispositivo para que los use la aplicación. Las aplicaciones pueden usarlo para determinar tu ubicación aproximada."</string>
<string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"acceder a SurfaceFlinger"</string>
<string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación utilice funciones de SurfaceFlinger de bajo nivel."</string>
<string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer el búfer de tramas"</string>
@@ -1094,18 +1092,22 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"Para:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Escribe el PIN solicitado:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"El teléfono se desconectará temporalmente del sistema Wi-Fi mientras esté conectado a <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"El dispositivo se desconectará temporalmente de la red Wi-Fi mientras esté conectado a <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="select_character" msgid="3365550120617701745">"Insertar caracteres"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Enviando mensajes SMS"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> está enviando una gran cantidad de mensajes SMS. ¿Quieres permitir que está aplicación siga enviando mensajes?"</string>
<string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
<string name="sms_control_no" msgid="625438561395534982">"Rechazar"</string>
- <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> deseas enviar un mensaje a <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Esto puede generar cargos en tu cuenta de dispositivos móviles."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Esto generará cargos en tu cuenta de dispositivos móviles."</string>
+ <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> desea enviar un mensaje a <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Enviar"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancelar"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Recordar mi elección"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Permitir siempre"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"No permitir nunca"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Tarjeta SIM eliminada"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Dispositivo"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculares"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altavoces del conector"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Listo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingresa el PIN de la tarjeta SIM."</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ingresa el PIN."</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ingresa tu contraseña."</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Código PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuevo código PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de cuatro a ocho números."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Ingresa un código PUK de ocho números o más."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Escribe el código PUK y un nuevo código PIN."</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"El código PUK que escribiste es incorrecto."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de ingresar el patrón"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, accede con tu cuenta de Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Acceder"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nombre de usuario o contraseña incorrectos"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"¿Olvidaste tu nombre de usuario o contraseña?"\n"Accede a "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Comprobando…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escribiste incorrectamente tu PIN <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escribiste incorrectamente tu contraseña <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Vuelve a intentarlo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
@@ -1409,13 +1428,12 @@
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Intentaste desbloquear el dispositivo <xliff:g id="NUMBER">%d</xliff:g> veces, pero no lo lograste. Se restablecerán los valores predeterminados de fábrica del dispositivo."</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu tableta mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo."\n\n" Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
- <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"¿Aumentar el volumen sobre el nivel seguro?"\n"Si escuchas con el volumen alto durante períodos prolongados, puedes dañar tu audición."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"¿Aumentar el volumen por encima del nivel seguro?"\n"Si escuchas con el volumen alto durante períodos prolongados, puedes dañar tu audición."</string>
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Se activó la accesibilidad."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 7b47b51..b4c4e1e 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permite que la aplicación recupere el estado interno del sistema. Las aplicaciones malintencionadas pueden usar este permiso para recuperar una gran variedad de información protegida y privada que normalmente no deberían necesitar."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"recuperar contenido de la pantalla"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que la aplicación recupere el contenido de la ventana activa. Las aplicaciones malintencionadas pueden recuperar todo el contenido de la ventana y analizar todo el texto de la misma, excepto las contraseñas."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"habilitar la accesibilidad de forma temporal"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que una aplicación habilite la accesibilidad en el dispositivo de forma temporal. Las aplicaciones maliciosas pueden habilitar la accesibilidad sin el consentimiento del usuario."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar información de ventanas"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere información sobre las ventanas del administrador de ventanas. Las aplicaciones malintencionadas pueden recuperar información destinada al uso interno del sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
<string name="sms_control_no" msgid="625438561395534982">"Denegar"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> quiere enviar un mensaje a <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Es posible que se apliquen cargos en tu cuenta móvil."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Se aplicarán cargos en tu cuenta móvil."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Enviar"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancelar"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Recordar opción seleccionada"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Permitir siempre"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"No permitir nunca"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Tarjeta SIM eliminada"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Teléfono"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auriculares"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altavoces del conector"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fin"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Pantalla integrada"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Pantalla HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduce el PIN de la tarjeta SIM."</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Introduce el PIN."</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Escribe tu contraseña."</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Código PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuevo código PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduce un código PIN con una longitud comprendida entre cuatro y ocho dígitos."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Escribe un código PUK de ocho caracteres o más."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Introduce el código PUK y un nuevo código PIN."</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"El código PUK que has introducido no es correcto."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de crear el patrón"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear el teléfono, inicia sesión con tu cuenta de Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nombre de usuario (correo electrónico)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Iniciar sesión"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"El nombre de usuario o la contraseña no son válidos."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Si has olvidado tu nombre de usuario o tu contraseña,"\n"accede a la página "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Comprobando..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Has introducido un código PIN incorrecto <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Has introducido una contraseña incorrecta <xliff:g id="NUMBER_0">%d</xliff:g> veces. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar tu patrón de desbloqueo. "\n\n"Inténtalo de nuevo en <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el tablet."\n\n" Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el teléfono."\n\n" Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"¿Subir el volumen por encima del nivel de seguridad?"\n"Escuchar sonidos a alto volumen durante largos períodos de tiempo puede dañar tus oídos."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Accesibilidad habilitada"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index 7fb52fd..1205594 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Võimaldab rakendusel teada saada süsteemi sisemist olekut. Pahatahtlikud rakendused võivad hankida mitmesugust privaatset ja turvateavet, mida neil tavaliselt kunagi vaja ei lähe."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ekraanisisu taastamine"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Võimaldab rakendusel kätte saada aktiivse akna sisu. Pahatahtlikud rakendused võivad hankida kogu akna sisu ja uurida kogu selle teksti, välja arvatud paroole."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ajutine hõlbustuse lubamine"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Lubab rakendusel ajutiselt lubada seadmes hõlbustuse. Pahatahtlikud rakendused võivad lubada hõlbustuse kasutaja nõusolekuta."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hangi akna teave"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Võimaldab rakendusel hankida teavet aknahalduri akende kohta. Pahatahtlikud rakendused võivad hankida teavet, mis on mõeldud süsteemisiseseks kasutamiseks."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtreeri sündmused"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Luba"</string>
<string name="sms_control_no" msgid="625438561395534982">"Keela"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> soovib saata sõnumi aadressile <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"See võib tekitada mobiilikontole kulusid."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"See tekitab mobiilikontole kulusid."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Saada"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Tühista"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Jäta minu valik meelde"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Luba alati"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ära luba"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kaart eemaldatud"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kõrvaklapid"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doki kõlarid"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI heli"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Meediaväljund"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Sisseehitatud ekraan"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-ekraan"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Ülekate nr .<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Sisestage SIM-i PIN-kood"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Sisestage PIN-kood"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Sisestage parool"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-kood"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Uus PIN-kood"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Vale PIN-kood."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Sisestage 8-numbriline või pikem PUK-kood."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Sisestage PUK-kood ja uus PIN-kood"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Sisestatud PUK-kood pole õige."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Avamiseks logige sisse oma Google\'i kontoga."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Kasutajanimi (e-post)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Logi sisse"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Vale kasutajanimi või parool."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kas unustasite kasutajanime või parooli?"\n"Külastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrollimine ..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud."\n\n"Proovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. "\n\n"Proovige uuesti <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti."\n\n"Proovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga."\n\n" Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Kas suurendada helitugevust üle ohutu piiri?"\n"Pikaajaline suure helitugevusega muusika kuulamine võib kahjustada kuulmist."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Hõlbustus on lubatud."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 468ef987..6602240 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"به برنامه اجازه میدهد تا وضعیت داخلی سیستم را بازیابی کند. برنامههای مخرب میتوانند انواع مختلفی از اطلاعات خصوصی و امن را که معمولا به آنها نیاز ندارند، بازیابی کنند."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"بازیابی محتوای صفحه"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"به برنامه اجازه میدهد تا محتوای پنجره فعال را بازیابی کند. برنامههای مخرب میتوانند کل محتوای پنجره را بازیابی کنند و همه متن آنرا به غیر از گذرواژهها امتحان کنند."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"قابلیت دسترسی به طور موقت فعال شود"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"به یک برنامه اجازه میدهد به صورت موقت قابلیت دسترسی را در دستگاه فعال کند. برنامههای مخرب میتوانند قابلیت دسترسی را بدون رضایت کاربر فعال کنند."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"بازیابی اطلاعات پنجره"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"به یک برنامه کاربردی اجازه میدهد که اطلاعات مربوط به پنجرهها را از مدیریت پنجره بازیابی کند. برنامههای کاربردی مخرب ممکن است اطلاعاتی که برای استفاده سیستم داخلی درنظر گرفته شدهاند را بازیابی کنند."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"فیلتر کردن رویدادها"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"اجازه دادن"</string>
<string name="sms_control_no" msgid="625438561395534982">"ردکردن"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> مایل است پیامی به <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> ارسال کند."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"این کار میتواند برای حساب تلفن همراه شما هزینه داشته باشد."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"این کار برای حساب تلفن همراه شما هزینه خواهد داشت."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"ارسال"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"لغو"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"این انتخاب را به خاطر بسپار"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"همیشه مجاز"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"همیشه غیرمجاز"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"سیم کارت برداشته شد"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"تلفن"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"هدفونها"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"بلندگوهای جایگاه اتصال"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"صدای HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"سیستم"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوتوثهای صوتی"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"انجام شد"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"خروجی رسانه"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"صفحه نمایش از خود"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"صفحه HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"همپوشانی #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"پین سیم کارت را وارد کنید"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"پین را وارد کنید"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"گذرواژه را وارد کنید"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"کد PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"پین کد جدید"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"بازگشایی قفل سیم کارت..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"پین کد اشتباه است."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"یک پین ۴ تا ۸ رقمی را تایپ کنید."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"یک PUK با ۸ رقم یا بیشتر تایپ کنید."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK و پین کد جدید را تایپ کنید"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK که نوشتهاید صحیح نیست."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"تلاشهای زیادی برای کشیدن الگو صورت گرفته است"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"نام کاربری (ایمیل)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"ورود به سیستم"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری یا گذرواژه نامعتبر."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"نام کاربری یا گذرواژه خود را فراموش کردید؟"\n"از "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"در حال بررسی..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. "\n\n"پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"گذرواژه خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. "\n\n"پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدید. "\n\n"لطفاً پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیدهاید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته میشود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید."\n\n" لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"صدا به بالاتر از سطح ایمن افزایش یابد؟"\n"گوش دادن به صدای بلند برای زمانهای طولانی میتواند به شنوایی شما آسیب برساند."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"قابلیت دسترسی فعال شد."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index b4ba021..02f3299 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Antaa sovelluksen noutaa järjestelmän sisäisen tilan. Haitalliset sovellukset voivat noutaa paljon yksityisiä ja suojattuja tietoja, joita niiden ei pitäisi tarvita normaalisti."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"nouda näytön sisältö"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Antaa sovelluksen noutaa aktiivisen ikkunan sisällön. Haitalliset sovellukset voivat noutaa koko ikkunan sisällön ja tarkastella sen kaikkea tekstiä lukuun ottamatta salasanoja."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ota esteettömyystila käyttöön väliaikaisesti"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Antaa sovelluksen ottaa esteettömyystilan käyttöön laitteessa väliaikaisesti. Haitalliset sovellukset voivat ottaa esteettömyystilan käyttöön ilman käyttäjän lupaa."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"nouda ikkunoiden tietoja"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Antaa sovelluksen noutaa ikkunoiden tietoja ikkunanhallinnasta. Haitalliset sovellukset voivat noutaa tietoja, jotka on tarkoitettu järjestelmän sisäiseen käyttöön."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"suodata tapahtumat"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Salli"</string>
<string name="sms_control_no" msgid="625438561395534982">"Kiellä"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> haluaa lähettää viestin osoitteeseen <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Matkapuhelinliittymäsi tiliä voidaan veloittaa."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Matkapuhelinliittymäsi tiliä veloitetaan."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Lähetä"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Peruuta"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Muista valintani"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Salli aina"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Älä koskaan salli"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kortti poistettu"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Puhelin"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kuulokkeet"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Telineen kaiuttimet"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-ääni"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Järjestelmä"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ääni"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Median äänentoisto"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Yhdysrakenteinen näyttö"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-ruutu"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Peittokuva # <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Anna SIM-kortin PIN-koodi"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Anna PIN-koodi"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Anna salasana"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-koodi"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Uusi PIN-koodi"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortin lukitusta poistetaan…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Virheellinen PIN-koodi."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Anna 4–8-numeroinen PIN-koodi."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Kirjoita vähintään 8 numeron pituinen PUK-koodi."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Anna PUK-koodi ja uusi PIN-koodi"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Antamasi PUK-koodi on virheellinen."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liikaa kuvionpiirtoyrityksiä"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Poista lukitus kirjautumalla sisään Google-tililläsi."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Käyttäjänimi (sähköposti)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Kirjaudu sisään"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Virheellinen käyttäjänimi tai salasana."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Unohditko käyttäjänimesi tai salasanasi?"\n"Käy osoitteessa "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Tarkistetaan..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olet kirjoittanut PIN-koodin väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olet kirjoittanut salasanan väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Olet piirtänyt lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. "\n\n"Yritä uudelleen <xliff:g id="NUMBER_1">%d</xliff:g> sekunnin kuluttua."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan tablet-laitteesi lukitus sähköpostitilin avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan puhelimesi lukitus sähköpostitilin avulla."\n\n" Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Nostetaanko äänenvoimakkuus turvallista tasoa voimakkaammaksi?"\n"Jos kuuntelet suurella äänenvoimakkuudella pitkiä aikoja, kuulosi voi vahingoittua."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Esteettömyystila käytössä."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 1a109d0..b57dbf2 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permet à l\'application de récupérer l\'état interne du système. Des applications malveillantes peuvent récupérer de nombreuses informations confidentielles et sécurisées dont elles ne devraient pas avoir besoin normalement."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"récupérer le contenu de l\'écran"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permet à l\'application de récupérer le contenu de la fenêtre active. Des applications malveillantes peuvent exploiter cette fonctionnalité pour récupérer et lire la totalité du contenu de la fenêtre, à l\'exception des mots de passe."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activer temporairement l\'accessibilité"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permet à une application d\'activer temporairement l\'accessibilité sur l\'appareil. Des applications malveillantes peuvent activer l\'accessibilité sans le consentement de l\'utilisateur."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"récupérer les informations sur les fenêtres"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet à une application de récupérer les informations sur les fenêtres depuis le gestionnaire de fenêtres. Des applications malveillantes peuvent récupérer des informations destinées à un usage interne du système."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrer les événements"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Autoriser"</string>
<string name="sms_control_no" msgid="625438561395534982">"Refuser"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> souhaite envoyer un message à <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Cela peut engendrer des frais sur votre facture mobile."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Cela va engendrer des frais sur votre facture mobile."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Envoyer"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Annuler"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Mémoriser mon choix"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Toujours autoriser"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ne jamais autoriser"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Carte SIM retirée"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Téléphone"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Écouteurs"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Haut-parleurs de la station d\'accueil"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"OK"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Écran intégré"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Écran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposition n° <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Saisissez le code PIN de la carte SIM."</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Saisissez le code PIN."</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Saisissez votre mot de passe."</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Clé PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nouveau code PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Le code PIN est erroné."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Veuillez saisir un code PIN comprenant entre quatre et huit chiffres."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Veuillez saisir une clé PUK comportant au moins huit chiffres."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Saisissez la clé PUK et le nouveau code PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"La clé PUK saisie est incorrecte."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Pour déverrouiller le téléphone, veuillez vous connecter avec votre compte Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nom d\'utilisateur (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Connexion"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nom d\'utilisateur ou mot de passe non valide."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Vous avez oublié votre nom d\'utilisateur ou votre mot de passe ?"\n"Rendez-vous sur la page "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Vérification en cours…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Vous avez saisi un code PIN incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. "\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Vous avez saisi un mot de passe incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. "\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises."\n\n"Veuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique."\n\n" Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Augmenter le volume au-dessus du niveau de sécurité ?"\n"L\'écoute à un volume élevé pendant des périodes prolongées peut endommager votre audition."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"L\'accessibilité a bien été activée."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 556412d..062df09 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"एप्लिकेशन को सिस्टम की आंतरिक स्थिति पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण एप्लिकेशन विभिन्न प्रकार की निजी और सुरक्षा जानकारी प्राप्त कर सकते हैं जिनकी उन्हें सामान्यत: आवश्यकता नहीं होती."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"स्क्रीन सामग्री पुनर्प्राप्त करें"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"एप्लिकेशन को सक्रिय विंडो की सामग्री पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण एप्लिकेशन विंडो की संपूर्ण सामग्री प्राप्त कर सकते हैं और पासवर्ड को छोड़कर इसके सभी पाठ जांच सकते हैं."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"पहुंच-योग्यता को अस्थायी रूप से सक्षम करें"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"एप्लिकेशन को उपकरण पर पहुंच-योग्यता को अस्थायी रूप से सक्षम करने देता है. दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता की सहमति के बिना पहुंच-योग्यता को सक्षम कर सकते हैं."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"विंडो जानकारी प्राप्त करें"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"एप्लिकेशन को विंडो प्रबंधक से windows के बारे में जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण एप्लिकेशन आंतरिक सिस्टम उपयोग के लिए अभिप्रेत जानकारी को प्राप्त कर सकते हैं."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"ईवेंट फ़िल्टर करें"</string>
@@ -324,7 +322,7 @@
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"अनधिकृत विंडो दिखाएं"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"किसी एप्लिकेशन को ऐसी विंडो बनाने देता है जिनका उपयोग आंतरिक सिस्टम उपयोगकर्ता इंटरफ़ेस द्वारा किया जाना है. सामान्य एप्लिकेशन द्वारा उपयोग करने के लिए नहीं."</string>
<string name="permlab_systemAlertWindow" msgid="3543347980839518613">"अन्य एप्लिकेशन पर खींचें"</string>
- <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"एप्लिकेशन को अन्य एप्लिकेशन के शीर्ष पर या उपयोगकर्ता इंटरफ़ेस के भागों आने देती है. वे किसी भी एप्लिकेशन में इंटरफ़ेस के आपके उपयोग में हस्तक्षेप कर सकते हैं, या अन्य एप्लिकेशन में वह बदल सकती है जिसके बारे में आपको लगता है कि आप देख रहे हैं."</string>
+ <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"एप्लिकेशन को अन्य एप्लिकेशन के शीर्ष पर या उपयोगकर्ता इंटरफ़ेस के हिस्सों पर आने देती है. वे किसी भी एप्लिकेशन में इंटरफ़ेस के आपके उपयोग में हस्तक्षेप कर सकते हैं, या उस चीज को बदल सकती है जिसके बारे में आपको लगता है कि आप उसे अन्य एप्लिकेशन में देख रहे हैं."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"वैश्विक एनिमेशन गति बदलें"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"एप्लिकेशन को किसी भी समय वैश्विक एनिमेशन गति (तेज़ या धीमे एनिमेशन) बदलने देता है."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"एप्लिकेशन टोकन प्रबंधित करें"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"अनुमति दें"</string>
<string name="sms_control_no" msgid="625438561395534982">"अस्वीकार करें"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>, <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> पर संदेश भेजना चाहता है."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"इससे आपके मोबाइल खाते पर शुल्क लग सकते हैं."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"इससे आपके मोबाइल खाते पर शुल्क लग सकते हैं."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"भेजें"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"रद्द करें"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"मेरी पसंद को याद रखें"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"हमेशा अनुमति दें"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"कभी भी अनुमति न दें"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"सिमकार्ड निकाला गया"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फ़ोन"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफ़ोन"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"डॉक स्पीकर"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI ऑडियो"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्टम"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ऑडियो"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"पूर्ण"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"मीडिया आउटपुट"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"अंतर्निहित स्क्रीन"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI स्क्रीन"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ओवरले #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"सिम PIN डालें"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"PIN डालें"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड डालें"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK कोड"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"नया PIN कोड"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलॉक कर रहा है…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"ऐसा PUK लिखें जो 8 अंकों या अधिक का हो."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK और नया PIN कोड लिखें"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"आपके द्वारा लिखा गया PUK सही नहीं है."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक प्रतिमान प्रयास"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"अनलॉक करने के लिए, अपने Google खाते से साइन इन करें."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"उपयोगकर्ता नाम (ईमेल)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन करें"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य उपयोगकर्ता नाम या पासवर्ड."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?"\n" "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"जांच कर रहा है..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक प्रतिमान <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. "\n\n" <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"वॉल्यूम को सुरक्षित स्तर से अधिक करें?"\n"अधिक देर तक उच्च वॉल्यूम पर सुनने से आपकी सुनने की क्षमता को नुकसान हो सकता है."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"पहुंच-योग्यता सक्षम कर दी है."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 70cf7cc..5252065 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Omogućuje aplikaciji dohvaćanje unutarnjeg stanja sustava. Zlonamjerne aplikacije mogu dohvatiti razne privatne i sigurnosne podatke koje im inače nikada ne bi trebale biti potrebne."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"dohvaćanje sadržaja zaslona"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Omogućuje aplikaciji dohvaćanje sadržaja aktivnog prozora. Zlonamjerne aplikacije mogu dohvatiti sav sadržaj prozora i pregledati sav njegov tekst osim zaporki."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"privremeno omogući dostupnost"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Aplikacija može privremeno omogućiti dostupnost na uređaju. Zlonamjerne aplikacije mogu omogućiti dostupnost bez korisnikova odobrenja."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"dohvaćanje informacija o prozoru"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Aplikaciji omogućuje dohvaćanje informacija o prozorima iz upravitelja prozora. Zlonamjerne aplikacije mogu dohvaćati informacije koje su namijenjene za internu uporabu sustava."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje događaja"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Dopusti"</string>
<string name="sms_control_no" msgid="625438561395534982">"Odbij"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> želi poslati poruku na <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Vaš mobilni račun može biti terećen."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Vaš mobilni račun bit će terećen."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Pošalji"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Odustani"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Zapamti odabir"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Dopusti uvijek"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ne dopuštaj nikada"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM kartica uklonjena"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalice"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvučnici postolja"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI audio"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sustav"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth zvuk"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medijski izlaz"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ugrađeni zaslon"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI zaslon"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Preklapanje br. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Unesite PIN za SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Unesite PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Unesite zaporku"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK kôd"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Novi PIN kôd"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Otključavanje SIM kartice…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netočan PIN kôd."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Unesite PIN koji ima od 4 do 8 brojeva."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Upišite PUK koji se sastoji od barem 8 brojeva."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Unesite PUK i novi PIN kôd"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK koji ste unijeli nije točan."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Previše pokušaja iscrtavanja obrasca"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Za otključavanje prijavite se Google računom."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Korisničko ime (e-pošta)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Prijava"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nevažeće korisničko ime ili zaporka."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zaboravili ste korisničko ime ili zaporku?"\n"Posjetite "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Provjeravanje…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Netočno ste napisali PIN <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Netočno ste napisali zaporku <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. "\n\n"Pokušajte ponovo za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati tabletno računalo pomoću računa e-pošte."\n\n" Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati telefon pomoću računa e-pošte."\n\n" Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Pojačati iznad sigurne razine?"\n"Dulje slušanje preglasne glazbe može vam oštetiti sluh."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Dostupnost je omogućena."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 1009fa5..0727bbd 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Lehetővé teszi az alkalmazás számára, hogy lekérje a rendszer belső állapotát. A rosszindulatú programok lekérhetnek számos olyan privát és biztonságos adatot, amelyekre normál esetben soha nincs szükségük."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"a képernyő tartalmának lekérése"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Lehetővé teszi az alkalmazás számára az aktív ablak tartalmának letöltését. A rosszindulatú alkalmazások letölthetik az ablak teljes tartalmát, és a jelszavak kivételével az összes szöveget megvizsgálhatják."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Ideiglenes hozzáférés engedélyezése"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Engedélyezi egy alkalmazás számára, hogy ideiglenesen hozzáférést biztosítson az eszközhöz. A kártékony alkalmazások a felhasználó beleegyezése nélkül engedélyezhetik a hozzáférést."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ablakkal kapcsolatos információk lekérése"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lehetővé teszi, hogy az alkalmazás információkat kérjen le az ablakkezelőben lévő ablakokkal kapcsolatban. A rosszindulatú alkalmazások belső rendszerhasználathoz szükséges információkat kérhetnek le."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"események szűrése"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Engedélyezés"</string>
<string name="sms_control_no" msgid="625438561395534982">"Elutasítás"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> üzenetet szeretne küldeni <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> számra."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Ezzel díjtételek keletkezhetnek mobilszámláján."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Ezzel díjtételek keletkeznek mobilszámláján."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Küldés"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Mégse"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"A választás mentése"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Engedélyezés mindig"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Soha nem engedélyezem"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kártya eltávolítva"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fejhallgató"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokkolóegység hangszórója"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI audió"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Rendszer"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth hang"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kész"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Médiakimenet"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Beépített képernyő"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-képernyő"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>. fedvény"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Adja meg a SIM kártya PIN kódját"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Adja meg a PIN kódot"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Írja be a jelszót"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK kód"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Új PIN kód"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kártya feloldása..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Helytelen PIN kód."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4–8 számjegyű PIN kódot írjon be."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"8 számjegyű vagy hosszabb PUK kódot írjon be."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Írja be a PUK kódot, majd az új PIN kódot"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"A megadott PUK kód helytelen."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Túl sok mintarajzolási próbálkozás"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google Fiókjával."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Felhasználónév (e-mail cím)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Bejelentkezés"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Érvénytelen felhasználónév vagy jelszó."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Elfelejtette a felhasználónevét vagy jelszavát?"\n"Keresse fel a "<b>"google.com/accounts/recovery"</b>" webhelyet."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Ellenőrzés..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg PIN kódját. "\n\n"Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg a jelszót. "\n\n" Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal rosszul rajzolta le feloldási mintát. "\n\n"Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a táblagépét."\n\n" Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a telefonját."\n\n" Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"A biztonságos szint fölé emeli a hangerőt?"\n"Ha hosszú ideig hangosan hallgatja a zenét, az károsíthatja a hallását."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Hozzáférés engedélyezve"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 132e634..a1a2a3b 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Mengizinkan apl mengambil keadaan internal sistem. Apl berbahaya dapat mengambil berbagai informasi pribadi dan aman yang seharusnya tidak diperlukan."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ambil konten layar"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Mengizinkan apl mengambil konten jendela aktif. Apl berbahaya dapat mengambil seluruh konten jendela dan memeriksa semua teksnya kecuali sandi."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktifkan aksesibilitas untuk sementara"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Memungkinkan aplikasi mengaktifkan aksesibilitas pada perangkat untuk sementara. Aplikasi berbahaya dapat mengaktifkan aksesibilitas tanpa izin pengguna."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"mengambil info jendela"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Mengizinkan aplikasi mengambil informasi tentang jendela dari pengelola jendela. Aplikasi berbahaya dapat mengambil informasi yang ditujukan untuk penggunaan sistem internal."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"memfilter acara"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Izinkan"</string>
<string name="sms_control_no" msgid="625438561395534982">"Tolak"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ingin mengirim pesan kepada <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Ini dapat menyebabkan tagihan pada akun seluler Anda."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Ini akan menyebabkan tagihan pada akun seluler Anda."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Kirim"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Batal"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Ingat pilihan saya"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Selalu Izinkan"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Jangan Pernah Izinkan"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kartu SIM dihapus"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Ponsel"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Headphone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Pengeras suara dok"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Keluaran media"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Layar Bawaan"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Layar HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Hamparan #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Sandi"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Kode PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Kode PIN baru"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kartu SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kode PIN salah."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ketik PIN yang terdiri dari 4 sampai 8 angka."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Ketik PUK yang terdiri dari 8 angka atau lebih."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Ketik kode PUK dan PIN baru"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK yang Anda ketikkan salah."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak upaya pola"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, masuk dengan akun Google Anda."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nama pengguna (email)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Masuk"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau sandi tidak valid."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau sandi Anda?"\n"Kunjungi "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Memeriksa…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah mengetik PIN. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah mengetik sandi. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. "\n\n"Coba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> detik."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci tablet menggunakan akun email."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci ponsel menggunakan akun email."\n\n"Coba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Naikkan volume di atas tingkat aman?"\n"Mendengarkan volume tinggi dalam jangka waktu yang lama dapat merusak pendengaran Anda."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Aksesibilitas diaktifkan."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 1ddbb59..0f44f78 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Consente all\'applicazione di recuperare lo stato interno del sistema. Le applicazioni dannose potrebbero recuperare una vasta gamma di informazioni private e protette di cui normalmente non dovrebbero mai avere bisogno."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"recupero dei contenuti della schermata"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Consente all\'applicazione di recuperare i contenuti della finestra attiva. Le applicazioni dannose potrebbero recuperare l\'intero contenuto della finestra ed esaminare tutto il testo, tranne le password."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"attivazione temporanea dell\'accessibilità"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Consente a un\'applicazione di attivare temporaneamente l\'accessibilità sul dispositivo. Le applicazioni dannose potrebbero attivare l\'accessibilità senza il consenso dell\'utente."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recupero di informazioni sulle finestre"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Consente a un\'applicazione di recuperare informazioni sulle finestre dalla gestione finestre. Le applicazioni dannose potrebbero recuperare informazioni destinate all\'utilizzo da parte del sistema interno."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtro eventi"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Consenti"</string>
<string name="sms_control_no" msgid="625438561395534982">"Nega"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> vorrebbe inviare un messaggio a <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Potrebbero essere addebitati dei costi sul tuo account mobile."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Verranno addebitati dei costi sul tuo account mobile."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Invia"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Annulla"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Memorizza la mia scelta"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Consenti sempre"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Non consentire mai"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Scheda SIM rimossa"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefono"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Cuffie audio"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altoparlanti dock"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fine"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Uscita media"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Schermo incorporato"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Schermo HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay n. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Inserisci il PIN della SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Inserisci PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Inserisci la password"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Codice PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nuovo codice PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Sblocco scheda SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codice PIN errato."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Il PIN deve essere di 4-8 numeri."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Digita un PUK formato da almeno 8 numeri."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Inserisci il PUK e il nuovo codice PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Il PUK digitato è errato."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Troppi tentativi di inserimento della sequenza"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Per sbloccare, accedi con il tuo account Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nome utente (email)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Accedi"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome utente o password non validi."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Hai dimenticato il nome utente o la password?"\n"Visita "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Verifica…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Hai digitato il tuo PIN <xliff:g id="NUMBER_0">%d</xliff:g> volte in modo errato. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Hai digitato la tua password <xliff:g id="NUMBER_0">%d</xliff:g> volte in modo errato. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. "\n\n"Riprova tra <xliff:g id="NUMBER_1">%d</xliff:g> secondi."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il tablet con un account email."\n\n" Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono con un account email."\n\n" Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Aumentare il volume oltre il livello di sicurezza?"\n"Ascoltare musica ad alto volume per lunghi periodi potrebbe danneggiare l\'udito."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Accessibilità attivata."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 95a938a..ebddba4 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"מאפשר ליישום לאחזר את המצב הפנימי של המערכת. יישומים זדוניים עלולים לאחזר מגוון רחב של מידע אישי ונתוני אבטחה, שעל פי רוב לעולם לא יזדקקו להם."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"אחזר את תוכן המסך"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"מאפשר ליישום לאחזר את התוכן של החלון הפעיל. יישומים זדוניים עלולים לאחזר את תוכן החלון כולו ולבחון את כל הטקסט שבו, מלבד סיסמאות."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"הפעלת נגישות זמנית"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"מאפשר ליישום להפעיל באופן זמני נגישות במכשיר. יישומים זדוניים עלולים לאפשר נגישות ללא הסכמת משתמש."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"אחזר מידע חלון"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"מאפשר ליישום לאחזר מידע לגבי החלונות ממנהל החלונות. יישומים זדוניים עשויים לאחזר מידע המיועד לשימוש מערכת פנימי."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"סנן אירועים"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"אפשר"</string>
<string name="sms_control_no" msgid="625438561395534982">"דחה"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> רוצה לשלוח הודעה אל <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"הדבר עשוי לגרום לחיובים בחשבון שלך לנייד."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"הדבר יגרום לחיובים בחשבון שלך לנייד."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"הפעולה "<font fgcolor="#ffffb060">"עשויה לגרום לחיובים"</font>" בחשבון המכשיר הנייד שלך."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"הפעולה תגרום לחיובים בחשבון המכשיר הנייד שלך."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"שלח"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"בטל"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"זכור את הבחירה שלי"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ניתן לשנות זאת מאוחר יותר ב\'הגדרות\' > \'יישומים\'"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"אפשר תמיד"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"לעולם אל תאפשר"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"כרטיס ה-SIM הוסר"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"טלפון"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"אוזניות"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"רמקולים של מעגן"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"אודיו HDMI"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"מערכת"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"אודיו Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"סיום"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"פלט מדיה"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"סורק..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"מתחבר..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"זמין"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"לא זמין"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"מסך מובנה"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"מסך HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"שכבת על #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"הזן מספר PIN ל-SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"הזן מספר PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"הזן את הסיסמה"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"קוד PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"קוד PIN חדש"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"הזן את קוד ה-PIN הרצוי"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"אשר את קוד ה-PIN הרצוי"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"מבטל נעילה של כרטיס SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"קוד PIN שגוי."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"הקלד PUK באורך 8 ספרות או יותר."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"הקלד את קוד ה-PUK וקוד ה-PIN החדש"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"ה-PUK שהקלדת שגוי."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"קוד PUK צריך להיות בן 8 ספרות או יותר."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"קודי ה-PIN אינם תואמים"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ניסיונות רבים מדי לשרטוט קו ביטול נעילה."</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"שם משתמש (דוא\"ל)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"היכנס"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"שם משתמש או סיסמה לא חוקיים."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"שכחת את שם המשתמש או הסיסמה?"\n"בקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"בודק…"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"משחרר כרטיס SIM ..."</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. "\n\n"נסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון דוא\"ל."\n\n"נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"האם להעלות את עוצמת הקול מעל לרמה הבטוחה?"\n"האזנה בעוצמת קול גבוהה למשך זמן ארוך עלולה לפגוע בשמיעה."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"נגישות הופעלה."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 61c925d..f0645d6 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"システムの内部状態の取得をアプリに許可します。この許可を悪意のあるアプリに利用されると、通常必要ないはずの各種の非公開/機密情報が取得される恐れがあります。"</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"画面のコンテンツの取得"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"作業中のウィンドウの内容を取得することをアプリに許可します。この許可を悪意のあるアプリに利用されると、ウィンドウの内容全体が取得されてパスワード以外のテキストがすべてチェックされる恐れがあります。"</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ユーザー補助を一時的に有効にする"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"この端末のユーザー補助を一時的に有効にすることをアプリに許可します。悪意のあるアプリはユーザーの同意を得ずにユーザー補助を有効にする場合があります。"</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ウィンドウ情報の取得"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"ウィンドウマネージャからウィンドウに関する情報を取得することをアプリに許可します。悪意のあるアプリが内部システムの利用を目的に情報を取得する恐れがあります。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"イベントのフィルタリング"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"許可する"</string>
<string name="sms_control_no" msgid="625438561395534982">"許可しない"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>が、<b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>にメッセージを送信しようとしています。"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"モバイルアカウントへの請求が発生する場合があります。"</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"モバイルアカウントへの請求が発生します。"</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"送信"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"キャンセル"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"この選択を保存"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"常に許可する"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"許可しない"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIMカードが取り外されました"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"携帯端末"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ヘッドホン"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ホルダーのスピーカー"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMIオーディオ"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"システム"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完了"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"メディア出力"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"内蔵スクリーン"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI画面"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"オーバーレイ第<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PINを入力"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"PINを入力"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"パスワードを入力"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUKコード"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"新しいPINコード"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIMカードのロック解除中…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PINコードが正しくありません。"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"PINは4~8桁の数字で入力してください。"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"PUKは8桁以上で入力してください。"</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUKと新しいPINコードを入力"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"入力したPUKは正しくありません。"</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"パターンの入力を所定の回数以上間違えました。"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"ロックを解除するにはGoogleアカウントでログインしてください。"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"ユーザー名(メール)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"ログイン"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"ユーザー名またはパスワードが無効です。"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ユーザー名またはパスワードを忘れた場合は"\n" "<b>"google.com/accounts/recovery"</b>" にアクセスしてください。"</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"チェックしています…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PINの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"パスワードの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。"\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>秒以内にもう一度お試しください。"</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、タブレットのロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。"\n\n"<xliff:g id="NUMBER_2">%d</xliff:g>秒以内にもう一度お試しください。"</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"安全レベルを超えるまで音量を上げますか?"\n"大音量で長時間聞き続けると、聴力を損なう恐れがあります。"</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"ユーザー補助が有効になりました。"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 6285bc2..7fe0357 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"앱이 시스템의 내부 상태를 검색할 수 있도록 허용합니다. 이 경우 악성 앱이 이 기능을 이용하여 일반적으로 필요하지 않은 다양한 개인정보와 보안정보를 검색할 수 있습니다."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"화면 콘텐츠 검색"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"앱이 활성 창의 콘텐츠를 검색할 수 있도록 허용합니다. 이 경우 악성 앱이 전체 창의 콘텐츠를 검색하여 비밀번호를 제외한 모든 텍스트를 살펴볼 수 있습니다."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"일시적인 접근성 사용"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"애플리케이션이 기기에서 일시적으로 접근성을 사용하도록 허용합니다. 이 경우 악성 앱이 사용자의 동의 없이 접근성을 사용할 수 있습니다."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"창 관련 정보 가져오기"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"애플리케이션이 Window Manager에서 창 관련 정보를 가져오도록 허용합니다. 이 경우 악성 앱이 내부 시스템에서만 사용하도록 되어 있는 정보를 가져올 수 있습니다."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"일정 필터링"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"허용"</string>
<string name="sms_control_no" msgid="625438561395534982">"거부"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>(으)로 메시지를 보내시겠습니까?"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"모바일 계정에 요금이 청구됩니다."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"모바일 계정에 요금이 청구됩니다."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"전송"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"취소"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"내 선택사항 기억"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"항상 허용"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"허용 안함"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM 카드 제거됨"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"휴대전화"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"헤드폰"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"도크 스피커"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI 오디오"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"시스템"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"블루투스 오디오"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"완료"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"미디어 출력"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"기본으로 제공되는 화면"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 화면"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>번째 오버레이"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN 입력"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"PIN 입력"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"비밀번호 입력"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK 코드"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"새 PIN 코드"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM 카드 잠금해제 중..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 코드가 잘못되었습니다."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4~8자리 숫자로 된 PIN을 입력하세요."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"8자리 이상의 숫자 PUK를 입력합니다."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK 및 새 PIN 코드 입력"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"입력한 PUK가 올바르지 않습니다."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"패턴 시도 횟수가 너무 많음"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"잠금해제하려면 Google 계정으로 로그인하세요."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"사용자 이름(이메일)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"로그인"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"사용자 이름 또는 비밀번호가 잘못되었습니다."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"사용자 이름이나 비밀번호를 잊어버렸습니까?"\n<b>"google.com/accounts/recovery"</b>" 페이지를 방문하세요."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"확인 중…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 입력했습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"비밀번호를 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 입력했습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 태블릿을 잠금해제해야 합니다."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 휴대전화를 잠금해제해야 합니다."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"안전한 수준 이상으로 볼륨을 높이시겠습니까?"\n"높은 볼륨으로 장시간 청취하면 청력에 손상이 올 수 있습니다."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"접근성을 사용 설정했습니다."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index ffe374e..119d265 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Leidžiama programai nuskaityti vidinę sistemos būseną. Kenkėjiškos programos gali nuskaityti daug įvairios privačios ir saugios informacijos, kurios paprastai joms niekada neturėtų reikėti."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"nuskaityti ekrano turinį"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Leidžiama programai nuskaityti aktyvaus lango turinį. Kenkėjiškos programos gali bandyti išgauti viso lango turinį ir tirti visą jo tekstą, išskyrus slaptažodžius."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"laikinai įgalinti pritaikymą neįgaliesiems"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Leidžiama programai laikinai įgalinti pritaikymą neįgaliesiems įrenginyje. Kenkėjiškos programos pritaikymą neįgaliesiems gali įgalinti be naudotojo sutikimo."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"gauti lango informaciją"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Leidžiama programai iš langų tvarkytuvės gauti informaciją apie langus. Kenkėjiškos programos gali gauti informaciją, kuri skirta naudoti sistemos viduje."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrų įvykiai"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Leisti"</string>
<string name="sms_control_no" msgid="625438561395534982">"Uždrausti"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> norėtų išsiųsti pranešimą šiuo adresu: <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Dėl to gali būti apmokestinta paskyra mobiliesiems."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Dėl to bus apmokestinta paskyra mobiliesiems."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Siųsti"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Atšaukti"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Atsiminti mano pasirinkimą"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Visada leisti"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Niekada neleisti"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM kortelė pašalinta"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefonas"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ausinės"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doko garsiakalbiai"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI garsas"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"„Bluetooth“ garsas"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Atlikta"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medijos išvestis"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Integruotas ekranas"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ekranas"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Perdanga nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Įveskite SIM PIN kodą"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Įveskite PIN kodą"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Įveskite slaptažodį"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK kodas"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Naujas PIN kodas"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Atrakinama SIM kortelė…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netinkamas PIN kodas."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Įveskite PIN kodą, sudarytą iš 4–8 skaičių."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Įveskite 8 skaitmenų ar ilgesnį PUK kodą."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Įveskite PUK ir naują PIN kodus"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Įvestas PUK kodas netinkamas."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Per daug atrakinimo piešinių bandymų"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Jei norite atrakinti, prisijunkite naudodami „Google“ paskyrą."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Naudotojo vardas (el. paštas)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Prisijungti"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Netinkamas naudotojo vardas ar slaptažodis."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Pamiršote naudotojo vardą ar slaptažodį?"\n"Apsilankykite šiuo adresu: "<b>"google.com/accounts/recovery"</b></string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Tikrinama…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodą netinkamai įvedėte <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Neteisingai įvedėte slaptažodį <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. "\n\n"Bandykite dar kartą po <xliff:g id="NUMBER_1">%d</xliff:g> sek."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti planšetinį kompiuterį naudodami „Google“ prisijungimo duomenis."\n\n" Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti telefoną naudodami „Google“ prisijungimo duomenis."\n\n" Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Padidinti garsumą viršijant saugų lygį?"\n"Ilgai klausantis dideliu garsumu gali sutrikti klausa."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Pritaikymas neįgaliesiems įgalintas."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index d1266c6..09e2c04 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Ļauj lietotnei izgūt sistēmas iekšējo statusu. Ļaunprātīgas lietotnes var izgūt dažādu privātu un drošu informāciju, kas parasti tām nav nepieciešama."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"Ekrāna satura iegūšana"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ļauj lietotnei izgūt aktīva loga saturu. Ļaunprātīgas lietotnes var izgūt visu loga saturu un pārbaudīt visu tā tekstu, izņemot paroles."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Īslaicīga pieejamības režīma iespējošana"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ļauj lietojumprogrammai īslaicīgi ierīcē iespējot pieejamības režīmu. Ļaunprātīgas lietotnes var iespējot pieejamības režīmu bez lietotāja atļaujas."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"Izgūt informāciju par logiem"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ļauj lietojumprogrammai no logu pārvaldnieka izgūt informāciju par logiem. Ļaunprātīgas lietotnes var izgūt informāciju, kas ir paredzēta iekšējai izmantošanai sistēmā."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Filtrēt notikumus"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Atļaut"</string>
<string name="sms_control_no" msgid="625438561395534982">"Aizliegt"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> vēlas sūtīt īsziņu adresātam <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"No jūsu mobilās ierīces konta var tikt iekasēta maksa."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"No jūsu mobilās ierīces konta tiks iekasēta maksa."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Sūtīt"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Atcelt"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Atcerēties manu izvēli"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Vienmēr atļaut"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Neatļaut nekad"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM karte ir izņemta."</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Tālrunis"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Austiņas"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doka skaļruņi"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI audio"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistēma"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gatavs"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Multivides izeja"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Iebūvēts ekrāns"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI ekrāns"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Pārklājums Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ievadiet SIM kartes PIN"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ievadiet PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ievadiet paroli"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK kods"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Jauns PIN kods"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Notiek SIM kartes atbloķēšana..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN kods nav pareizs."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ievadiet PIN, kas sastāv no 4 līdz 8 cipariem."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Ievadiet PUK, kas sastāv no vismaz 8 cipariem."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Ievadiet PUK kodu un jaunu PIN kodu"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Ievadītais PUK nav pareizs."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Pārāk daudz kombinācijas mēģinājumu"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Lai atbloķētu, pierakstieties, izmantojot savu Google kontu."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Lietotājvārds (e-pasts)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Pierakstīties"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nederīgs lietotājvārds vai parole."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Vai aizmirsāt lietotājvārdu vai paroli?"\n"Apmeklējiet vietni "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Notiek pārbaude..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Jūs nepareizi ievadījāt PIN <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Jūs nepareizi ievadījāt paroli <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_1">%d</xliff:g> sekundēm."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem planšetdators būs jāatbloķē, izmantojot e-pasta kontu."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunis būs jāatbloķē, izmantojot e-pasta kontu."\n\n"Mēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Vai palielināt skaļumu virs drošības līmeņa?"\n"Ilgstoši klausoties skaņu lielā skaļumā, var tikt bojāta dzirde."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Pieejamības režīms ir iespējots."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index cf9ceb6..594a734 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Membenarkan apl untuk mendapatkan semula keadaan dalaman sistem. Apl hasad boleh mendapatkan pelbagai maklumat peribadi dan selamat yang biasanya tidak ia perlukan."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"dapatkan semula kandungan skrin"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Membenarkan apl untuk mendapatkan kandungan tetingkap aktif. Apl hasad boleh mengambil keseluruhan kandungan tetingkap dan memeriksa semua teks kecuali kata laluan."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dayakan kebolehcapaian untuk sementara"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Membenarkan aplikasi untuk mendayakan kebolehcapaian untuk sementara pada peranti. Apl hasad mungkin mendayakan kebolehcapaian tanpa izin pengguna."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"dapatkan maklumat tetingkap"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Membolehkan aplikasi mendapatkan maklumat tentang tetingkap dari pengurus tetingkap. Apl hasad boleh mendapatkan maklumat yang bertujuan untuk penggunaan sistem dalaman."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"tapis acara"</string>
@@ -324,7 +322,7 @@
<string name="permlab_internalSystemWindow" msgid="2148563628140193231">"memapaparkan tetingkap yang tiada kebenaran"</string>
<string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Membenarkan apl untuk membuat tetingkap yang dimaksudkan untuk digunakan oleh antara muka pengguna sistem dalaman. Bukan untuk digunakan oleh apl biasa."</string>
<string name="permlab_systemAlertWindow" msgid="3543347980839518613">"lukis atas apl lain"</string>
- <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Membenarkan aplikasi bertindih di atas aplikasi lain atau sebahagian daripada antara muka pengguna. Ia mungkin mengganggu penggunaan antara muk anda dalam sebarang aplikasi atau menukar apa yang anda rasa anda lihat dalam aplikasi lain."</string>
+ <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Membenarkan aplikasi bertindih di atas aplikasi lain atau sebahagian daripada antara muka pengguna. Ini mungkin mengganggu penggunaan antara muka anda dalam sebarang aplikasi atau menukar apa yang anda rasa anda lihat dalam aplikasi lain."</string>
<string name="permlab_setAnimationScale" msgid="2805103241153907174">"mengubah suai kelajuan animasi global"</string>
<string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Membenarkan apl menukar kelajuan animasi global (animasi yang lebih laju atau lebih perlahan) pada bila-bila masa sahaja."</string>
<string name="permlab_manageAppTokens" msgid="1286505717050121370">"urus token apl"</string>
@@ -559,7 +557,7 @@
<string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"akses tetapan Bluetooth"</string>
<string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Membenarkan apl mengkonfigurasikan tablet Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
<string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Membenarkan apl mengkonfigurasikan telefon Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
- <string name="permlab_accessWimaxState" msgid="4195907010610205703">"sambung dan nyahsambung dari WiMAX"</string>
+ <string name="permlab_accessWimaxState" msgid="4195907010610205703">"sambung dan putuskan sambungan WiMAX"</string>
<string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Membenarkan apl menentukan sama ada WiMaX didayakan dan maklumat tentang sebarang rangkaian WiMaX yang disambungkan."</string>
<string name="permlab_changeWimaxState" msgid="2405042267131496579">"Tukar keadaan WiMAX"</string>
<string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Membenarkan apl untuk menyambungkan tablet ke dan menyahsambungkan tablet dari rangkaian WiMaX."</string>
@@ -1094,18 +1092,22 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"Kepada:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Taipkan PIN yang diperlukan:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"Telefon akan dinyahsambung buat sementara dari Wi-Fi semasa disambungkan ke <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"Sambungan telefon ke Wi-Fi akan diputuskan buat sementara waktu semasa telefon bersambung ke <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
<string name="sms_control_title" msgid="7296612781128917719">"Menghantar mesej SMS"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> sedang menghantar banyak mesej SMS. Adakah anda mahu membenarkan apl ini terus menghantar mesej?"</string>
<string name="sms_control_yes" msgid="3663725993855816807">"Benarkan"</string>
<string name="sms_control_no" msgid="625438561395534982">"Nafikan"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ingin menghantar mesej kepada <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Ini akan menyebabkan bayaran dikenakan kepada akaun mudah alih anda."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Ini akan menyebabkan bayaran dikenakan kepada akaun mudah alih anda."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Hantar"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Batal"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Ingat pilihan saya"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Sentiasa Benarkan"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Jangan Benarkan"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kad SIM dikeluarkan"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fon kepala"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Pembesar suara dok"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Output media"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Skrin Terbina Dalam"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Skrin HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Tindih #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Kata Laluan"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Kod PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Kod PIN Baharu"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kod PIN salah."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Taipkan PUK yang mempunyai 8 nombor atau lebih panjang."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Taip PUK dan kod PIN baharu"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Kod PUK yang anda taipkan tidak betul."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nama Pengguna (E-mel)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Log masuk"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau kata laluan tidak sah."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau kata laluan anda?"\n"Lawati"<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Menyemak…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah menaip PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah menaip kata laluan anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. "\n\n"Cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda."\n\n" Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda."\n\n" Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Tingkatkan kelantangan di atas tahap selamat?"\n"Mendengar pada kelantangan tinggi untuk tempoh yang panjang boleh merosakkan pendengaran anda."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Kebolehcapaian didayakan."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index d913062..cee82fc 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Lar appen hente ut informasjon om systemets indre tilstand. Ondsinnede apper kan hente et bredt spekter av privat og sikker informasjon som de vanligvis aldri burde ha behov for."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"hent av skjerminnhold"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Lar appen hente ut innholdet i det aktive vinduet. Ondsinnede apper kan hente ut hele vindusinnholdet og undersøke all teksten, med unntak av passord."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Aktiver tilgjengelighet midlertidig"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Lar en app midlertidig aktivere tilgjengelighet på enheten. Skadelige apper kan aktivere tilgjengelighet uten bekreftelse fra brukeren."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hente vindusinformasjon"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lar appen hente informasjon om vinduene fra vindusbehandleren. Skadelige apper kan hente informasjon som ikke er ment for intern systembruk."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrere hendelser"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Tillat"</string>
<string name="sms_control_no" msgid="625438561395534982">"Sperr"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ønsker å sende en melding til <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Dette kan medføre belastninger på mobilkontoen din."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Dette medfører kostnader på mobilkontoen din."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Send"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Avbryt"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Husk valget mitt"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Alltid tillat"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Aldri tillat"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kort er fjernet"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hodetelefoner"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dokkhøyttalere"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-lyd"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fullført"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieutgang"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Innebygd skjerm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skjerm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlegg #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Skriv inn PIN-koden for SIM-kortet"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Skriv inn PIN-koden"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Skriv inn passordet"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-kode"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Ny PIN-kode"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser opp SIM-kortet ..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Feil PIN-kode."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Skriv inn en PIN-kode på fire til åtte sifre."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Skriv inn en PUK-kode på åtte sifre eller mer."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Skriv inn PUK-koden og en ny PIN-kode"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK-koden du har skrevet inn er ikke riktig."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøk på tegning av mønster"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Logg deg på med Google-kontoen din for å låse opp."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Brukernavn (e-postadresse)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Logg på"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ugyldig brukernavn eller passord."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glemt brukernavnet eller passordet?"\n"Gå til "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrollerer …"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har oppgitt feil PIN-kode <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har tastet inn passordet ditt feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har tegnet opplåsningsmønsteret ditt feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. "\n\n"Prøv på nytt om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp nettbrettet via en e-postkonto."\n\n" Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp telefonen via en e-postkonto."\n\n" Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Vil du øke lydnivået over trygt nivå?"\n"Lytting på høyt lydnivå i lange perioder kan skade hørselen din."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Tilgjengelighet er aktivert."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 7ad60f1..41ab862 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Hiermee kan de app de interne systeemstatus ophalen. Schadelijke apps kunnen een grote hoeveelheid persoonlijke en beveiligde informatie ophalen die ze normaal gesproken nooit nodig hebben."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"scherminhoud ophalen"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Hiermee kan de app de inhoud van het actieve venster ophalen. Schadelijke apps kunnen de volledige inhoud van het venster ophalen en alle tekst bekijken, behalve wachtwoorden."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"toegankelijkheid tijdelijk inschakelen"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Een app toestaan toegankelijkheid tijdelijk in te schakelen op het apparaat. Schadelijke apps kunnen toegankelijkheid inschakelen zonder toestemming van de gebruiker."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"venstergegevens ophalen"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Toestaan dat een app gegevens over vensters kan ophalen uit vensterbeheer. Schadelijke apps kunnen gegevens ophalen die zijn bedoeld voor interne systeemfunctionaliteit."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"evenementen filteren"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Toestaan"</string>
<string name="sms_control_no" msgid="625438561395534982">"Weigeren"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> wil graag een bericht verzenden naar <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Er kunnen kosten in rekening worden gebracht op uw mobiele account."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Er worden kosten in rekening gebracht op uw mobiele account."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"Dit "<font fgcolor="#ffffb060">"kan leiden tot kosten"</font>" in uw mobiele account."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Dit leidt tot kosten in uw mobiele account."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Verzenden"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Annuleren"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Mijn keuze onthouden"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"U kunt dit later wijzigen in \'Instellingen\' > \'Apps\'"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Altijd toestaan"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nooit toestaan"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Simkaart verwijderd"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefoon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hoofdtelefoon"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockluidsprekers"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-audio"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Systeem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gereed"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"Scannen..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"Verbinden..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Beschikbaar"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"Niet beschikbaar"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ingebouwd scherm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-scherm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Geef de pincode van de simkaart op"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Pincode opgeven"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Wachtwoord invoeren"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-code"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nieuwe pincode"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"De simkaart is nu uitgeschakeld. Geef de PUK-code op om door te gaan. Neem contact op met de provider voor informatie."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Gewenste pincode opgeven"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Gewenste pincode bevestigen"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Simkaart ontgrendelen..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Onjuiste pincode."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Voer een pincode van 4 tot 8 cijfers in."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Typ een PUK-code die 8 cijfers of langer is."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Geef de PUK-code en de nieuwe pincode op"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"De PUK-code die u heeft ingevoerd, is onjuist."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"De PUK-code is minimaal acht nummers lang."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Geef de juiste PUK-code opnieuw op. Bij herhaalde pogingen wordt de simkaart permanent uitgeschakeld."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Pincodes komen niet overeen"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogingen"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Als u wilt ontgrendelen, moet u zich aanmelden bij uw Google-account."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Gebruikersnaam (e-mail)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Aanmelden"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ongeldige gebruikersnaam of wachtwoord."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Bent u uw gebruikersnaam of wachtwoord vergeten?"\n"Ga naar "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Controleren…"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"Simkaart ontgrendelen…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"U heeft uw pincode <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getypt. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"U heeft uw wachtwoord <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getypt. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. "\n\n"Probeer het over <xliff:g id="NUMBER_1">%d</xliff:g> seconden opnieuw."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw tablet te ontgrendelen via een e-mailaccount."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw telefoon te ontgrendelen via een e-mailaccount."\n\n" Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Wilt u het volume verhogen tot boven het aanbevolen geluidsniveau?"\n"Te lang luisteren op een te hoog volume kan leiden tot gehoorbeschadiging."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Toegankelijkheid ingeschakeld."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 19d42ab..b8d2d1c 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Pozwala aplikacji na pobieranie wewnętrznego stanu systemu. Złośliwe aplikacje mogą pobrać szereg prywatnych i zabezpieczonych informacji, które normalnie nie są im potrzebne."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"pobieranie zawartości ekranu"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Pozwala aplikacji na pobieranie zawartości aktywnego okna. Złośliwe aplikacje mogą pobrać całą zawartość okna i przeanalizować znajdujący się w nim tekst z wyjątkiem haseł."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"tymczasowo włącz ułatwienia dostępu"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umożliwia aplikacji tymczasowe włączanie ułatwień dostępu na urządzeniu. Złośliwe aplikacje mogą je włączać bez zgody użytkownika."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pobieranie informacji o oknach"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Zezwala aplikacji na pobieranie informacji o oknach z menedżera okien. Złośliwe aplikacje mogą pobierać informacje przeznaczone do użytku wewnętrznego w systemie."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrowanie zdarzeń"</string>
@@ -1102,11 +1100,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Pozwól"</string>
<string name="sms_control_no" msgid="625438561395534982">"Odmów"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> chce wysłać wiadomość do <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Może to spowodować naliczenie opłat na koncie telefonu komórkowego."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Spowoduje to naliczenie opłat na koncie telefonu komórkowego."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Wyślij"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Anuluj"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Zapamiętaj mój wybór"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Zawsze zezwalaj"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nigdy nie zezwalaj"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM wyjęta"</string>
@@ -1366,11 +1368,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Słuchawki"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Głośniki stacji dokującej"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Dźwięk przez HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Dźwięk Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotowe"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Wyjście multimediów"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Wbudowany ekran"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ekran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Nakładka nr <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1385,14 +1396,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Podaj PIN karty SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Podaj PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Wpisz hasło"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nowy PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokowuję kartę SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nieprawidłowy PIN."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Wpisz PIN o długości od 4 do 8 cyfr."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Wpisz PUK składający się z co najmniej 8 cyfr."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Wpisz PUK i nowy PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Podany PUK jest nieprawidłowy."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zbyt wiele prób narysowania wzoru"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Aby odblokować, zaloguj się na konto Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nazwa użytkownika (e-mail)"</string>
@@ -1400,7 +1418,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Zaloguj się"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nieprawidłowa nazwa użytkownika lub hasło."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nie pamiętasz nazwy użytkownika lub hasła?"\n"Wejdź na "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Sprawdzam…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowy PIN. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> wpisałeś nieprawidłowe hasło. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> narysowałeś nieprawidłowy wzór odblokowania. "\n\n"Spróbuj ponownie za <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
@@ -1411,12 +1430,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie tabletu przy użyciu danych logowania na konto Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie telefonu przy użyciu danych logowania na konto Google."\n\n" Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Chcesz ustawić głośność powyżej bezpiecznego poziomu?"\n"Słuchanie przy dużym poziomie głośności przez dłuższy czas może doprowadzić do uszkodzenia słuchu."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Włączono ułatwienia dostępu."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index afbcd42..647e2fb 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -156,7 +156,7 @@
<string name="global_action_power_off" msgid="4471879440839879722">"Desligar"</string>
<string name="global_action_bug_report" msgid="7934010578922304799">"Relatório de erros"</string>
<string name="bugreport_title" msgid="2667494803742548533">"Criar um relatório de erros"</string>
- <string name="bugreport_message" msgid="398447048750350456">"Isto irá recolher informações sobre o estado atual do seu dispositivo para enviar através de uma mensagem de email. Demorará um pouco desde o início do relatório de erro até que este se encontre pronto para ser enviado. Aguarde um pouco."</string>
+ <string name="bugreport_message" msgid="398447048750350456">"Irá recolher informações sobre o estado atual do seu dispositivo para enviar através de uma mensagem de email. Demorará algum tempo até que o relatório de erro esteja pronto para ser enviado. Aguarde um pouco."</string>
<string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Modo silencioso"</string>
<string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Som desactivado"</string>
<string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"O som está activado"</string>
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permite que a aplicação obtenha o estado interno do sistema. As aplicações maliciosas podem obter uma ampla variedade de dados privados e seguros de que, normalmente, nunca devem necessitar."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"obter o conteúdo do ecrã"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que a aplicação obtenha o conteúdo da janela ativa. As aplicações maliciosas podem obter todo o conteúdo da janela e examinar todo o texto, exceto as palavras-passe."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"acessibilidade ativada temporariamente"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que uma aplicação ative temporariamente a acessibilidade no dispositivo. As aplicações maliciosas podem ativar a acessibilidade sem o consentimento do utilizador."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"obter informações da janela"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que uma aplicação obtenha informações sobre as janelas a partir do gestor de janelas. Aplicações maliciosas podem obter informações que se destinam à utilização interna do sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
<string name="sms_control_no" msgid="625438561395534982">"Recusar"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> gostaria de enviar uma mensagem para <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Isto poderá resultar em encargos na sua conta de telemóvel."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Isto resultará em encargos na sua conta de telemóvel."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Enviar"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancelar"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Memorizar a minha escolha"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Permitir Sempre"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nunca Permitir"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telemóvel"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Auscultadores"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Altif. estação ancoragem"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Áudio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de som multimédia"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ecrã Integrado"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ecrã HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduzir PIN do cartão SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Introduzir PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Introduzir Palavra-passe"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Código PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Novo código PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"A desbloquear cartão SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduza um PIN entre 4 e 8 números."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Introduza um PUK que tenha 8 ou mais algarismos."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Introduzir PUK e o novo código PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"O PUK que introduziu não está correto."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiadas tentativas para desenhar sequência"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, inicie sessão com a sua Conta do Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de utilizador (email)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Iniciar sessão"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome de utilizador ou palavra-passe inválidos."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Esqueceu-se do nome de utilizador ou da palavra-passe?"\n"Aceda a "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"A verificar…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Escreveu o PIN incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Escreveu a palavra-passe incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Desenhou a sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente dentro de <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o tablet através de uma conta de email."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email."\n\n" Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Aumentar o volume acima do nível de segurança?"\n"Ouvir em volume alto durante longos períodos de tempo poderá prejudicar a sua audição."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Acessibilidade ativada."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index cbf2dfe..5b6fd94 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permite que o aplicativo recupere o estado interno do sistema. Aplicativos maliciosos podem obter uma grande variedade de informações privadas e seguras que eles normalmente não precisariam."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"recuperar conteúdo da tela"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que o aplicativo recupere o conteúdo da janela ativa. Aplicativos maliciosos podem recuperar o conteúdo da janela inteira e examinar todo o texto, exceto as senhas."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ativar temporariamente a acessibilidade"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que um aplicativo ative temporariamente a acessibilidade no dispositivo. Aplicativos maliciosos podem ativar a acessibilidade sem o consentimento do usuário."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar informações de janelas"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que o aplicativo recupere informações sobre as janelas do gerenciador de janelas. Aplicativos mal-intencionados podem recuperar informações destinadas ao uso interno do sistema."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Permitir"</string>
<string name="sms_control_no" msgid="625438561395534982">"Negar"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> deseja enviar uma mensagem para <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Isto pode gerar cobranças em sua conta de celular."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Isto poderá gerar cobranças em sua conta de celular."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Enviar"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Cancelar"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Lembrar minha escolha"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Sempre permitir"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nunca permitir"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Cartão SIM removido"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefone"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fones de ouvido"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Alto-falantes do dock"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Áudio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de mídia"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Tela integrada"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Tela HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição nº <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Digite o PIN do cartão SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Digite o PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Digite a senha"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Código PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Novo código PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando o cartão SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Digite um PIN com quatro a oito números."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Digite um PUK com oito números ou mais."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Insira o PUK e o novo código PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"O PUK digitado está incorreto."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Muitas tentativas de padrão"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Para desbloquear, faça login usando sua Conta do Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nome de usuário (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Fazer login"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nome de usuário ou senha inválidos."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Esqueceu seu nome de usuário ou senha?"\n"Acesse "<b>"google.com.br/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Verificando..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Você digitou seu PIN incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Você digitou sua senha incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. "\n\n"Tente novamente em <xliff:g id="NUMBER_1">%d</xliff:g> segundos."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear seu tablet."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear."\n\n" Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Aumentar o volume acima do nível seguro?"\n"A audição em volume elevado por períodos longos pode prejudicar sua audição."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Acessibilidade ativada."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 1241346..4ca5dd3 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -1711,9 +1711,9 @@
<skip />
<!-- no translation found for sms_short_code_confirm_message (1645436466285310855) -->
<skip />
- <!-- no translation found for sms_short_code_details (4992814738863678373) -->
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
<skip />
- <!-- no translation found for sms_premium_short_code_details (4291752905667807485) -->
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
<skip />
<!-- no translation found for sms_short_code_confirm_allow (4458878637111023413) -->
<skip />
@@ -1721,6 +1721,8 @@
<skip />
<!-- no translation found for sms_short_code_remember_choice (5289538592272218136) -->
<skip />
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<!-- no translation found for sms_short_code_confirm_always_allow (3241181154869493368) -->
<skip />
<!-- no translation found for sms_short_code_confirm_never_allow (446992765774269673) -->
@@ -2180,7 +2182,7 @@
<skip />
<!-- no translation found for default_audio_route_name_dock_speakers (6240602982276591864) -->
<skip />
- <!-- no translation found for default_audio_route_name_hdmi (7986404173839007682) -->
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
<skip />
<!-- no translation found for default_audio_route_category_name (3722811174003886946) -->
<skip />
@@ -2190,6 +2192,14 @@
<skip />
<!-- no translation found for media_route_button_content_description (5758553567065145276) -->
<skip />
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<!-- no translation found for display_manager_built_in_display_name (2583134294292563941) -->
<skip />
<!-- no translation found for display_manager_hdmi_display_name (1555264559227470109) -->
@@ -2218,9 +2228,11 @@
<skip />
<!-- no translation found for kg_password_instructions (5753646556186936819) -->
<skip />
- <!-- no translation found for kg_puk_enter_puk_hint (5183097160254244459) -->
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
<skip />
- <!-- no translation found for kg_puk_enter_pin_hint (597821135578014901) -->
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
<skip />
<!-- no translation found for kg_sim_unlock_progress_dialog_message (8950398016976865762) -->
<skip />
@@ -2228,11 +2240,11 @@
<skip />
<!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) -->
<skip />
- <!-- no translation found for kg_invalid_sim_puk_hint (5216603185442368307) -->
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
<skip />
- <!-- no translation found for kg_sim_puk_recovery_hint (5577753137718442566) -->
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
<skip />
- <!-- no translation found for kg_invalid_puk (5809955359950817326) -->
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
<skip />
<!-- no translation found for kg_login_too_many_attempts (6486842094005698475) -->
<skip />
@@ -2248,7 +2260,7 @@
<skip />
<!-- no translation found for kg_login_account_recovery_hint (5690709132841752974) -->
<skip />
- <!-- no translation found for kg_login_checking_password (8849589033659332457) -->
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
<skip />
<!-- no translation found for kg_too_many_failed_pin_attempts_dialog_message (8276745642049502550) -->
<skip />
@@ -2270,12 +2282,12 @@
<skip />
<!-- no translation found for safe_media_volume_warning (7382971871993371648) -->
<skip />
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
<!-- no translation found for accessibility_enabled (1381972048564547685) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index b5d4e59..eb5f23e 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Permite aplicaţiei să preia starea internă a sistemului. Aplicaţiile rău intenţionate pot să preia o gamă variată de informaţii private şi securizate, de care în mod normal nu ar avea nevoie niciodată."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"preia conţinutul de pe ecran"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite aplicaţiei să preia conţinutul ferestrei active. Aplicaţiile rău intenţionate pot să preia întregul conţinut al ferestrei şi să examineze integral textul acesteia, cu excepţia parolelor."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activare temporară mod accesibilitate"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite unei aplicaţii să activeze temporar modul Accesibilitate pe gadget. Aplicaţiile rău intenţionate pot activa modul Accesibilitate fără consimţământul utilizatorului."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"preluare informaţii despre ferestre"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite unei aplicaţii să preia informaţii despre ferestrele din managerul de ferestre. Aplicaţiile rău intenţionate pot prelua informaţii care sunt destinate utilizării sistemului intern."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrare evenimente"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Permiteţi"</string>
<string name="sms_control_no" msgid="625438561395534982">"Refuzaţi"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> intenţionează să trimită un mesaj la <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Aceasta poate genera costuri în contul dvs. mobil."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Aceasta va genera costuri în contul dvs. mobil."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Trimiteţi"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Anulaţi"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Doresc să se reţină opţiunea"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Permiteţi întotdeauna"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nu permiteţi niciodată"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Card SIM eliminat"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Căşti"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Difuz. dispozit. andocare"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Ieşire audio HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminat"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Rezultate media"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Ecran încorporat"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Ecran HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Suprapunerea <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduceţi codul PIN al cardului SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Introduceţi codul PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Introduceţi parola"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Codul PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Noul cod PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Introduceţi un cod PUK format din 8 cifre sau mai mult."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Introduceţi codul PUK şi noul cod PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Codul PUK introdus nu este corect."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Pentru a debloca, conectaţi-vă cu Contul dvs. Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Nume de utilizator (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Conectaţi-vă"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Nume de utilizator sau parolă nevalide."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Aţi uitat numele de utilizator sau parola?"\n"Accesaţi "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Se verifică..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Aţi introdus incorect codul PIN de <xliff:g id="NUMBER_0">%d</xliff:g> ori."\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Aţi introdus incorect parola de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. "\n\n"Încercaţi din nou peste <xliff:g id="NUMBER_1">%d</xliff:g> (de) secunde."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi tableta cu ajutorul unui cont de e-mail."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi telefonul cu ajutorul unui cont de e-mail."\n\n" Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Ridicaţi volumul mai sus de nivelul sigur?"\n"Ascultarea la volum ridicat pe perioade lungi de timp vă poate afecta auzul."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Modul Accesibilitate a fost activat."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 4900df7..04489e4 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Приложение сможет получать данные о внутреннем состоянии системы. Вредоносные программы смогут получать личную и защищенную информацию, к которой у них не должно быть доступа."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"получать доступ к содержанию экрана"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Приложение сможет получать контент активного окна. Вредоносные программы смогут перехватывать такой контент и анализировать любой текст, кроме паролей."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"временно включать специальные возможности"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Приложение сможет временно включать на устройстве специальные возможности. Вредоносные приложения смогут включать их без вашего ведома."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"доступ к информации в окне"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Открывает приложению доступ к информации из диспетчера окон. Обратите внимание, что вредоносное ПО может получить доступ к некоторой системной информации устройства."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"Фильтрация событий"</string>
@@ -752,7 +750,7 @@
<string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Неверный PIN-код."</string>
<string name="keyguard_label_text" msgid="861796461028298424">"Для разблокировки нажмите \"Меню\", а затем 0."</string>
<string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Экстренная служба"</string>
- <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Сеть не найдена."</string>
+ <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Сеть не найдена"</string>
<string name="lockscreen_screen_locked" msgid="7288443074806832904">"Экран заблокирован."</string>
<string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Нажмите \"Меню\", чтобы разблокировать экран или вызвать службу экстренной помощи."</string>
<string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Для разблокировки нажмите \"Меню\"."</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Разрешить"</string>
<string name="sms_control_no" msgid="625438561395534982">"Запретить"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"Приложение <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> собирается отправить сообщение на адрес <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"С вашего мобильного счета будут списаны средства."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"С вашего мобильного счета могут быть списаны средства."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Отправить"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Отмена"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Запомнить выбранный телефон"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Всегда разрешать"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Не разрешать"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта удалена"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Наушники"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Динамики док-станции"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-аудио"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Воспроизведение звука через Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Перенаправлять поток мультимедиа"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Встроенный экран"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Экран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наложение № <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Введите PIN-код SIM-карты"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Введите PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Введите пароль"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-код"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Новый PIN-код"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблокировка SIM-карты…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неверный PIN-код."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введите PIN-код (от 4 до 8 цифр)."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Введите PUK-код из 8 или более цифр."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Введите PUK-код и новый PIN-код"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Введен неверный PUK-код."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Слишком много попыток ввода графического ключа"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Чтобы разблокировать устройство, войдите в свой аккаунт Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Имя пользователя (эл. почта)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Войти"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Неверное имя пользователя или пароль."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыли имя пользователя или пароль?"\n"Перейдите на страницу "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Проверка…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали PIN-код. "\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали пароль."\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ."\n\n"Повтор через <xliff:g id="NUMBER_1">%d</xliff:g> сек."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки планшетного ПК потребуется войти в аккаунт Google."\n\n"Повтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки телефона потребуется войти в аккаунт Google."\n\n"Повтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Увеличить громкость до небезопасного уровня?"\n"Долговременное прослушивание на такой громкости может повредить слух."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Специальные возможности включены."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index dbe7b9e..cdae9ba 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Umožňuje aplikácii načítať interný stav systému. Škodlivé aplikácie môžu načítať široký rozsah súkromných a zabezpečených informácií, ktoré by obvykle nemali nikdy potrebovať."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"načítanie obsahu obrazovky"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Umožňuje aplikácii načítať obsah aktívneho okna. Škodlivé aplikácie môžu získať celý obsah okna a preskúmať celý jeho text okrem hesiel."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dočasné povolenie zjednodušenia ovládania"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umožňuje aplikácii dočasne povoliť zjednodušenie ovládania v zariadení. Škodlivé aplikáciu môžu zjednodušenie ovládania povoliť bez súhlasu používateľa."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"načítanie informácií o oknách"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikácii načítať informácie o oknách zo správcu okien. Škodlivé aplikácie môžu načítať informácie, ktoré sú určené pre interné využitie systému."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrovanie udalostí"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Povoliť"</string>
<string name="sms_control_no" msgid="625438561395534982">"Odmietnuť"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> chce odoslať správu na adresu <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"To môže spôsobiť, že sa na váš mobilný účet budú účtovať poplatky."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"To spôsobí, že sa na váš mobilný účet budú účtovať poplatky."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Odoslať"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Zrušiť"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Zapamätať si voľbu"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Vždy povoliť"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nikdy nepovoliť"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Karta SIM bola odobraná"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefón"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slúchadlá"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Reproduktory doku"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Zvuk HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Vstavaná obrazovka"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Obrazovka HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrytie č. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Zadajte kód PIN karty SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Zadajte kód PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Zadajte heslo"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Kód PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nový kód PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Prebieha odomykanie karty SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávny kód PIN."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadajte kód PIN s dĺžkou 4 až 8 číslic."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Zadajte kód PUK, ktorý má 8 alebo viac číslic."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Zadajte kód PUK a nový kód PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Zadaný kód PUK nie je správny."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Príliš veľa pokusov o nakreslenie vzoru"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Ak chcete telefón odomknúť, prihláste sa pomocou svojho účtu Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Používateľské meno (e-mail)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Prihlásiť sa"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Neplatné používateľské meno alebo heslo."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Zabudli ste svoje používateľské meno alebo heslo?"\n" Navštívte stránky "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Prebieha kontrola..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste zadali nesprávny kód PIN. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste zadali nesprávne heslo. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste použili nesprávny bezpečnostný vzor. "\n\n"Skúste to znova o <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po ďalších <xliff:g id="NUMBER_1">%d</xliff:g> neúspešných pokusoch sa zobrazí výzva na odomknutie tabletu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e-mailového účtu."\n\n" Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Chcete zvýšiť hlasitosť nad bezpečnú úroveň?"\n"Dlhodobé počúvanie pri vysokej hlasitosti môže viesť k poškodeniu vášho sluchu."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Zjednodušenie ovládania je povolené."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 48e74e6..4c4ee85 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Programu omogoča prejemanje notranjega stanja sistema. Zlonamerni programi lahko na ta način dobijo različne zasebne in varnostne podatke, ki jih običajno ne potrebujejo."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"prenos vsebine zaslona"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Programu omogoča dostop do vsebine aktivnega okna. Zlonamerni programi lahko dobijo vso vsebino okna in pregledajo njeno besedilo razen gesel."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"začasno omogoči pripomočke za ljudi s posebnimi potrebami"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Aplikaciji omogoča, da v napravi začasno omogoči pripomočke za ljudi s posebnimi potrebami. Zlonamerne aplikacije jih lahko omogočijo brez soglasja uporabnika."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"prenos podatkov o oknih"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Omogoča, da aplikacija iz upravitelja oken pridobiva podatke o oknih. Zlonamerne aplikacije lahko pridobivajo podatke, namenjene za notranjo uporabo v sistemu."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje dogodkov"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Dovoli"</string>
<string name="sms_control_no" msgid="625438561395534982">"Zavrni"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> želi poslati sporočilo na <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"To lahko povzroči stroške v vašem mobilnem računu."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"To povzroči stroške v vašem mobilnem računu."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Pošlji"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Prekliči"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Zapomni si mojo izbiro"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Vedno dovoli"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Nikoli ne dovoli"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kartica SIM odstranjena"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Slušalke"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Zvočniki stojala"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Zvok HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Zvok prek Bluetootha"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Končano"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Izhod predstavnosti"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Vgrajen zaslon"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Zaslon HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrivanje #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Vnesite PIN za kartico SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Vnesite PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Vnesite geslo"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Koda PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Nova koda PIN"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odklepanje kartice SIM ..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Napačna koda PIN."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Vnesite PIN, ki vsebuje od štiri do osem številk."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Vnesite 8- ali več mestni PUK."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Vnesite kodo PUK in novo kodo PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Vneseni PUK ni pravilen."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Preveč poskusov vzorca"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Če želite odkleniti napravo, se prijavite z Google Računom."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Uporabniško ime (e-pošta)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Prijava"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Neveljavno uporabniško ime ali geslo."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ali ste pozabili uporabniško ime ali geslo?"\n"Obiščite "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Preverjanje ..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat vnesli napačno. "\n\n"Znova poskusite čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Geslo ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat vnesli napačno. "\n\n"Znova poskusite čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Vzorec za odklepanje ste nepravilno narisali <xliff:g id="NUMBER_0">%d</xliff:g>-krat. "\n\n"Poskusite znova čez <xliff:g id="NUMBER_1">%d</xliff:g> s."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da tablični računalnik odklenete z e-poštnim računom."\n\n"Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da odklenete telefon z Googlovimi podatki za prijavo."\n\n"Poskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Želite povečati glasnost nad varno raven?"\n"Dolgotrajna izpostavljenost glasnim tonom lahko poškoduje sluh."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Pripomočki za ljudi s posebnimi potrebami so omogočeni."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 669d334..0609ca3 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Дозвољава апликацији да преузме интерни статус система. Злонамерне апликације могу да преузимају разноврсне приватне и заштићене информације које им обично нису потребне."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"преузимање садржаја екрана"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дозвољава апликацији да преузме садржај активног прозора. Злонамерне апликације могу да преузму цео садржај прозора и прегледају целокупан текст, осим лозинки."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"привремено омогућавање приступачности"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дозвољава апликацији да привремено омогући приступачност на уређају. Злонамерне апликације могу да омогуће приступачност без дозволе корисника."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"преузимање информација о прозорима"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Омогућава апликацији да преузме информације о прозорима од менаџера прозора. Злонамерне апликације могу да преузму информације које су намењене за интерну употребу система."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"филтрирање догађаја"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Дозволи"</string>
<string name="sms_control_no" msgid="625438561395534982">"Одбиј"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> жели да пошаље поруку на адресу <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"То може да изазове додатне трошкове на налогу за мобилни уређај."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"То ће изазвати додатне трошкове на налогу за мобилни уређај."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Пошаљи"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Откажи"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Запамти мој избор"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Увек дозволи"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Никада не дозволи"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM картица је уклоњена"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Слушалице"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Звучници базне станице"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI аудио"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Излаз медија"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Уграђени екран"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI екран"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Постављени елемент бр. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Унесите PIN SIM картице"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Унесите PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Унесите лозинку"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK кôд"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Нови PIN кôд"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Откључавање SIM картице…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN кôд је нетачан."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Унесите PIN који има од 4 до 8 бројева."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Унесите PUK који се састоји од 8 бројева или више."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Унесите PUK и нови PIN кôд"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK који сте унели није тачан."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Заборавили сте корисничко име или лозинку?"\n"Посетите адресу "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Проверавање..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Унели сте PIN неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Унели сте лозинку неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. "\n\n"Покушајте поново за <xliff:g id="NUMBER_1">%d</xliff:g> секунде(и)."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате таблет помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште."\n\n"Покушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Желите да појачате звук изнад безбедног нивоа?"\n"Ако дуже време слушате гласну музику, може доћи до оштећења слуха."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Приступачност је омогућена."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 4850525..adcb267 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Tillåter att appen hämtar systemets interna status. Skadliga appar kan hämta privat och skyddad information som normalt aldrig ska behövas."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"hämta skärminnehåll"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tillåter att appen hämtar innehållet i det aktiva fönstret. Skadliga appar kan hämta allt innehåll i fönstret och läsa all text utom lösenord."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivera tillgänglighetsläget tillfälligt"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tillåt att en app tillfälligt aktiverar tillgänglighetsläget på enheten. Skadliga appar kan aktivera tillgänglighetsläget utan användarens medgivande."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hämta information om fönster"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillåter att appen hämtar information om fönstren från fönsterhanteraren. Skadliga appar kan hämta information som är avsedd för användning i det interna systemet."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"filtrera händelser"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Tillåt"</string>
<string name="sms_control_no" msgid="625438561395534982">"Neka"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> vill skicka ett meddelande till <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Ditt mobilkonto kan komma att debiteras."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Ditt mobilkonto kommer att debiteras."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"Detta "<font fgcolor="#ffffb060">"kan medföra debiteringar"</font>" på ditt mobilkonto."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Ditt mobilkonto kommer att debiteras."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Skickat"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Avbryt"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Kom ihåg mitt val"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Du kan ändra detta senare i Inställningar > Appar"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Tillåt alltid"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Tillåt aldrig"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-kortet togs bort"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Mobil"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Hörlurar"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dockningsstationens högtalare"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI-ljud"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ljud"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klar"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medieuppspelning"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"Skannar…"</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"Ansluter ..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Tillgängliga"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"Ej tillgängligt"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Inbyggd skärm"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-skärm"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Överlagring #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ange PIN-kod för SIM-kortet"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ange PIN-kod"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ange lösenord"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-kod"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Ny PIN-kod"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-kortet är nu inaktiverat. Ange PUK-koden om du vill fortsätta. Kontakta operatören om du vill få mer information."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ange önskad PIN-kod"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekräfta önskad PIN-kod"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser upp SIM-kort …"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Fel PIN-kod."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ange en PIN-kod med 4 till 8 siffror."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Ange en PUK-kod med minst 8 siffror."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Ange PUK-koden och en ny PIN-kod"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK-koden som du angav är felaktig."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden ska vara minst åtta siffror."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Ange rätt PUK-kod igen. Om försöken upprepas inaktiveras SIM-kortet permanent."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koderna stämmer inte överens"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"För många försök med grafiskt lösenord"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Logga in med ditt Google-konto om du vill låsa upp."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Användarnamn (e-post)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Logga in"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Ogiltigt användarnamn eller lösenord."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Har du glömt ditt användarnamn eller lösenord?"\n"Besök "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrollerar …"</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"SIM-kortet låses upp …"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Du har angett fel lösenord <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. "\n\n"Försök igen om <xliff:g id="NUMBER_1">%d</xliff:g> sekunder."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp surfplattan med ett e-postkonto."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp mobilen med hjälp av ett e-postkonto."\n\n" Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Vill du höja volymen över den säkra nivån?"\n"Om du lyssnar på hög volym under långa perioder kan din hörsel skadas."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Tillgänglighetsläget har aktiverats."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 7e82320..8976dfd 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Inaruhusu programu kutoa hali ya ndani ya mfumo. Programu hasidi zinaweza kutoa aina nyingi za taarifa za faragha na salama ambazo kwa kawaida hazihitaji."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"epua maudhui ya skrini"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Inaruhusu programu kutoa maudhui ya dirisha amilifu. Programu hasidi zinaweza kutoa maudhui yote ya dirisha na kuchunguza maandishi yake yote isipokuwa nenosiri."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"wezesha ufikivu kwa muda"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Inaruhusu programu kuwezesha kwa muda ufikivu kwenye kifaa. Huenda programu hasidi zikawezesha ufikivu bila kibali cha mtumiaji."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"okoa maelezo ya dirisha"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Huruhusu programu kuokoa maelezo kuhusu madirisha kutoka kwenye kidhibiti dirisha. Huenda programu hasidi ikakusanya maelezo ambayo yamekusudiwa kwa matumizi ya mfumo wa ndani."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"chuja matukio"</string>
@@ -1101,11 +1099,12 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Ruhusu"</string>
<string name="sms_control_no" msgid="625438561395534982">"Kataza"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ingependa kutuma ujumbe kwa <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Huenda huku kukasababisha gharama kwenye akaunti yako ya simu ya mkononi."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Huku kutasababisha gharama kwenye akaunti yako ya simu ya mkononi."</string>
+ <string name="sms_short_code_details" msgid="3492025719868078457">"Hii "<font fgcolor="#ffffb060">"huenda ikasababisha gharama"</font>" kwenye akaunti yako ya simu."</string>
+ <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Hii itasababisha gharama kwenye akaunti yako ya simu."</font></string>
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Tuma"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Ghairi"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Kumbuka chaguo yangu"</string>
+ <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Unaweza kubadilisha hii baadaye kwenye Mipangilio > Programu"</string>
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Ruhusu Kila mara"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Usiruhusu Kamwe"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Kadi ya SIM imeondolewa"</string>
@@ -1365,11 +1364,15 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Simu"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Vipokeasauti"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Vipasa sauti vya kituo"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Sauti ya HDMI"</string>
+ <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Mfumo"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Sauti ya Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kwisha"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Towe la midia"</string>
+ <string name="media_route_status_scanning" msgid="7279908761758293783">"Inatambaza..."</string>
+ <string name="media_route_status_connecting" msgid="6422571716007825440">"Inaunganisha..."</string>
+ <string name="media_route_status_available" msgid="6983258067194649391">"Inapatikana"</string>
+ <string name="media_route_status_not_available" msgid="6739899962681886401">"Haipatikani"</string>
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Skrini Iliyojengwa ndani"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Skrini ya HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Uwekeleaji #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1387,15 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ingiza PIN ya SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ingiza PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ingiza Nenosiri"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Msimbo wa PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Msimbo mpya wa PIN"</string>
+ <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM sasa imelemazwa. Ingiza msimbo wa PUK ili kuendelea. Wasiliana na mtoa huduma kwa maelezo."</string>
+ <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ingiza msimbo wa PIN uliopendelewa"</string>
+ <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Thibitisha msimbo wa PIN uliopendelewa"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Inafungua kadi ya SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Msimbo wa PIN usio sahihi."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN iliyo na tarakimu kati ya 4 na 8."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Andika PUK iliyo na urefu wa tarakimu 8 au zaidi."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Charaza PUK na msimbo mpya wa PIN"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK uliyoicharaza siyo sahihi."</string>
+ <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Msimbo wa PUK unafaa kuwa na nambari 8 au zaidi."</string>
+ <string name="kg_invalid_puk" msgid="3638289409676051243">"Ingiza upya msimbo sahihi wa PUK. Majaribio yaliyorudiwa yatalemaza kabisa SIM."</string>
+ <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Misimbo ya PIN haifanani"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Majaribio mengi mno ya mchoro"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Ili kufungua, ingia kwa Akaunti yako ya Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Jina la mtumiaji (barua pepe)"</string>
@@ -1399,7 +1403,7 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Ingia"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Jina la mtumiaji au nenosiri batili."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Je, umesahau jina lako la mtumiaji au nenosiri?"\n"Tembela "<b>"Bgoogle.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Inakagua..."</string>
+ <string name="kg_login_checking_password" msgid="5316091912653672681">"Inafungua SIM…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Umeingiza nenosiri lako kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Umechora ruwaza yako ya kufunga kwa makosa mara <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
@@ -1410,12 +1414,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Umekosea katika kuweka mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> bila kufaulu, utaombwa kufungua kompyuta yako ndogo kwa kutumia akaunti yako ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe."\n\n" Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Ongeza sauti zaidi ya kiwango salama? "\n"Kusikiliza kwa sauti ya juu kwa muda mrefu kunaweza kuharibu uwezo wako wa kusikia."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Ufikivu umewezeshwa."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index 4e202ac..0c36d4a 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -77,5 +77,13 @@
<!-- Preference fragment padding, sides -->
<dimen name="preference_fragment_padding_side">24dp</dimen>
<dimen name="preference_screen_header_padding_side">24dip</dimen>
+
+ <!-- Keyguard dimensions -->
+ <!-- Bottom padding for the widget pager -->
+ <dimen name="kg_widget_pager_bottom_padding">16dp</dimen>
+
+ <!-- Top margin for the runway lights. We add a negative margin in large
+ devices to account for the widget pager padding -->
+ <dimen name="kg_runway_lights_top_margin">-10dp</dimen>
</resources>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index fd2cfa8..755bfb8 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"อนุญาตให้แอปพลิเคชันเรียกดูสถานะภายในของระบบ แอปพลิเคชันที่เป็นอันตรายอาจเรียกดูข้อมูลส่วนบุคคลและข้อมูลที่ต้องรักษาความปลอดภัยหลากหลายประเภทที่ปกติแล้วไม่จำเป็นต้องใช้แต่อย่างใด"</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ดึงเนื้อหาหน้าจอ"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"อนุญาตให้แอปพลิเคชันดึงเนื้อหาของหน้าต่างที่ใช้งานอยู่ แอปพลิเคชันที่เป็นอันตรายอาจดึงเนื้อหาจากหน้าต่างทั้งหมดและตรวจสอบข้อความทั้งหมดยกเว้นรหัสผ่าน"</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"เปิดใช้งานการเข้าถึงชั่วคราว"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"ช่วยให้แอปพลิเคชันสามารถเปิดใช้งานการเข้าถึงบนอุปกรณ์เป็นการชั่วคราว แอปพลิเคชันที่เป็นอันตรายอาจเปิดใช้งานการเข้าถึงโดยไม่ได้รับความยินยอมจากผู้ใช้"</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"เรียกข้อมูลหน้าต่าง"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"อนุญาตให้แอปพลิเคชันดึงข้อมูลเกี่ยวกับหน้าต่างจากเครื่องมือจัดการหน้าต่าง แอปพลิเคชันที่เป็นอันตรายอาจดึงข้อมูลที่มีไว้เพื่อการใช้ของระบบภายใน"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"กรองกิจกรรม"</string>
@@ -1094,18 +1092,22 @@
<string name="wifi_p2p_to_message" msgid="248968974522044099">"ถึง:"</string>
<string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"พิมพ์ PIN ที่ต้องการ:"</string>
<string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
- <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"โืทรศัพท์จะยกเลิกการเชื่อมต่อกับ Wi-Fi ชั่วคราวในขณะที่เชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="wifi_p2p_frequency_conflict_message" msgid="7363907213787469151">"โทรศัพท์จะยกเลิกการเชื่อมต่อกับ Wi-Fi ชั่วคราวในขณะที่เชื่อมต่อกับ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="select_character" msgid="3365550120617701745">"ใส่อักขระ"</string>
<string name="sms_control_title" msgid="7296612781128917719">"กำลังส่งข้อความ SMS"</string>
<string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> กำลังส่งข้อความ SMS จำนวนมาก คุณต้องการอนุญาตให้แอปพลิเคชันนี้ส่งข้อความต่อหรือไม่"</string>
<string name="sms_control_yes" msgid="3663725993855816807">"อนุญาต"</string>
<string name="sms_control_no" msgid="625438561395534982">"ปฏิเสธ"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ต้องการส่งข้อความไปยัง <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"การดำเนินการนี้อาจมีการเรียกเก็บเงินในบัญชีมือถือของคุณ"</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"การดำเนินการนี้จะมีการเรียกเก็บเงินในบัญชีมือถือของคุณ"</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"ส่ง"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"ยกเลิก"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"จดจำตัวเลือกของฉัน"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"อนุญาตทุกครั้ง"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"ไม่อนุญาตเลย"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"นำซิมการ์ดออกแล้ว"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"โทรศัพท์"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"หูฟัง"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"ลำโพงแท่นชาร์จ"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"เสียง HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"ระบบ"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"เสียงบลูทูธ"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"เสร็จสิ้น"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"เอาต์พุตสื่อ"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"หน้าจอในตัว"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"หน้าจอ HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"การวางซ้อน #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"ป้อน PIN ของซิม"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"ป้อน PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"ป้อนรหัสผ่าน"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"รหัส PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"รหัส PIN ใหม่"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"กำลังปลดล็อกซิมการ์ด…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"รหัส PIN ไม่ถูกต้อง"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"พิมพ์ PIN ซึ่งเป็นเลข 4 ถึง 8 หลัก"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"พิมพ์ PUK ซึ่งต้องเป็นตัวเลขอย่างน้อย 8 หลัก"</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"พิมพ์ PUK และรหัส PIN ใหม่"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK ที่คุณพิมพ์ไม่ถูกต้อง"</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ลองหลายรูปแบบมากเกินไป"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"หากต้องการปลดล็อก ให้ลงชื่อเข้าใช้ด้วยบัญชี Google ของคุณ"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"ชื่อผู้ใช้ (อีเมล)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"ลงชื่อเข้าใช้"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"หากลืมชื่อผู้ใช้หรือรหัสผ่าน"\n"โปรดไปที่ "<b>"google.com/accounts/recovery"</b></string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"กำลังตรวจสอบ…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"คุณพิมพ์ PIN ไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"คุณพิมพ์รหัสผ่านไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้องไป <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว "\n\n"โปรดลองอีกครั้งใน <xliff:g id="NUMBER_1">%d</xliff:g> วินาที"</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกแท็บเล็ตโดยใช้บัญชีอีเมล"\n\n" โปรดลองอีกครั้งใน <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้ับัญชีอีเมล"\n\n" โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"เพิ่มระดับเสียงจนเกินระดับที่ปลอดภัยหรือไม่"\n"การฟังเสียงดังเป็นเวลานานอาจทำให้การได้ยินของคุณบกพร่องได้"</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"เปิดใช้งานการเข้าถึงแล้ว"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 8bfa8c3..0e29a02 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Pinapayagan ang app na mabawi ang panloob na katayuan ng system. Maaaring bawiin ng nakakahamak na apps ang iba\'t ibang pribado at secure na impormasyon na hindi kailanman normal na kinakailangan ng mga ito."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"kunin ang nilalaman ng screen"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Pinapayagan ang app na bawiin ang nilalaman ng aktibong window. Maaaring bawiin ng nakakahamak na apps ang kabuuang nilalaman ng window at suriin ang lahat ng teksto nito maliban sa mga password."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"pansamantalang paganahin ang accessibility"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Nagbibigay-daan sa isang application na pansamantalang paganahin ang accessibility sa device. Maaaring paganahin ng nakakahamak na apps ang accessibility nang walang pahintulot ng user."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"kunin ang impormasyon ng window"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Pinapayagan ang application na kumuha ng impormasyon tungkol sa mga window mula sa tagapamahala ng window. Maaaring kumuha ang mga nakakahamak na app ng impormasyong nilayon para sa panloob na paggamit ng system."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"i-filter ang mga kaganapan"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Payagan"</string>
<string name="sms_control_no" msgid="625438561395534982">"Tanggihan"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"Gustong magpadala ng mensahe ng <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> sa <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Maaaring maging sanhi ito ng mga pagsingil sa iyong mobile account."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Magiging sanhi ito ng mga pagsingil sa iyong mobile account."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Ipadala"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Kanselahin"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Tandaan ang aking pinili"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Palaging Payagan"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Huwag kailanman Payagan"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Naalis ang SIM card"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telepono"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Mga Headphone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Mga speaker ng dock"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI audio"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio sa Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tapos na"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Output ng media"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Built-in na Screen"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Screen"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Ilagay ang SIM PIN"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Ilagay ang PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Ilagay ang Password"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK code"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Bagong PIN code"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ina-unlock ang SIM card…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Hindi tamang PIN code."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Mag-type ng PIN na 4 hanggang 8 numero."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Mag-type ng PUK na may 8 numbero o mas mahaba."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"I-type ang PUK at bagong PIN code"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Hindi tama ang na-type mong PUK."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Masyadong maraming pagtatangka sa pattern"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Upang i-unlock, mag-sign in gamit ang iyong Google account."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Mag-sign in"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Di-wastong username o password."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Nakalimutan ang iyong username o password?"\n"Bisitahin ang "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Sinusuri…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Na-type mo nang hindi tama ang iyong PIN nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Na-type mo nang hindi tama ang iyong password nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. "\n\n"Subukang muli sa loob ng <xliff:g id="NUMBER_1">%d</xliff:g> (na) segundo."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang tablet mo gamit ang isang email account."\n\n" Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang telepono mo gamit ang isang email account."\n\n" Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Lakasan ang volume nang lagpas sa ligtas na antas?"\n"Maaaring mapinsala ng pakikinig sa malakas na volume sa loob ng mahahabang panahon ang iyong pandinig."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Pinagana ang accessibility."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index a85f58c..84c8ede 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Uygulamaya, sistemin iç durumunu alma izni verir. Kötü amaçlı uygulamalar normalde gerek duymadıkları çok çeşitli özel ve güvenli bilgilerini alabilir."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ekran içeriğini al"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Uygulamaya, etkin pencerenin içeriğini alma izni verir. Kötü amaçlı uygulamalar tüm pencere içeriğini alabilir ve şifreleri hariç tüm metni inceleyebilir."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"erişilebilirliği geçici olarak etkinleştir"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Uygulamaya, cihazda erişilebilirliği geçici olarak etkinleştirme izni verir. Kötü amaçlı uygulamalar, kullanıcının izni olmadan erişilebilirliği etkinleştirebilirler."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pencere bilgilerini al"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Uygulamaya, pencere yöneticisinden pencerelerle ilgili bilgi alma izni verir. Zararlı uygulamalar dahili sistem kullanımına yönelik bilgileri alabilir."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"etkinlikleri filtrele"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"İzin ver"</string>
<string name="sms_control_no" msgid="625438561395534982">"Reddet"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>, <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> adresine bir mesaj göndermek istiyor."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Bu işlem, mobil hesabınızdan ücret alınmasına neden olabilir."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Bu, mobil hesabınızdan ücret alınmasına neden olacaktır."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Gönder"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"İptal"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Seçimimi hatırla"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Her Zaman İzin Ver"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Asla İzin Verme"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM kart çıkarıldı"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kulaklıklar"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Yuva hoparlörleri"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI ses"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ses"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tamamlandı"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Medya çıkışı"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Yerleşik Ekran"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Ekran"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Yer Paylaşımı No. <xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodunu girin"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"PIN\'i girin"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Şifreyi Girin"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK kodu"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Yeni PIN kodu"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kart kilidi açılıyor…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PIN kodu."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 rakamdan oluşan bir PIN girin."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"8 veya daha uzun basamaklı bir PUK kodu yazın."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"PUK ve yeni PIN kodunu yazın"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Yazdığınız PUK doğru değil."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Çok fazla sayıda desen denemesi yapıldı"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmak için Google hesabınızla oturum açın."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Kullanıcı adı (e-posta)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Oturum aç"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Geçersiz kullanıcı adı veya şifre."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kullanıcı adınızı veya şifrenizi mi unuttunuz?"\n<b>"google.com/accounts/recovery"</b>" adresini ziyaret edin."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Kontrol ediliyor…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış girdiniz. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrenizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış yazdınız. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. "\n\n"<xliff:g id="NUMBER_1">%d</xliff:g> saniye içinde tekrar deneyin."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra, tabletinizi bir e-posta hesabı kullanarak açmanız istenir."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra telefonunuzu bir e-posta hesabı kullanarak açmanız istenir."\n\n" <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Ses düzeyi güvenli seviyenin üzerine çıkarılsın mı?"\n"Yüksek sesle uzun süre dinlemek işitme yetinize zarar verebilir."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Erişilebilirlik etkinleştirildi."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 6d462f0..4ea445d 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Дозволяє програмі отримувати дані про внутрішній стан системи. Шкідливі програми можуть отримувати значну кількість особистої та конфіденційної інформації, яка для них не призначена."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"отримувати вміст екрана"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дозволяє програмі отримувати вміст активного вікна. Шкідливі програми можуть отримувати весь вміст вікна та вивчати весь його текст, окрім паролів."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"тимчасово вмикати доступність"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дозволяє програмі тимчасового вмикати доступність на пристрої. Шкідливі програми можуть вмикати доступність без згоди користувача."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"отримувати інформацію про вікна"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дозволяє програмі отримувати інформацію про вікна від диспетчера вікон. Шкідливі програми можуть отримувати інформацію, яка призначена для внутрішнього користування системи."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"фільтрувати події"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Дозволити"</string>
<string name="sms_control_no" msgid="625438561395534982">"Відмовити"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> хоче надіслати повідомлення на таку адресу: <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Можуть стягуватися кошти з вашого мобільного рахунку."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Буде стягнено кошти з вашого мобільного рахунку."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Надіслати"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Скасувати"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Запам’ятати мій вибір"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Завжди дозволяти"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ніколи не дозволяти"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM-карту вилучено"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Телефон"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Навушники"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Динаміки док-станції"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Аудіовихід HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудіо Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Вивід медіа-даних"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Вбудований екран"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Екран HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Накладання №<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Введіть PIN-код SIM-карти"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Введіть PIN-код"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Введіть пароль"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK-код"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Новий PIN-код"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Розблокування SIM-карти…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправильний PIN-код."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введіть PIN-код із 4–8 цифр."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Введіть PUK-код із 8 або більше цифр."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Введіть PUK-код і новий PIN-код"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"Введений PUK-код не правильний."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Забагато спроб намалювати ключ"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Щоб розблокувати, увійдіть, використовуючи дані облікового запису Google."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Ім’я користувача (електронна адреса)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Увійти"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Недійсне ім’я користувача чи пароль."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Не пам’ятаєте ім’я користувача чи пароль?"\n"Відвідайте сторінку "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Перевірка…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN-код неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Пароль неправильно введено стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Повторіть спробу через <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати планшетний ПК за допомогою облікового запису електронної пошти."\n\n" Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати телефон за допомогою облікового запису електронної пошти."\n\n" Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Збільшити гучність понад безпечний рівень?"\n"Надто гучне прослуховування впродовж тривалого періоду може пошкодити слух."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Доступність увімкнено."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index c451888..c9a39f8 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Cho phép ứng dụng truy xuất trạng thái nội bộ của hệ thống. Ứng dụng độc hại có thể truy xuất nhiều loại thông tin riêng tư và bảo mật khác nhau mà thông thường chúng không bao giờ cần."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"truy xuất nội dung màn hình"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Cho phép ứng dụng truy xuất nội dung của cửa sổ hiện hành. Ứng dụng độc hại có thể truy xuất toàn bộ nội dung của cửa sổ cũng như xem xét toàn bộ văn bản của cửa sổ ngoại trừ mật khẩu."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"tạm thời bật trợ năng"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Cho phép ứng dụng tạm thời bật trợ năng trên thiết bị. Các ứng dụng độc hại có thể bật trợ năng mà không có sự đồng ý của người dùng."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"truy xuất thông tin cửa sổ"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Cho phép ứng dụng truy xuất thông tin về các cửa sổ từ trình quản lý cửa sổ. Các ứng dụng độc hại có thể truy xuất thông tin được dành để sử dụng trong hệ thống nội bộ."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"lọc sự kiện"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Cho phép"</string>
<string name="sms_control_no" msgid="625438561395534982">"Từ chối"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> muốn gửi thư đến <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Điều này có thể khiến bạn phải trả phí cho tài khoản di động của mình."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Điều này sẽ dẫn đến việc tính phí vào tài khoản di động của bạn."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Gửi"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Hủy"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Nhớ lựa chọn của tôi"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Luôn cho phép"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Không bao giờ cho phép"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Đã xóa thẻ SIM"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Điện thoại"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Tai nghe"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Loa đế"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Âm thanh HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Hệ thống"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Âm thanh Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Xong"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Đầu ra phương tiện"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Màn hình tích hợp"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Màn hình HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Lớp phủ #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Nhập PIN của SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Nhập PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Nhập mật khẩu"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Mã PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Mã PIN mới"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Đang mở khóa thẻ SIM…"</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Mã PIN không chính xác."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Nhập mã PIN có từ 4 đến 8 số."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Nhập PUK có từ 8 số trở lên."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Nhập PUK và mã PIN mới"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"PUK bạn đã nhập không đúng."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Quá nhiều lần nhập hình"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Để mở khóa, hãy đăng nhập bằng tài khoản Google của bạn."</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Tên người dùng (email)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Đăng nhập"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Tên người dùng hoặc mật khẩu không hợp lệ."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Bạn quên tên người dùng hoặc mật khẩu?"\n"Hãy truy cập "<b>"google.com/accounts/recovery"</b>"."</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Đang kiểm tra…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần nhập sai mã PIN của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần nhập sai mật khẩu của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Hãy "\n\n"thử lại sau <xliff:g id="NUMBER_1">%d</xliff:g> giây."</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa máy tính bảng bằng tài khoản email."\n\n" Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa điện thoại bằng tài khoản email."\n\n" Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Tăng âm lượng trên mức an toàn?"\n"Nghe ở âm lượng cao trong thời gian dài có thể gây hại cho thính giác của bạn."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Trợ năng đã được bật."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 888844e..0ead220 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"允许应用检索系统的内部状态。恶意应用可能会检索一般情况下绝不需要检索的多种私人信息和安全信息。"</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"检索屏幕内容"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"允许应用检索活动窗口的内容。恶意应用可能会检索整个窗口的内容,并检查其中除密码以外的所有文字。"</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"暂时启用辅助功能"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"允许应用在设备上暂时启用辅助功能。恶意应用可能会在未经用户同意的情况下擅自启用辅助功能。"</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"检索窗口信息"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允许应用通过窗口管理器检索窗口信息。恶意应用可能会检索供内部系统使用的信息。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"过滤事件"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"允许"</string>
<string name="sms_control_no" msgid="625438561395534982">"拒绝"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b>想要向 <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b> 发送一条短信。"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"这可能会导致您的手机号产生费用。"</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"这会导致您的手机号产生费用。"</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"发送"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"取消"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"记住我的选择"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"始终允许"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"永不允许"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"已移除 SIM 卡"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"手机"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"耳机"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"基座扬声器"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI 音频"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"系统"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"蓝牙音频"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"媒体输出线路"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"内置屏幕"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 屏幕"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"叠加视图 #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"输入 SIM PIN"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"输入 PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"输入密码"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK 码"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"新的 PIN 码"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解锁 SIM 卡..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 码有误。"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"请输入 4 至 8 位数的 PIN。"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"请输入至少 8 位数的 PUK。"</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"请输入 PUK 和新的 PIN 码"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"您输入的 PUK 不正确。"</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"图案尝试次数过多"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"要解锁,请登录您的 Google 帐户。"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"用户名(电子邮件地址)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"登录"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"用户名或密码无效。"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"忘记了用户名或密码?"\n"请访问 "<b>"google.com/accounts/recovery"</b>"。"</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"正在检查..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地输入了 PIN。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地输入了密码。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。"\n\n"请在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒后重试。"</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁平板电脑。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功,系统就会要求您使用自己的电子邮件帐户解锁手机。"\n\n"请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"将音量调高到安全级别以上?"\n"长时间聆听高音量可能会损伤听力。"</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"辅助功能已启用。"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 14f1580..6b1bfff 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"允許應用程式擷取系統內部狀態。請注意,惡意應用程式可能利用此功能異常擷取各類私人資訊和安全性資訊。"</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"擷取螢幕內容"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"允許應用程式擷取使用中的視窗內容。請注意,惡意應用程式可能利用此功能擷取完整視窗內容,並檢視密碼之外的所有文字。"</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"暫時啟用協助工具"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"允許應用程式在裝置上暫時啟用協助工具。惡意應用程式可能藉此在未經使用者同意的情況下擅自啟用協助工具。"</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"擷取視窗資訊"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允許應用程式透過視窗管理程式擷取視窗的相關資訊。請注意,惡意應用程式可能藉此擷取僅限內部系統使用的資訊。"</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"篩選活動"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"允許"</string>
<string name="sms_control_no" msgid="625438561395534982">"拒絕"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> 要求將訊息傳送至 <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>。"</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"這可能會透過您的行動帳戶計費。"</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"這會透過您的行動帳戶計費。"</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"傳送"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"取消"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"記住我的選擇"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"一律允許"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"一律不允許"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"SIM 卡已移除"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"手機"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"耳機"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"座架喇叭"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"HDMI 音訊"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音訊"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"媒體輸出"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"內建畫面"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI 螢幕"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"第 <xliff:g id="ID">%1$d</xliff:g> 個重疊效果"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"輸入 SIM PIN"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"輸入 PIN"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"輸入密碼"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"PUK 碼"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"新 PIN 碼"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解除 SIM 卡鎖定..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 碼不正確。"</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入 4 到 8 碼的 PIN。"</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"請輸入 8 碼以上的 PUK。"</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"輸入 PUK 碼和新 PIN 碼"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"您輸入的 PUK 不正確。"</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"圖形嘗試次數過多"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"如要解除鎖定,請使用 Google 帳戶登入。"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"使用者名稱 (電子郵件)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"登入"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"使用者名稱或密碼無效。"</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"忘了使用者名稱或密碼?"\n"請前往 "<b>"google.com/accounts/recovery"</b>"。"</string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"檢查中…"</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"您的 PIN 已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"您的密碼已輸錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次。"\n\n"請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
@@ -1409,13 +1428,12 @@
<string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"您嘗試解除這支手機的鎖定已失敗 <xliff:g id="NUMBER">%d</xliff:g> 次,手機現在將恢復原廠設定。"</string>
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除平板電腦的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次,如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功,系統就會要求您透過電子郵件帳戶解除手機的鎖定狀態。"\n\n"請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
- <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"將音量調高至安全等級以上?"\n"長時間聆聽偏高音量可能會損害您的聽力。"</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"要將音量調高到安全等級以上嗎?"\n"長時間聆聽偏高音量可能會損害您的聽力。"</string>
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"協助工具已啟用。"</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 0fdea74..c5f24dd 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -287,10 +287,8 @@
<string name="permdesc_dump" msgid="1778299088692290329">"Ivumela insiza ukuthi ithole kabusha ingaphakathi lesistimu. izinsiza ezinobungozi zingathola kabusha inqwaba yolwazi oluyimfihlo noluvikelekile ezingajwayele ukuthi ziludinge."</string>
<string name="permlab_retrieve_window_content" msgid="8022588608994589938">"letha okuqukethwe kwesikrini"</string>
<string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ivumela insiza ukuthi ithole okuqukethe kwi-Window. Izinsiza ezinobungozi zingathola kabush iwindi eliphelele bese ibheka konke okuqukethwe ngaphandle kwaaaphasiwedi."</string>
- <!-- no translation found for permlab_temporary_enable_accessibility (2312612135127310254) -->
- <skip />
- <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
- <skip />
+ <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"nika amandla okwesikhashana ukufinyelela"</string>
+ <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ivumela uhlelo lokusebenza ukunika amandla ukufinyelela kwesikhashana kuvidayisi. Izinhlelo zokusebenza ezingalungile zinganika amandla ukufinyelela ngaphandle kwemvume yomsebenzisi."</string>
<string name="permlab_retrieve_window_info" msgid="8532295199112519378">"buyisa ulwazi lewindi"</string>
<string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ivumela uhlelo lokusebenza ukubuyisa ulwazi mayelana namawindi avela kumphathi wewindi. Izinhlelo zokusebenza zingabuyisa ulwazi olubhekiswe ukusetshenziselwa kohlelo lwangaphakathi."</string>
<string name="permlab_filter_events" msgid="8675535648807427389">"hlunga imicimbi"</string>
@@ -1101,11 +1099,15 @@
<string name="sms_control_yes" msgid="3663725993855816807">"Vumela"</string>
<string name="sms_control_no" msgid="625438561395534982">"Nqaba"</string>
<string name="sms_short_code_confirm_message" msgid="1645436466285310855">"I-<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> ingathanda ukuthumela umlayezo ku-<b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string>
- <string name="sms_short_code_details" msgid="4992814738863678373">"Lokhu kungabangela amashaji ku-akhawunti yakho yeselula."</string>
- <string name="sms_premium_short_code_details" msgid="4291752905667807485">"Lokhu kuzobangela amashaji ku-akhawunti yakho yeselula."</string>
+ <!-- no translation found for sms_short_code_details (3492025719868078457) -->
+ <skip />
+ <!-- no translation found for sms_premium_short_code_details (5523826349105123687) -->
+ <skip />
<string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Thumela"</string>
<string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Khansela"</string>
<string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Khumbula inketho yami"</string>
+ <!-- no translation found for sms_short_code_remember_undo_instruction (4960944133052287484) -->
+ <skip />
<string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Vumela njalo?"</string>
<string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ungavumeli"</string>
<string name="sim_removed_title" msgid="6227712319223226185">"Ikhadi le-SIM likhishiwe"</string>
@@ -1365,11 +1367,20 @@
<string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Ifoni"</string>
<string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Ama-headphone"</string>
<string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Izipikha ze-Dock"</string>
- <string name="default_audio_route_name_hdmi" msgid="7986404173839007682">"Umsindo we-HDMI"</string>
+ <!-- no translation found for default_media_route_name_hdmi (2450970399023478055) -->
+ <skip />
<string name="default_audio_route_category_name" msgid="3722811174003886946">"Isistimu"</string>
<string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Umsindo we-Bluetooth"</string>
<string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Qedile"</string>
<string name="media_route_button_content_description" msgid="5758553567065145276">"Okukhiphayo kwemidiya"</string>
+ <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
+ <skip />
+ <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
+ <skip />
+ <!-- no translation found for media_route_status_available (6983258067194649391) -->
+ <skip />
+ <!-- no translation found for media_route_status_not_available (6739899962681886401) -->
+ <skip />
<string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Okwakhelwe ngaphakathi kwesikrini"</string>
<string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Isikrini se-HDMI"</string>
<string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Isendlalelo #<xliff:g id="ID">%1$d</xliff:g>"</string>
@@ -1384,14 +1395,21 @@
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Faka iphinikhodi ye-SIM"</string>
<string name="kg_pin_instructions" msgid="2377242233495111557">"Faka iphinikhodi"</string>
<string name="kg_password_instructions" msgid="5753646556186936819">"Faka iphasiwedi"</string>
- <string name="kg_puk_enter_puk_hint" msgid="5183097160254244459">"Ikhodi le-PUK"</string>
- <string name="kg_puk_enter_pin_hint" msgid="597821135578014901">"Iphinikhodi entsha"</string>
+ <!-- no translation found for kg_puk_enter_puk_hint (453227143861735537) -->
+ <skip />
+ <!-- no translation found for kg_puk_enter_pin_hint (7871604527429602024) -->
+ <skip />
+ <!-- no translation found for kg_enter_confirm_pin_hint (325676184762529976) -->
+ <skip />
<string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ivula ikhadi le-SIM..."</string>
<string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile."</string>
<string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Thayipha iphinikhodi enezinombolo ezingu-4 kuya kwezingu-8."</string>
- <string name="kg_invalid_sim_puk_hint" msgid="5216603185442368307">"Thayipha i-PUK enezinombolo ezingu-8 noma ngaphezulu."</string>
- <string name="kg_sim_puk_recovery_hint" msgid="5577753137718442566">"Faka i-PUK nephinikhodi entsha"</string>
- <string name="kg_invalid_puk" msgid="5809955359950817326">"I-PUK oyithayiphile ayilungile."</string>
+ <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+ <skip />
+ <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
+ <skip />
+ <!-- no translation found for kg_invalid_confirm_pin_hint (7003469261464593516) -->
+ <skip />
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Kunemizamo eminingi kakhulu yephathini"</string>
<string name="kg_login_instructions" msgid="1100551261265506448">"Ukuvula, ngena ngemvume kwi-akhawunti ye-Google"</string>
<string name="kg_login_username_hint" msgid="5718534272070920364">"Igama lomsebenzisi (i-imeyli)"</string>
@@ -1399,7 +1417,8 @@
<string name="kg_login_submit_button" msgid="5355904582674054702">"Ngena ngemvume"</string>
<string name="kg_login_invalid_input" msgid="5754664119319872197">"Igama lomsebezisi elingalungile noma iphasiwedi."</string>
<string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Ukhohlwe igama lomsebenzisi noma iphasiwedi?"\n"Vakashela"<b>"google.com/accounts/recovery"</b></string>
- <string name="kg_login_checking_password" msgid="8849589033659332457">"Iyahlola..."</string>
+ <!-- no translation found for kg_login_checking_password (5316091912653672681) -->
+ <skip />
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ubhale iphinikhodi ykho ngendlela engafanele izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n"Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Ubhale iphasiwedi yakho ngendlela engafanele <xliff:g id="NUMBER_0">%d</xliff:g> izikhathi. "\n\n"Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>."</string>
<string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Udwebe iphathini yakho yokuvula ngendlela engafanele-<xliff:g id="NUMBER_0">%d</xliff:g>. "\n\n" Zama futhi emasekhondini angu-<xliff:g id="NUMBER_1">%d</xliff:g>"</string>
@@ -1410,12 +1429,11 @@
<string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Udwebe ngokungalungile iphathini yakho yokuvula izikhathi ezingu-<xliff:g id="NUMBER_0">%d</xliff:g>. Emva <xliff:g id="NUMBER_1">%d</xliff:g> kweminye imizamo engaphumelelanga, uzocelwa ukuvula ithebhulethi yakho usebenzisa ukungena ngemvume kwi-Google."\n\n" Sicela uzame futhi kwengu-<xliff:g id="NUMBER_2">%d</xliff:g> imizuzwana."</string>
<string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google"\n\n" Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%d</xliff:g> imizuzwana."</string>
<string name="safe_media_volume_warning" product="default" msgid="7382971871993371648">"Khulisa ivolomu ngaphezu kweleveli yokuphepha?"\n"Ukulalela ngevolomu ephezulu izikhathi ezide kungalimaza ukuzwa kwakho."</string>
- <!-- no translation found for continue_to_enable_accessibility (7763028886898319514) -->
+ <!-- no translation found for continue_to_enable_accessibility (2184747411804432885) -->
<skip />
- <!-- no translation found for accessibility_enabled (1381972048564547685) -->
+ <string name="accessibility_enabled" msgid="1381972048564547685">"Ukufinyelela kunikwe amandla."</string>
+ <!-- no translation found for enable_accessibility_canceled (3833923257966635673) -->
<skip />
- <!-- no translation found for enable_accessibility_canceled (6820851401471507415) -->
- <skip />
- <!-- no translation found for user_switched (1030428084901139446) -->
+ <!-- no translation found for user_switched (3768006783166984410) -->
<skip />
</resources>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 07d0d74..6a93f30 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -115,6 +115,11 @@
<color name="lockscreen_clock_am_pm">#ffffffff</color>
<color name="lockscreen_owner_info">#ff9a9a9a</color>
+ <!-- keyguard overscroll widget pager -->
+ <color name="kg_multi_user_text_active">#ffffffff</color>
+ <color name="kg_multi_user_text_inactive">#ff808080</color>
+ <color name="kg_widget_pager_gradient">#ff33B5E5</color>
+
<!-- FaceLock -->
<color name="facelock_spotlight_mask">#CC000000</color>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d3d994f..16960c8 100755
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -967,4 +967,18 @@
<!-- Whether safe headphone volume is enabled or not (country specific). -->
<bool name="config_safe_media_volume_enabled">true</bool>
+ <!-- Set to true if the wifi display supports compositing content stored
+ in gralloc protected buffers. For this to be true, there must exist
+ a protected hardware path for surface flinger to composite and send
+ protected buffers to the wifi display video encoder.
+
+ If this flag is false, we advise applications not to use protected
+ buffers (if possible) when presenting content to a wifi display because
+ the content may be blanked.
+
+ This flag controls whether the {@link Display#FLAG_SUPPORTS_PROTECTED_BUFFERS}
+ flag is set for wifi displays.
+ -->
+ <bool name="config_wifiDisplaySupportsProtectedBuffers">false</bool>
+
</resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 289adf4..10f0d39 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -286,7 +286,7 @@
<dimen name="kg_runway_lights_height">7dp</dimen>
<!-- The height of the runway lights strip -->
- <dimen name="kg_runway_lights_vertical_padding">3dp</dimen>
+ <dimen name="kg_runway_lights_vertical_padding">2dp</dimen>
<!-- Horizontal padding for the widget pager -->
<dimen name="kg_widget_pager_horizontal_padding">16dp</dimen>
@@ -297,6 +297,10 @@
<!-- Bottom padding for the widget pager -->
<dimen name="kg_widget_pager_bottom_padding">6dp</dimen>
+ <!-- Top margin for the runway lights. We add a negative margin in large
+ devices to account for the widget pager padding -->
+ <dimen name="kg_runway_lights_top_margin">0dp</dimen>
+
<!-- Touch slop for the global toggle accessibility gesture -->
<dimen name="accessibility_touch_slop">80dip</dimen>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2f9ce0c..fb8005a 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -2272,6 +2272,15 @@
<!-- Accessibility description sent when user completes drawing a pattern. [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_detected">Pattern completed</string>
+ <!-- Accessibility description sent when user changes the current lock screen widget. [CHAR_LIMIT=none] -->
+ <string name="keyguard_accessibility_widget_changed">%1$s. Widget %2$d of %3$d.</string>
+ <!-- Accessibility description of the lock screen user selector widget. [CHAR_LIMIT=none] -->
+ <string name="keyguard_accessibility_user_selector">User selector</string>
+ <!-- Accessibility description of the lock screen status widget. [CHAR_LIMIT=none] -->
+ <string name="keyguard_accessibility_status">Status</string>
+ <!-- Accessibility description of the lock media control widget. [CHAR_LIMIT=none] -->
+ <string name="keygaurd_accessibility_media_controls">Media controls</string>
+
<!-- Password keyboard strings. Used by LockScreen and Settings --><skip />
<!-- Label for "switch to symbols" key. Must be short to fit on key! -->
<string name="password_keyboard_label_symbol_key">\?123</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index eb2b5a6..b295a6a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -261,6 +261,7 @@
<java-symbol type="bool" name="config_ui_enableFadingMarquee" />
<java-symbol type="bool" name="config_use_strict_phone_number_comparation" />
<java-symbol type="bool" name="config_voice_capable" />
+ <java-symbol type="bool" name="config_wifiDisplaySupportsProtectedBuffers" />
<java-symbol type="bool" name="preferences_prefer_dual_pane" />
<java-symbol type="bool" name="skip_restoring_network_selection" />
<java-symbol type="bool" name="split_action_bar_is_narrow" />
@@ -548,6 +549,10 @@
<java-symbol type="string" name="keyboardview_keycode_enter" />
<java-symbol type="string" name="keyboardview_keycode_mode_change" />
<java-symbol type="string" name="keyboardview_keycode_shift" />
+ <java-symbol type="string" name="keygaurd_accessibility_media_controls" />
+ <java-symbol type="string" name="keyguard_accessibility_status" />
+ <java-symbol type="string" name="keyguard_accessibility_user_selector" />
+ <java-symbol type="string" name="keyguard_accessibility_widget_changed" />
<java-symbol type="string" name="kilobyteShort" />
<java-symbol type="string" name="last_month" />
<java-symbol type="string" name="launchBrowserDefault" />
@@ -948,6 +953,7 @@
<java-symbol type="drawable" name="platlogo_alt" />
<java-symbol type="drawable" name="stat_notify_sync_error" />
<java-symbol type="drawable" name="stat_notify_wifi_in_range" />
+ <java-symbol type="drawable" name="stat_notify_rssi_in_range" />
<java-symbol type="drawable" name="stat_sys_gps_on" />
<java-symbol type="drawable" name="stat_sys_tether_wifi" />
<java-symbol type="drawable" name="status_bar_background" />
@@ -1097,6 +1103,7 @@
<java-symbol type="xml" name="kg_password_kbd_numeric" />
<java-symbol type="xml" name="power_profile" />
<java-symbol type="xml" name="time_zones_by_country" />
+ <java-symbol type="xml" name="sms_short_codes" />
<java-symbol type="raw" name="accessibility_gestures" />
<java-symbol type="raw" name="incognito_mode_start_page" />
@@ -1181,6 +1188,9 @@
<java-symbol type="bool" name="config_reverseDefaultRotation" />
<java-symbol type="bool" name="config_showNavigationBar" />
<java-symbol type="bool" name="target_honeycomb_needs_options_menu" />
+ <java-symbol type="color" name="kg_multi_user_text_active" />
+ <java-symbol type="color" name="kg_multi_user_text_inactive" />
+ <java-symbol type="color" name="kg_widget_pager_gradient" />
<java-symbol type="dimen" name="navigation_bar_height" />
<java-symbol type="dimen" name="navigation_bar_height_landscape" />
<java-symbol type="dimen" name="navigation_bar_width" />
@@ -1206,8 +1216,6 @@
<java-symbol type="drawable" name="magnified_region_frame" />
<java-symbol type="drawable" name="menu_background" />
<java-symbol type="drawable" name="stat_sys_secure" />
- <java-symbol type="drawable" name="kg_widget_overscroll_layer_left" />
- <java-symbol type="drawable" name="kg_widget_overscroll_layer_right" />
<java-symbol type="id" name="action_mode_bar_stub" />
<java-symbol type="id" name="alarm_status" />
<java-symbol type="id" name="backspace" />
@@ -1291,6 +1299,7 @@
<java-symbol type="id" name="kg_widget_region" />
<java-symbol type="id" name="left_strip" />
<java-symbol type="id" name="right_strip" />
+ <java-symbol type="id" name="keyguard_multi_user_selector" />
<java-symbol type="integer" name="config_carDockRotation" />
<java-symbol type="integer" name="config_defaultUiModeType" />
@@ -1330,6 +1339,8 @@
<java-symbol type="layout" name="screen_title" />
<java-symbol type="layout" name="screen_title_icons" />
<java-symbol type="layout" name="keyguard_host_view" />
+ <java-symbol type="layout" name="keyguard_transport_control_view" />
+ <java-symbol type="layout" name="keyguard_status_view" />
<java-symbol type="string" name="abbrev_wday_month_day_no_year" />
<java-symbol type="string" name="android_upgrading_title" />
<java-symbol type="string" name="bugreport_title" />
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
new file mode 100644
index 0000000..8b395af
--- /dev/null
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<!-- Regex patterns for SMS short codes by country. -->
+<shortcodes>
+
+ <!-- The country attribute is the ISO country code of the user's account (from SIM card or NV).
+ The pattern attribute is a regex that matches all SMS short codes for the country.
+ The premium attribute is a regex that matches premium rate SMS short codes.
+ The free attribute matches short codes that we know will not cost the user, such as
+ emergency numbers. The standard attribute matches short codes that are billed at the
+ standard SMS rate. The user is warned when the destination phone number matches the
+ "pattern" or "premium" regexes, and does not match the "free" or "standard" regexes. -->
+
+ <!-- Harmonised European Short Codes are 6 digit numbers starting with 116 (free helplines).
+ Premium patterns include short codes from: http://aonebill.com/coverage&tariffs
+ and http://mobilcent.com/info-worldwide.asp and extracted from:
+ http://smscoin.net/software/engine/WordPress/Paid+SMS-registration/ -->
+
+ <!-- Albania: 5 digits, known short codes listed -->
+ <shortcode country="al" pattern="\\d{5}" premium="15191|55[56]00" />
+
+ <!-- Armenia: 3-4 digits, emergency numbers 10[123] -->
+ <shortcode country="am" pattern="\\d{3,4}" premium="11[2456]1|3024" free="10[123]" />
+
+ <!-- Austria: 10 digits, premium prefix 09xx, plus EU -->
+ <shortcode country="at" pattern="11\\d{4}" premium="09.*" free="116\\d{3}" />
+
+ <!-- Australia: 6 or 8 digits starting with "19" -->
+ <shortcode country="au" pattern="19(?:\\d{4}|\\d{6})" premium="19998882" />
+
+ <!-- Azerbaijan: 4-5 digits, known premium codes listed -->
+ <shortcode country="az" pattern="\\d{4,5}" premium="330[12]|87744|901[234]|93(?:94|101)|9426|9525" />
+
+ <!-- Belgium: 4 digits, plus EU: http://www.mobileweb.be/en/mobileweb/sms-numberplan.asp -->
+ <shortcode country="be" premium="\\d{4}" free="8\\d{3}|116\\d{3}" />
+
+ <!-- Bulgaria: 4-5 digits, plus EU -->
+ <shortcode country="bg" pattern="\\d{4,5}" premium="18(?:16|423)|19(?:1[56]|35)" free="116\\d{3}" />
+
+ <!-- Belarus: 4 digits -->
+ <shortcode country="by" pattern="\\d{4}" premium="3336|4161|444[4689]|501[34]|7781" />
+
+ <!-- Canada: 5-6 digits -->
+ <shortcode country="ca" pattern="\\d{5,6}" premium="60999|88188" />
+
+ <!-- Switzerland: 3-5 digits: http://www.swisscom.ch/fxres/kmu/thirdpartybusiness_code_of_conduct_en.pdf -->
+ <shortcode country="ch" pattern="[2-9]\\d{2,4}" premium="543|83111" />
+
+ <!-- China: premium shortcodes start with "1066", free shortcodes start with "1065":
+ http://clients.txtnation.com/entries/197192-china-premium-sms-short-code-requirements -->
+ <shortcode country="cn" premium="1066.*" free="1065.*" />
+
+ <!-- Cyprus: 4-6 digits (not confirmed), known premium codes listed, plus EU -->
+ <shortcode country="cy" pattern="\\d{4,6}" premium="7510" free="116\\d{3}" />
+
+ <!-- Czech Republic: 7-8 digits, starting with 9, plus EU:
+ http://www.o2.cz/osobni/en/services-by-alphabet/91670-premium_sms.html -->
+ <shortcode country="cz" premium="9\\d{6,7}" free="116\\d{3}" />
+
+ <!-- Germany: 4-5 digits plus 1232xxx (premium codes from http://www.vodafone.de/infofaxe/537.pdf and http://premiumdienste.eplus.de/pdf/kodex.pdf), plus EU. To keep the premium regex from being too large, it only includes payment processors that have been used by SMS malware, with the regular pattern matching the other premium short codes. -->
+ <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}" />
+
+ <!-- Denmark: see http://iprs.webspacecommerce.com/Denmark-Premium-Rate-Numbers -->
+ <shortcode country="dk" pattern="\\d{4,5}" premium="1\\d{3}" free="116\\d{3}" />
+
+ <!-- Estonia: short codes 3-5 digits starting with 1, plus premium 7 digit numbers starting with 90, plus EU.
+ http://www.tja.ee/public/documents/Elektrooniline_side/Oigusaktid/ENG/Estonian_Numbering_Plan_annex_06_09_2010.mht -->
+ <shortcode country="ee" pattern="1\\d{2,4}" premium="90\\d{5}|15330|1701[0-3]" free="116\\d{3}" />
+
+ <!-- Spain: 5-6 digits: 25xxx, 27xxx, 280xx, 35xxx, 37xxx, 795xxx, 797xxx, 995xxx, 997xxx, plus EU.
+ http://www.legallink.es/?q=en/content/which-current-regulatory-status-premium-rate-services-spain -->
+ <shortcode country="es" premium="[23][57]\\d{3}|280\\d{2}|[79]9[57]\\d{3}" free="116\\d{3}" />
+
+ <!-- Finland: 5-6 digits, premium 0600, 0700: http://en.wikipedia.org/wiki/Telephone_numbers_in_Finland -->
+ <shortcode country="fi" pattern="\\d{5,6}" premium="0600.*|0700.*|171(?:59|63)" free="116\\d{3}" />
+
+ <!-- France: 5 digits, free: 3xxxx, premium [4-8]xxxx, plus EU:
+ http://clients.txtnation.com/entries/161972-france-premium-sms-short-code-requirements -->
+ <shortcode country="fr" premium="[4-8]\\d{4}" free="3\\d{4}|116\\d{3}" />
+
+ <!-- United Kingdom (Great Britain): 4-6 digits, common codes [5-8]xxxx, plus EU:
+ http://www.short-codes.com/media/Co-regulatoryCodeofPracticeforcommonshortcodes170206.pdf -->
+ <shortcode country="gb" pattern="\\d{4,6}" premium="[5-8]\\d{4}" free="116\\d{3}" />
+
+ <!-- Georgia: 4 digits, known premium codes listed -->
+ <shortcode country="ge" pattern="\\d{4}" premium="801[234]|888[239]" />
+
+ <!-- Greece: 5 digits (54xxx, 19yxx, x=0-9, y=0-5): http://www.cmtelecom.com/premium-sms/greece -->
+ <shortcode country="gr" pattern="\\d{5}" premium="54\\d{3}|19[0-5]\\d{2}" free="116\\d{3}" />
+
+ <!-- Hungary: 4 or 10 digits starting with 1 or 0, plus EU:
+ http://clients.txtnation.com/entries/209633-hungary-premium-sms-short-code-regulations -->
+ <shortcode country="hu" pattern="[01](?:\\d{3}|\\d{9})" premium="0691227910|1784" free="116\\d{3}" />
+
+ <!-- Ireland: 5 digits, 5xxxx (50xxx=free, 5[12]xxx=standard), plus EU:
+ http://www.comreg.ie/_fileupload/publications/ComReg1117.pdf -->
+ <shortcode country="ie" pattern="\\d{5}" premium="5[3-9]\\d{3}" free="50\\d{3}|116\\d{3}" standard="5[12]\\d{3}" />
+
+ <!-- Israel: 4 digits, known premium codes listed -->
+ <shortcode country="il" pattern="\\d{4}" premium="4422|4545" />
+
+ <!-- Italy: 5 digits (premium=4xxxx), plus EU:
+ http://clients.txtnation.com/attachments/token/di5kfblvubttvlw/?name=Italy_CASP_EN.pdf -->
+ <shortcode country="it" pattern="\\d{5}" premium="4\\d{4}" free="116\\d{3}" />
+
+ <!-- Kyrgyzstan: 4 digits, known premium codes listed -->
+ <shortcode country="kg" pattern="\\d{4}" premium="415[2367]|444[69]" />
+
+ <!-- Kazakhstan: 4 digits, known premium codes listed: http://smscoin.net/info/pricing-kazakhstan/ -->
+ <shortcode country="kz" pattern="\\d{4}" premium="335[02]|4161|444[469]|77[2359]0|8444|919[3-5]|968[2-5]" />
+
+ <!-- Lithuania: 3-5 digits, known premium codes listed, plus EU -->
+ <shortcode country="lt" pattern="\\d{3,5}" premium="13[89]1|1394|16[34]5" free="116\\d{3}" />
+
+ <!-- Luxembourg: 5 digits, 6xxxx, plus EU:
+ http://www.luxgsm.lu/assets/files/filepage/file_1253803400.pdf -->
+ <shortcode country="lu" premium="6\\d{4}" free="116\\d{3}" />
+
+ <!-- Latvia: 4 digits, known premium codes listed, plus EU -->
+ <shortcode country="lv" pattern="\\d{4}" premium="18(?:19|63|7[1-4])" free="116\\d{3}" />
+
+ <!-- Mexico: 4-5 digits (not confirmed), known premium codes listed -->
+ <shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" />
+
+ <!-- Malaysia: 5 digits: http://www.skmm.gov.my/attachment/Consumer_Regulation/Mobile_Content_Services_FAQs.pdf -->
+ <shortcode country="my" pattern="\\d{5}" premium="32298|33776" />
+
+ <!-- The Netherlands, 4 digits, known premium codes listed, plus EU -->
+ <shortcode country="nl" pattern="\\d{4}" premium="4466|5040" free="116\\d{3}" />
+
+ <!-- Norway: 4-5 digits (not confirmed), known premium codes listed -->
+ <shortcode country="no" pattern="\\d{4,5}" premium="2201|222[67]" />
+
+ <!-- New Zealand: 3-4 digits, known premium codes listed -->
+ <shortcode country="nz" pattern="\\d{3,4}" premium="3903|8995" />
+
+ <!-- Poland: 4-5 digits (not confirmed), known premium codes listed, plus EU -->
+ <shortcode country="pl" pattern="\\d{4,5}" premium="74240|79(?:10|866)|92525" free="116\\d{3}" />
+
+ <!-- Portugal: 5 digits, plus EU:
+ http://clients.txtnation.com/entries/158326-portugal-premium-sms-short-code-regulations -->
+ <shortcode country="pt" premium="6[1289]\\d{3}" free="116\\d{3}" />
+
+ <!-- Romania: 4 digits, plus EU: http://www.simplus.ro/en/resources/glossary-of-terms/ -->
+ <shortcode country="ro" pattern="\\d{4}" premium="12(?:63|66|88)|13(?:14|80)" free="116\\d{3}" />
+
+ <!-- Russia: 4 digits, known premium codes listed: http://smscoin.net/info/pricing-russia/ -->
+ <shortcode country="ru" pattern="\\d{4}" premium="1(?:1[56]1|899)|2(?:09[57]|322|47[46]|880|990)|3[589]33|4161|44(?:4[3-9]|81)|77(?:33|81)" />
+
+ <!-- Sweden: 5 digits (72xxx), plus EU: http://www.viatel.se/en/premium-sms/ -->
+ <shortcode country="se" premium="72\\d{3}" free="116\\d{3}" />
+
+ <!-- Singapore: 5 digits: http://clients.txtnation.com/entries/306442-singapore-premium-sms-short-code-requirements
+ Free government directory info at 74688: http://app.sgdi.gov.sg/sms_help.asp -->
+ <shortcode country="sg" pattern="7\\d{4}" premium="73800" standard="74688" />
+
+ <!-- Slovenia: 4 digits (premium=3xxx, 6xxx, 8xxx), plus EU: http://www.cmtelecom.com/premium-sms/slovenia -->
+ <shortcode country="si" pattern="\\d{4}" premium="[368]\\d{3}" free="116\\d{3}" />
+
+ <!-- Slovakia: 4 digits (premium), plus EU: http://www.cmtelecom.com/premium-sms/slovakia -->
+ <shortcode country="sk" premium="\\d{4}" free="116\\d{3}" />
+
+ <!-- Tajikistan: 4 digits, known premium codes listed -->
+ <shortcode country="tj" pattern="\\d{4}" premium="11[3-7]1|4161|4333|444[689]" />
+
+ <!-- Ukraine: 4 digits, known premium codes listed -->
+ <shortcode country="ua" pattern="\\d{4}" premium="444[3-9]|70[579]4|7540" />
+
+ <!-- USA: 5-6 digits (premium codes from https://www.premiumsmsrefunds.com/ShortCodes.htm) -->
+ <shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" />
+
+</shortcodes>
diff --git a/docs/html/distribute/distribute_toc.cs b/docs/html/distribute/distribute_toc.cs
index 84103b9..ad3121c 100644
--- a/docs/html/distribute/distribute_toc.cs
+++ b/docs/html/distribute/distribute_toc.cs
@@ -28,9 +28,7 @@
<li><a href="<?cs var:toroot ?>distribute/googleplay/publish/preparing.html">
<span class="en">Publishing Checklist</span>
</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
- <span class="en">App Quality</span>
- </a></li>
+
</ul>
</li>
@@ -79,6 +77,26 @@
</ul>
</li>
+
+ <li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">
+ <span class="en">App Quality</span></a>
+ </div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/core.html">
+ <span class="en">Core App Quality</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/tablet.html">
+ <span class="en">Tablet App Quality</span>
+ </a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
+ <span class="en">Improving App Quality</span>
+ </a></li>
+
+ </ul>
+ </li>
+
+
<!--
<li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/after.html">
@@ -92,17 +110,17 @@
</li>
-->
-<!--
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/strategies/index.html">
- <span class="en">Strategies</span></a>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">
+ <span class="en">Spotlight</span></a>
</div>
<ul>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/featuring.html">Featuring</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">App Quality</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/tablets.html">
+ <span class="en">Tablet Stories</span>
+ </a></li>
</ul>
</li>
--->
+
<li class="nav-section">
<div class="nav-section-header empty">
<a href="<?cs var:toroot ?>distribute/open.html">
diff --git a/docs/html/distribute/googleplay/about/monetizing.jd b/docs/html/distribute/googleplay/about/monetizing.jd
index 4980eda..d5c6dfa 100644
--- a/docs/html/distribute/googleplay/about/monetizing.jd
+++ b/docs/html/distribute/googleplay/about/monetizing.jd
@@ -42,7 +42,7 @@
<h3 id="payment-methods">Convenient payment options</h3>
<p>Users can purchase your products on Google Play using several convenient
-payment methods—credit cards, Direct Carrier Billing, and Google Play balance.</p>
+payment methods—credit cards, Direct Carrier Billing, gift cards, and Google Play balance.</p>
<p><span style="font-weight:500">Credit card</span> is the most common method of payment. Users can pay using any credit card
that they’ve registered in Google Play. To make it easy for users to get started,
@@ -52,8 +52,9 @@
<div class="sidebox">
<h2>Payment methods on Google Play</h2>
<ul>
-<li>Credit Card</li>
+<li>Credit card</li>
<li>Direct Carrier Billing</li>
+<li>Gift card</li>
<li>Google Play balance (stored value)</li>
</ul>
</div>
diff --git a/docs/html/distribute/googleplay/publish/preparing.jd b/docs/html/distribute/googleplay/publish/preparing.jd
index 6ea0f53..463343d 100644
--- a/docs/html/distribute/googleplay/publish/preparing.jd
+++ b/docs/html/distribute/googleplay/publish/preparing.jd
@@ -6,20 +6,21 @@
<ol>
<li><a href="#process">1. Understand the publishing process</a></li>
<li><a href="#policies">2. Understand Google Play policies</a></li>
-<li><a href="#rating">3. Determine your content rating</a></li>
-<li><a href="#countries">4. Determine country distribution</a></li>
-<li><a href="#size">5. Confirm the app's overall size</a></li>
-<li><a href="#compatibility">6. Confirm app compatibility ranges</a></li>
-<li><a href="#free-priced">7. Decide on free or priced</a></li>
-<li><a href="#inapp-billing">8. Consider In-app Billing</a></li>
-<li><a href="#pricing">9. Set prices for your apps</a></li>
-<li><a href="#localize">10. Start localization</a></li>
-<li><a href="#localize">11. Prepare promotional graphics</a></li>
-<li><a href="#apk">12. Build the release-ready APK</a></li>
-<li><a href="#product-page">13. Complete the product details</a></li>
-<li><a href="#badges">14. Use Google Play badges and links to your promotional campaigns</a></li>
-<li><a href="#final-checks">15. Final checks and publishing</a></li>
-<li><a href="#support">16. Support users after launch</a></li>
+<li><a href="#core-app-quality">3. Test for Core App Quality</a></li>
+<li><a href="#rating">4. Determine your content rating</a></li>
+<li><a href="#countries">5. Determine country distribution</a></li>
+<li><a href="#size">6. Confirm the app's overall size</a></li>
+<li><a href="#compatibility">7. Confirm app compatibility ranges</a></li>
+<li><a href="#free-priced">8. Decide on free or priced</a></li>
+<li><a href="#inapp-billing">9. Consider In-app Billing</a></li>
+<li><a href="#pricing">10. Set prices for your apps</a></li>
+<li><a href="#localize">11. Start localization early</a></li>
+<li><a href="#localize">12. Prepare promotional graphics</a></li>
+<li><a href="#apk">13. Build the release-ready APK</a></li>
+<li><a href="#product-page">14. Complete the product details</a></li>
+<li><a href="#badges">15. Use Google Play badges</a></li>
+<li><a href="#final-checks">16. Final checks and publishing</a></li>
+<li><a href="#support">17. Support users after launch</a></li>
</ol>
</div></div>
@@ -86,7 +87,39 @@
</tr>
</table>
-<h2 id="rating">3. Determine your app's content rating</h2>
+<h2 id="core-app-quality">3. Test for Core App Quality</h2>
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+it meets the basic quality expectations for all Android apps, on all of the devices that you
+are targeting. You can check your app's quality by setting up a test
+environment and testing the app against a short set of <strong>core app quality criteria</strong>.
+For complete information, see the <a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Guidelines</a>.
+</p>
+
+<p>If your app is targeting tablet devices, make sure that it delivers a rich, compelling
+experience to your tablet customers. See the <a
+href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a>
+for recommendations on ways to optimize your app for tablets.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality
+Guidelines</a></strong> — A set of core quality criteria that all Android
+apps should meet on all targeted devices.</li>
+<li><strong><a
+href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality
+Checklist</a></strong> — A set recommendations for delivering the best
+possible experience to tablet users.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="rating">4. Determine your app's content rating</h2>
<p>Google Play requires you to set a content rating for your app, which informs
Google Play users of its maturity level. Before you publish, you should confirm
@@ -115,7 +148,7 @@
</tr>
</table>
-<h2 id="countries">4. Determine country distribution</h2>
+<h2 id="countries">5. Determine country distribution</h2>
<p>Google Play lets you control what countries and territories your app is
distributed to. For widest reach and the largest potential customer base, you
@@ -149,7 +182,7 @@
</tr>
</table>
-<h2 id="size">5. Confirm the app's overall size</h2>
+<h2 id="size">6. Confirm the app's overall size</h2>
<p>The overall size of your app can affect its design and how you publish it on
Google Play. Currently, the maximum size for an APK published on Google Play is
@@ -180,7 +213,7 @@
</tr>
</table>
-<h2 id="compatibility">6. Confirm the app's platform and screen compatibility ranges</h2>
+<h2 id="compatibility">7. Confirm the app's platform and screen compatibility ranges</h2>
<p>Before publishing, it's important to make sure that your app is designed to
run properly on the Android platform versions and device screen sizes that you
@@ -217,7 +250,7 @@
</tr>
</table>
-<h2 id="free-priced">7. Decide whether your app will be free or priced</h2>
+<h2 id="free-priced">8. Decide whether your app will be free or priced</h2>
<p>On Google Play, you can publish apps as free to download or priced. Free apps
can be downloaded by any Android user in Google Play.
@@ -249,7 +282,7 @@
</tr>
</table>
-<h2 id="inapp-billing">8. Consider using In-app Billing</h2>
+<h2 id="inapp-billing">9. Consider using In-app Billing</h2>
<p>Google Play <a href="{@docRoot}guide/google/play/billing/index.html">In-app
Billing</a> lets you sell digital content in your applications. You can use the
@@ -275,7 +308,7 @@
</tr>
</table>
-<h2 id="pricing">9. Set prices for your products</h2>
+<h2 id="pricing">10. Set prices for your products</h2>
<p>If your app is priced or you will sell in-app products, Google Play lets you
set prices for your products in a variety of currencies, for users in markets
@@ -308,7 +341,7 @@
</tr>
</table>
-<h2 id="localize">10. Start localization</h2>
+<h2 id="localize">11. Start localization</h2>
<p>With your country targeting in mind, it's a good idea to assess your localization
needs and start the work of localizing well in advance of your target
@@ -344,7 +377,7 @@
</tr>
</table>
-<h2 id="graphics">11. Prepare promotional graphics</h2>
+<h2 id="graphics">12. Prepare promotional graphics</h2>
<p>When you publish on Google Play, you can supply a variety of high-quality
graphic assets to showcase your app or brand. After you publish, these appear on
@@ -375,7 +408,7 @@
</tr>
</table>
-<h2 id="apk">12. Build and upload the release-ready APK</h2>
+<h2 id="apk">13. Build and upload the release-ready APK</h2>
<p>When you are satisfied that your app meets your UI, compatibility, and
quality requirements, you can build the release-ready version of the app. The
@@ -407,7 +440,7 @@
</tr>
</table>
-<h2 id="product-page">13. Complete the app's product details</h2>
+<h2 id="product-page">14. Complete the app's product details</h2>
<p>On Google Play, your app's product information is shown to users on its
product details page, the page that users visit to learn more about your app and
@@ -431,6 +464,10 @@
page, make sure that you can enter or upload it to the Developer Console, until
the page is complete and ready for publishing. </p>
+<p>If your app is targeting tablet devices, make sure to include at least one screen
+shot of the app running on a tablet, and highlight your app's support for tablets
+in the app description, release notes, promotional campaigns, and elsewhere.</p>
+
<table>
<tr>
<td><p>Related resources:</p>
@@ -444,7 +481,7 @@
</tr>
</table>
-<h2 id="badges">14. Use Google Play badges and links in your promotional
+<h2 id="badges">15. Use Google Play badges and links in your promotional
campaigns</h2>
<p>Google Play badges give you an officially branded way of promoting your app
@@ -473,7 +510,7 @@
</tr>
</table>
-<h2 id="final-checks">15. Final checks and publishing</h2>
+<h2 id="final-checks">16. Final checks and publishing</h2>
<p>When you think you are ready to publish, sign in to the Developer Console and take a few moments for a few
final checks:</p>
@@ -511,7 +548,7 @@
</table>
-<h2 id="support">16. Support users after launch</h2>
+<h2 id="support">17. Support users after launch</h2>
<p>After you publish an app or an app update, it's crucial for you to support
your customers. Prompt and courteous support can provide a better experience for
diff --git a/docs/html/distribute/googleplay/quality/core.jd b/docs/html/distribute/googleplay/quality/core.jd
new file mode 100644
index 0000000..3d017e6
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/core.jd
@@ -0,0 +1,783 @@
+page.title=Core App Quality Guidelines
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Quality Criteria</h2>
+ <ol>
+ <li><a href="#ux">Design and Interaction</a></li>
+ <li><a href="#fn">Functionality</a></li>
+ <li><a href="#ps">Performance and Stability</a></li>
+ <li><a href="#listing">Google Play</a></li>
+
+ </ol>
+
+ <h2>Testing</h2>
+ <ol>
+ <li><a href="#test-environment">Setting Up a Test Environment</a></li>
+ <li><a href="#tests">Test Procedures</a></li>
+ </ol>
+
+ <h2>You Should Also Read</h2>
+ <ol>
+ <li><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a></li>
+ <li><a href="{@docRoot}distribute/googleplay/strategies/app-quality.html">Improving App Quality</a></li>
+ </ol>
+
+
+</div>
+</div>
+
+<p><em>App quality</em> directly influences the long-term success of your app
+— in terms of installs, user rating and reviews, engagement, and user
+retention. Android users expect high quality design and performance from apps,
+even more so if they puchased the apps or purchased their in-app products.</p>
+
+<p>This document helps you assess basic aspects of quality in your app through a
+compact set of <em>core app quality criteria</em> and associated tests. All
+Android apps should meet these criteria.</p>
+
+<p>Before launching your app, make sure to test it against these criteria to
+ensure that it functions well on many devices, meets Android standards for
+navigation and design, and is prepared for promotional opportunities in the
+Google Play Store. Your testing will go well beyond what's described here
+— the purpose of this document is to specify the essential characteristics
+of basic quality so that you can include them in your test plans.</p>
+
+<p>If your app is targeting tablet devices, make sure that it delivers a rich,
+compelling experience to your tablet customers. See the <a
+href="/distribute/googleplay/quality/tablet.html">Tablet App Quality
+Checklist</a> for recommendations on ways to optimize your app for tablets.</p>
+
+
+<h2 id="ux">Visual Design and User Interaction</h2>
+
+<p>These criteria ensure that your app provides standard Android visual design
+and interaction patterns where appropriate, for a consistent and intuitive
+user experience.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+
+
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+ <tr id="cg7">
+ <td>Standard design</td>
+ <td>
+ UX-B1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App follows <a href="{@docRoot}design/index.html">Android Design</a> guidelines and uses common <a href="{@docRoot}design/patterns/index.html">UI patterns and icons</a>:</p>
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>App does not redefine the expected function of a system icon (such as the Back button).</li>
+ <li>App does not replace a system icon with a completely different icon if it triggers the standard UI behavior. </li>
+ <li>If the app provides a customized version of a standard system icon, the icon strongly resembles the system icon and triggers the standard system behavior.</li>
+ <li>App does not redefine or misuse Android UI patterns, such that icons or behaviors could be misleading or confusing to users.</li>
+ </ol>
+ </td>
+ <td><a href="#core">CR-all</a></td>
+ </tr>
+
+
+ <tr>
+ <td rowspan="3">Navigation</td>
+ <td id="cn1">
+ UX-N1
+ </td>
+
+ <td>
+ <p>App supports standard system <a href="{@docRoot}design/patterns/navigation.html">Back button navigation</a> and does not make use of any custom, on-screen "Back button" prompts.</p>
+ </td>
+ <td><a href="#core">CR-3</a></td>
+ </tr>
+ <tr>
+ <td id="cn2">
+ UX-N2
+ </td>
+ <td>
+ <p>All dialogs are dismissable using the Back button.</p>
+ </td>
+ <td><a href="#core">CR-3</a></td>
+ </tr>
+
+ <tr id="cn4">
+ <td>
+ UX-N3
+ </td>
+ <td>
+ Pressing the Home button at any point navigates to the Home screen of the device.
+ </td>
+ <td><a href="#core">CR-1</a></td>
+ </tr>
+ </table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/index.html">Android Design</a></strong> — Overview of design and user experience best practices for Android apps. </li>
+<li><strong><a href="{@docRoot}design/patterns/navigation.html">Navigation with Back and Up</a></strong> — Android Design document describing standard navigation patterns and related topics. </li>
+<li><strong><a href="{@docRoot}design/patterns/actionbar.html">Action Bar</a></strong> — Android Design document describing how to use the Action Bar. </li>
+<li><strong><a href="{@docRoot}design/style/iconography.html">Iconography</a></strong> — Android Design document that shows how to use various types of icons.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="fn">Functionality</h2>
+
+<p>These criteria ensure that your app provides expected functional behavior with the appropriate level of permissions. </p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+
+
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+
+ <tr>
+ <td rowspan="2">Permissions</td>
+ <td>
+ FN-P1
+ </td>
+ <td>App requests only the <em>absolute minimum</em> permissions that it needs to support core functionality.
+ </td>
+ <td rowspan="2"><a href="#core">CR-11</a></td>
+ </tr>
+ <tr>
+ <td>
+ FN-P2
+ </td>
+ <td><p style="margin-bottom:.5em;">App does not request permissions to access sensitive data (such as Contacts or the System Log) or services that can cost the user money (such as the Dialer or SMS), unless related to a core capability of the app.
+ </td>
+ </tr>
+
+ <tr>
+ <td>Install location</td>
+ <td>
+ FN-L1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App functions normally when installed on SD card (if supported by app).</p>
+
+ <p style="margin-bottom:.25em;">Supporting installation to SD card is recommended for most large apps (10MB+). See the <a href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a> developer guide for information about which types of apps should support installation to SD card.</p>
+ </td>
+
+ <td><a href="#SD-1">SD-1</a>
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">Audio</td>
+ <td id="cg1">
+ FN-A1
+ </td>
+
+ <td>
+ Audio does not play when the screen is off, unless this is a core feature (for example, the app is a music player).
+ </td>
+ <td><a href="#core">CR-7</a></td>
+ </tr>
+ <tr id="cg2">
+ <td>
+ FN-A2
+ </td>
+ <td>
+ Audio does not <a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">play behind the lock screen</a>, unless this is a core feature.
+ </td>
+ <td><a href="#core">CR-8</a></td>
+ </tr>
+ <tr id="cg3">
+ <td>
+ FN-A3
+ </td>
+ <td>
+ Audio does not play on the home screen or over another app, unless this is a core feature.
+ </td>
+ <td><a href="#core">CR-1, <br />CR-2</a></td>
+ </tr>
+ <tr id="cg4">
+ <td>
+ FN-A4
+ </td>
+ <td>
+ Audio resumes when the app returns to the foreground, or indicates to the user that playback is in a paused state.
+ </td>
+ <td><a href="#core">CR-1, CR-8</a></td>
+ </tr>
+ <tr id="cg5">
+ <td rowspan="3">UI and Graphics</td>
+ <td>
+ FN-U1
+ </td>
+
+<td>
+ <p style="margin-bottom:.5em;">App supports both landscape and portrait orientations (if possible).</em></p>
+
+ <p style="margin-bottom:.25em;">Orientations expose largely the same features and actions and preserve functional parity.
+ Minor changes in content or views are acceptable.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+ <tr id="cg5">
+ <td>
+ FN-U2
+ </td>
+
+<td>
+ <p style="margin-bottom:.5em;">App uses the whole screen in both orientations and does not letterbox to account for orientation changes.</em></p>
+ <p style="margin-bottom:.25em;">Minor letterboxing to compensate for small variations in screen geometry is acceptable.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+ <tr id="cg7">
+ <td>
+ FN-U3
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App correctly handles rapid transitions between display orientations without rendering problems.</p>
+ </td>
+ <td><a href="#core">CR-5</a></td>
+ </tr>
+
+ <tr id="cg8">
+ <td rowspan="2">User/app state</td>
+ <td>
+ FN-S1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App should not leave any services running when the app is in the background, unless related to a core capability of the app.</p>
+ <p style="margin-bottom:.25em;">For example, the app should not leave services running to maintain a network connection for notifications, to maintain a Bluetooth connection, or to keep the GPS powered-on.</p>
+ </td>
+ <td><a href="#core">CR-6</a></td>
+ </tr>
+
+
+ <tr id="cn3">
+ <td>
+ FN-S2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App correctly preserves and restores user or app state.</p>
+ <p style="margin-bottom:.25em;">App preserves user or app state when leaving the foreground and prevents accidental data loss due to back-navigation and other state changes. When returning to the foreground, the app must restore the preserved state and any significant stateful transaction that was pending, such as changes to editable fields, game progress, menus, videos, and other sections of the app or game.</p>
+ <ol style="margin-bottom:.25em;list-style-type:lower-alpha">
+ <li>When the app is resumed from the Recents app switcher, the app returns the user to the exact state in which it was last used.</li>
+ <li>When the app is resumed after the device wakes from sleep (locked) state, the app returns the user to the exact state in which it was last used.</li>
+ <li>When the app is relaunched from Home or All Apps, the app restores the app state as closely as possible to the previous state.</li>
+ <li>On Back keypresses, the app gives the user the option of saving any app or user state that would otherwise be lost on back-navigation.</li>
+ </ol>
+ </td>
+ <td><a href="#core">CR-1, CR-3, CR-5</a></td>
+ </tr>
+
+</table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">Making Android Apps that Play Nice</a></strong> — Developer blog post discussing the audio lifecycle and expected audio behaviors for Android apps. </li>
+<li><strong><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></strong> — Developer guide describing how to implement back-navigation.</li>
+<li><strong><a href="{@docRoot}training/basics/activity-lifecycle/recreating.html">Recreating an Activity</a></strong> — Android Training class the shows how to preserve and restore app state.</li>
+
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="ps">Performance and Stability</h2>
+
+<p>To ensure a high user rating, your app needs to perform well and stay
+responsive on all of the devices and form factors and screens that it is
+targeting. These criteria ensure that the app provides the basic performance,
+stability, and responsiveness expected by users.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+
+ <tr id="cg9">
+ <td>Stability</td>
+ <td>
+ PS-S1
+ </td>
+ <td>
+ App does not crash, force close, freeze, or otherwise function abnormally on any targeted device.
+ </td>
+ <td><a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a></td>
+ </tr>
+
+ <tr>
+ <td rowspan="2">Performance</td>
+ <td id="cp1">
+ PS-P1
+ </td>
+ <td>
+ App loads quickly or provides onscreen feedback to the user (a progress indicator or similar cue) if the app
+ takes longer than two seconds to load.
+ </td>
+ <td>
+ <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>
+ </td>
+ </tr>
+ <tr id="cp2">
+
+ <td>
+ PS-P2
+ </td>
+ <td>
+ With StrictMode enabled (see <a href="#strictmode">StrictMode Testing</a>, below), no red flashes (performance warnings from StrictMode) are visible when exercising the app, including
+ during game play, animations and UI transitions, and any other part of the app.
+ </td>
+ <td>
+ <a href="#PM-1">PM-1</a>
+ </td>
+ </tr>
+ <tr id="cp3">
+ <td>Media</td>
+ <td>
+ PS-M1
+ </td>
+ <td>
+ Music and video playback is smooth, without crackle, stutter, or other artifacts, during normal app usage and load.
+ </td>
+ <td>
+ <a href="#core">CR-all</a>, <a href="#SD-1">SD-1</a>, <a href="#HA-1">HA-1</a>
+ </td>
+ </tr>
+
+<tr id="cp4">
+ <td rowspan="2">Visual quality</td>
+ <td>
+ PS-V1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App displays graphics, text, images, and other UI elements without noticeable distortion, blurring, or pixelation.</p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>App provides high-quality graphics for all targeted screen sizes and form factors, including for <a href="{@docRoot}distribute/googleplay/quality/tablet.html">larger-screen devices such as tablets</a>.</li>
+ <li>No aliasing at the edges of menus, buttons, and other UI elements.</li>
+ </ol>
+ </td>
+ <td rowspan="2"><a href="#core">CR-all</a></td>
+ </tr>
+
+ <tr id="cp5">
+ <td>
+ PS-V2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App displays text and text blocks in an acceptable manner. </p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>Composition is acceptable in all supported form factors, including for larger-screen devices such as tablets.</li>
+ <li>No cut-off letters or words.</li>
+ <li>No improper word wraps within buttons or icons.</li>
+ <li>Sufficient spacing between text and surrounding elements.</li>
+ </ol>
+
+
+
+ </td>
+
+ </tr>
+
+
+
+
+</table>
+
+
+
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://android-developers.blogspot.com/2010/12/new-gingerbread-api-strictmode.html">Using StrictMode</a></strong> — Developer blog post discussing StrictMode and how to use it for performance monitoring in your app. </li>
+<li><strong><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a></strong> — Developer guide describing best practices for keeping your app responsive.</li>
+<li><strong><a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">Multithreading for Performance</a></strong> — Developer blog post discussing ways to improve performance through multi-threading.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="listing">Google Play</h2>
+
+<p>To launch your app successfully on Google Play, raise its ratings, and make
+sure that it is ready for promotional activities in the store, follow the
+criteria below.</p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Area
+ </th>
+ <th style="width:54px;">
+ ID
+ </th>
+ <th>
+ Description
+ </th>
+ <th style="width:54px;">
+ Tests
+ </th>
+ </tr>
+<tr>
+<td rowspan="2">Policies</td>
+ <td>
+ GP-P1
+ </td>
+ <td>
+ App strictly adheres to the terms of the <a href="http://play.google.com/about/developer-content-policy.html">Google Play Developer Content Policy</a> and does not offer inappropriate content, does not use intellectual property or brand of others, and so on.
+ </td>
+ <td>
+ <a href="#gp">GP-all</a>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td>
+ GP-P2
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App maturity level is set appropriately, based on the
+ <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">Content Rating Guidelines</a>.</p>
+
+ <p style="margin-bottom:.25em;">Especially, note that apps that request permission to use the device location cannot be given the maturity level "Everyone". </p>
+ </td>
+ <td>
+ <a href="#gp">GP-1</a>
+ </td>
+ </tr>
+
+
+ <tr>
+
+ <td rowspan="3">App Details Page</td>
+ <td>
+ GP-D1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">App feature graphic follows the guidelines outlined in this
+ <a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">blog post</a>. Make sure that:</p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>The app listing includes a high-quality feature graphic.</li>
+ <li>The feature graphic does not contain device images, screenshots, or small text that will be illegible when scaled down and displayed on the smallest screen size that your app is targeting.</li>
+ <li>The feature graphic does not resemble an advertisement.</li>
+ </ol>
+
+
+ </td>
+
+ <td>
+ <a href="#gp">GP-1, GP-2</a>
+ </td>
+
+
+ </tr>
+ <tr>
+ <td>
+ GP-D2
+ </td>
+ <td>
+ App screenshots and videos do not show or reference non-Android devices.
+ </td>
+ <td rowspan="2"><a href="#gp">GP-1</a></td>
+ </tr>
+
+ <tr>
+ <td>
+ GP-D3
+ </td>
+ <td>
+ App screenshots or videos do not
+ represent the content and experience of your app in a misleading way.
+ </td>
+ </tr>
+ <tr>
+ <td>User Support</td>
+ <td>
+ GP-X1
+ </td>
+ <td>Common user-reported bugs in the Reviews tab of the Google Play page are addressed if they are
+ reproducible and occur on many different devices. If a bug occurs on only a few devices,
+ you should still address it if those devices are particularly popular or new.
+ </td>
+
+ <td>
+ <a href="#gp">GP-1</a>
+ </td>
+
+ </tr>
+</table>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://play.google.com/about/developer-content-policy.html">Google Play Developer Program Policies</a></strong> — Guidelines for what is acceptable conent in Google Play. Please read and understand the and understand the policies before publishing.
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">Rating your application content for Google Play</a></strong> — Help Center document describing content ratings levels and how to choose the appropriate one for your app.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870">Graphic Assets for your Application
+</a></strong> — Details about the graphic assets you need to upload before publishing.</li>
+<li><strong><a href="http://android-developers.blogspot.com/2011/10/android-market-featured-image.html">Google Play Featured Image Guidelines
+</a></strong> — Blog post discussing how to create an attractive, effective Featured Image for your app.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113477&topic=2364761&ctx=topic">Supporting your users
+</a></strong> — Help Center document describing options for supporting users.</li>
+</ul>
+</td></tr>
+</table>
+
+
+<h2 id="test-environment">Setting Up a Test Environment</h2>
+
+<p>To assess the quality of your app, you need to set up a suitable
+hardware or emulator environment for testing. </p>
+
+<p>The ideal test environment would
+include a small number of actual hardware devices that represent key form
+factors and hardware/software combinations currently available to consumers.
+It's not necessary to test on <em>every</em> device that's on the market —
+rather, you should focus on a small number of representative devices, even using
+one or two devices per form factor. </p>
+
+<p>If you are not able to obtain actual hardware devices for testing, you should
+set up emulated devices (AVDs) to represent the most common form factors and
+hardware/software combinations. </p>
+
+<p>To go beyond basic testing, you can add more devices, more form factors, or
+new hardware/software combinations to your test environment. You can also
+increase the number or complexity of tests and quality criteria. </p>
+
+
+<h2 id="tests">
+ Test Procedures
+</h2>
+
+<p>These test procedures help you discover various types of quality issues in your app. You can combine the tests or integrate groups of tests together in your own test plans. See the sections above for references that associate specific criteria with specific tests. </p>
+
+<table>
+ <tr>
+ <th style="width:2px;">
+ Type
+ </th>
+ <th style="width:54px;">
+ Test
+ </th>
+ <th>
+ Description
+ </th>
+ </tr>
+ <tr>
+ <td rowspan="11" id="core">Core Suite</td>
+ <td>
+ CR-0
+ </td>
+ <td><p style="margin-bottom:.5em;">Navigate to all parts of the app — all screens, dialogs, settings, and all user flows. </p>
+
+ <ol style="margin-bottom:.5em;list-style-type:lower-alpha">
+ <li>If the application allows for editing or content creation, game play, or media playback, make sure to enter those flows to create or modify content.</li>
+ <li>While exercising the app, introduce transient changes in network connectivity, battery function, GPS or location availability, system load, and so on. </li>
+ </ol>
+ </td>
+ </tr>
+ <tr id="tg2">
+ <td id="core">
+ CR-1
+ </td>
+ <td>From each app screen, press the device's Home key, then re-launch the app from the All Apps screen.
+ </td>
+ </tr>
+ <tr id="CR-2">
+ <td>
+ CR-2
+ </td>
+ <td>From each app screen, switch to another running app and then return to the app under test using the Recents app switcher.
+ </td>
+ </tr>
+
+ <tr id="CR-3">
+ <td>
+ CR-3
+ </td>
+ <td>From each app screen (and dialogs), press the Back button.
+ </td>
+ </tr>
+ <tr id="CR-5">
+ <td>
+ CR-5
+ </td>
+ <td>From each app screen, rotate the device between landscape and portrait orientation at least three times.
+ </td>
+ </tr>
+ <tr id="CR-6">
+ <td>
+ CR-6
+ </td>
+ <td>Switch to another app to send the test app into the background. Go to Settings and check whether the test app has any services running while in the background. In Android 4.0 and higher, go to the Apps screen and find the app in the "Running" tab. In earlier versions, use "Manage Applications" to check for running services.
+ </td>
+ </tr>
+
+
+ <tr id="CR-7">
+ <td>
+ CR-7
+ </td>
+ <td>
+ Press the power button to put the device to sleep, then press the power button again to
+ awaken the screen.
+ </td>
+ </tr>
+ <tr id="CR-8">
+ <td>
+ CR-8
+ </td>
+ <td>
+ Set the device to lock when the power button is pressed. Press the power button to put the device to sleep, then press the power button again to
+ awaken the screen, then unlock the device.
+ </td>
+ </tr>
+ <tr id="CR-9">
+ <!-- Hardware features -->
+ <td>
+ CR-9
+ </td>
+ <td>
+ For devices that have slide-out keyboards, slide the keyboard in and out at least once. For devices that have keyboard docks, attach the device to the keyboard dock.
+ </td>
+ </tr>
+ <tr id="CR-10">
+ <td>
+ CR-10
+ </td>
+ <td>
+ For devices that have an external display port, plug-in the external display.
+ </td>
+ </tr>
+ <tr id="CR-11">
+ <td>
+ CR-11
+ </td>
+ <td>Examine the permissions requested by the app by going to Settings > App Info.
+ </td>
+ </tr>
+ <tr id="tg3">
+ <td>Install on SD Card</td>
+ <td>
+ SD-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with app installed to <a href="{@docRoot}guide/topics/data/install-location.html">device SD card</a> (if supported by app).</p>
+
+ <p style="margin-bottom:.25em;">To move the app to SD card, you can use Settings > App Info > Move to SD Card.</p>
+ </td>
+ </tr>
+
+
+
+ <tr id="tg3">
+ <td>Hardware acceleration</td>
+ <td>
+ HA-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with hardware acceleration enabled.</p>
+
+ <p style="margin-bottom:.25em;">To force-enable hardware acceleration (where supported by device), add <code>hardware-accelerated="true"</code> to the <code><application></code> in the app manifest and recompile.</p>
+ </td>
+ </tr>
+
+ <tr id="tg3">
+ <td>Performance Monitoring</td>
+ <td>
+ PM-1
+ </td>
+ <td>
+ <p style="margin-bottom:.5em;">Repeat <em>Core Suite</em> with StrictMode profiling enabled <a href="#strictmode">as described below</a>. <p style="margin-bottom:.25em;">Pay close attention to garbage collection and its impact on the user experience.</p>
+ </td>
+ </tr>
+
+ <tr id="tg4">
+ <td rowspan="3">Google Play</td>
+ <td>
+ GP-1
+ </td>
+ <td>
+ Sign into the <a href="https://play.google.com/apps/publish/">Developer Console</a> to review your developer profile, app description, screenshots, feature graphic, maturity settings, and user feedback.
+ </td>
+ </tr>
+ <tr id="tg4">
+ <td>
+ GP-2
+ </td>
+ <td>
+ Download your feature graphic and screenshots and scale them down to match the display sizes on the devices and form factors you are targeting.
+ </td>
+ </tr>
+ <tr id="tg4">
+ <td>
+ GP-4
+ </td>
+ <td>
+ Review all graphical assets, media, text, code libraries, and other content packaged in the app or expansion file download.
+ </td>
+ </tr>
+ <tr id="tg4">
+ <td>Payments</td>
+ <td>
+ GP-5
+ </td>
+ <td>
+ Navigate to all screens of your app and enter all in-app purchase flows.
+ </td>
+</tr>
+
+</table>
+
+<h3 id="strictmode">
+Testing with StrictMode
+</h3>
+
+<p>For performance testing, we recommend enabling <code><a href="{@docRoot}reference/android/os/StrictMode.html">StrictMode</a></code> in your app and using it to catch operations on the main thread and other threads that could affect performance, network accesses, file reads/writes, and so on.
+
+You can set up a monitoring policy per thread using the <code><a href="{@docRoot}reference/android/os/StrictMode.ThreadPolicy.Builder.html">ThreadPolicy builder</a></code> and enable all supported monitoring in the <code>ThreadPolicy</code> using <code><a href="{@docRoot}reference/android/os/StrictMode.ThreadPolicy.Builder.html#detectAll()">detectAll()</a></code>.</p>
+
+<p>Make sure to enable <strong>visual notification</strong> of policy violations for the <code>ThreadPolicy</code> using <code><a href="{@docRoot}reference/android/os/StrictMode.ThreadPolicy.Builder.html#penaltyFlashScreen()">penaltyFlashScreen()</a></code>.</p>
+
diff --git a/docs/html/distribute/googleplay/quality/index.jd b/docs/html/distribute/googleplay/quality/index.jd
new file mode 100644
index 0000000..ffbcbab
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/index.jd
@@ -0,0 +1,46 @@
+page.title=App Quality
+@jd:body
+
+<p><em>App quality</em> directly influences the long-term success of your app
+— in terms of installs, user rating and reviews, engagement, and user
+retention. Android users expect high quality from apps, even more so if they
+puchased the apps or purchased their in-app products. At the same time, they
+enjoy and value apps that put a priority on high quality and continuous
+improvement.</p>
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+the app meets the basic quality expectations of users, across all of the form
+factors and device types that the app is targeting. The documents in this
+section help you assess your app's fundamental quality and they provide
+resources to help you address issues that you find. </p>
+
+<div class="vspace size-1">
+
+</div>
+<div class="layout-content-row">
+ <div class="layout-content-col span-4">
+ <h4>
+ Core App Quality
+ </h4>
+ <p>
+ A set of core quality criteria that all Android apps should meet on all targeted devices.
+ </p><a href="{@docRoot}distribute/googleplay/quality/core.html">Learn more »</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Tablet App Quality
+ </h4>
+ <p>
+ A set recommendations for delivering the best possible experience to tablet users.
+ </p><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Learn more »</a>
+ </div>
+ <div class="layout-content-col span-4">
+ <h4>
+ Improving App Quality
+ </h4>
+ <p>
+ Tips on continuously improving your app's quality, ratings, reviews, downloads, and engagement.
+ </p><a href="{@docRoot}distribute/googleplay/strategies/app-quality.html">Learn more
+ »</a>
+ </div>
+</div>
diff --git a/docs/html/distribute/googleplay/quality/tablet.jd b/docs/html/distribute/googleplay/quality/tablet.jd
new file mode 100644
index 0000000..b8a7a60
--- /dev/null
+++ b/docs/html/distribute/googleplay/quality/tablet.jd
@@ -0,0 +1,555 @@
+page.title=Tablet App Quality Checklist
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Checklist</h2>
+<ol>
+
+<li><a href="#core-app-quality">1. Test for Core App Quality</a></li>
+<li><a href="#optimize-layouts">2. Optimize your layouts</a></li>
+<li><a href="#use-extra-space">3. Use the extra screen area</a></li>
+<li><a href="#use-tablet-icons">4. Use assets designed for tablets</a></li>
+<li><a href="#adjust-font-sizes">5. Adjust fonts and touch targets</a></li>
+<li><a href="#adjust-widgets">6. Adjust homescreen widgets</a></li>
+<li><a href="#offer-full-feature-set">7. Offer the app's full feature set</a></li>
+<li><a href="#hardware-requirements">8. Don’t require hardware features</a></li>
+<li><a href="#support-screens">9. Declare tablet screen support</a></li>
+<li><a href="#google-play">10. Follow best practices for publishing in Google Play</a></li>
+
+</ol>
+<h2>Testing</h2>
+<ol>
+<li><a href="#test-environment">Setting Up a Test Environment</a></li>
+</ol>
+</div></div>
+
+
+<p>Before you publish an app on Google Play, it's important to make sure that
+the app meets the basic expectations of tablet users, through compelling features
+and an intuitive, well-designed UI. </p>
+
+<p>Tablets are a growing part of the Android installed base that offers new
+opportunities for <a
+href="{@docRoot}distribute/googleplay/spotlight/tablets.html">user engagement
+and monetization</a>. If your app is targeting tablet users, this document helps
+you focus on key aspects of quality, feature set, and UI that can have a
+significant impact on the app's success. Each focus area is given as checklist
+item, with each one comprising several smaller tasks or best practices.</p>
+
+<p>Although the checklist tasks below are numbered for convenience,
+you can handle them in any order and address them to the extent that you feel
+is right for your app. In the interest of delivering the best possible product
+to your customers, follow the checklist recommendations
+to the greatest extent possible. </p>
+
+<p>As you move through the checklist, you'll find links to support resources
+that can help you address the topics raised in each task.</p>
+
+
+<h2 id="core-app-quality">1. Test for Core App Quality</h2>
+
+<p>The first step in delivering a great tablet app experience is making sure
+that it meets the <em>core app
+quality criteria</em> for all of the devices and form factors that the app is
+targeting. For complete information, see the <a
+href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Checklist</a>.
+</p>
+
+<p>To assess the quality of your app on tablets — both for core app quality
+and tablet app quality — you need to set up a suitable
+hardware or emulator environment for testing. For more information,
+see <a href="#test-environment">Setting Up a Test Environment</a>.</p>
+
+
+<h2 id="optimize-layouts">2. Optimize your layouts for larger screens</h2>
+
+<p>Android makes it easy to develop an app that runs well on a wide range of
+device screen sizes and form factors. This broad compatibility works in your
+favor, since it helps you design a single app that you can distribute widely to
+all of your targeted devices. However, to give your users the best possible
+experience on each screen configuration — in particular on tablets
+— you need to optimize your layouts and other UI components for each
+targeted screen configuration. On tablets, optimizing your UI lets you take
+full advantage of the additional screen available, such as to offer new features,
+present new content, or enhance the experience in other ways to deepen user
+engagement.</p>
+
+<p>If you developed your app for handsets and now want to distribute it to
+tablets, you can start by making minor adjustments to your layouts, fonts, and
+spacing. In some cases — such as for 7-inch tablets or for a game with
+large canvas — these adjustments may be all
+you need to make your app look great. In other cases, such as for larger
+tablets, you can redesign parts of your UI to replace "stretched UI" with an
+efficient multipane UI, easier navigation, and additional content. </p>
+
+<p>Here are some suggestions:</p>
+
+<div style="width:390px;float:right;margin:1.5em;margin-top:0em;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png" style="width:390px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:0em .5em .5em 2em"><span
+style="font-weight:500;">Get rid of "stretched" UI</span>: On tablets, single-pane layouts lead to awkward whitespace and excessive line lengths. Use padding to reduce the width of UI elements and consider using multi-pane layouts.</p>
+</div>
+
+<ul>
+<li>Provide custom layouts as needed for <code>large</code> and
+<code>xlarge</code> screens. You can also provide layouts that are loaded based
+on the screen's <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">shortest
+dimension</a> or the <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">minimum
+available width and height</a>. </li>
+<li>At a minimum, customize dimensions such as font sizes, margins, spacing for
+larger screens, to improve use of space and content legibility. </li>
+<li>Adjust positioning of UI controls so that they are easily accessible to
+users when holding a tablet, such as toward the sides when in
+landscape orientation.</li>
+<li>Padding of UI elements should normally be larger on tablets than on handsets. A
+<a href="{@docRoot}design/style/metrics-grids.html#48dp-rhythm">48dp rhythm</a> (and a 16dp
+grid) is recommended.</li>
+<li>Adequately pad text content so that it is not aligned directly along screen edges.
+Use a minimum <code>16dp</code> padding around content near screen edges.</li>
+</ul>
+
+<p>In particular, make sure that your layouts do not appear "stretched"
+across the screen:</p>
+
+<ul>
+<li>Lines of text should not be excessively long — optimize for a maximum
+100 characters per line, with best results between 50 and 75.</li>
+<li>ListViews and menus should not use the full screen width.</li>
+<li>Use padding to manage the widths of onscreen elements or switch to a
+multi-pane UI for tablets (see next section).</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
+</a></strong> — Android Design document that explains ....</li>
+<li><strong><a href="http://developer.android.com/design/style/devices-displays.html">Devices and Displays
+</a></strong> — Android Design document that explains ....</li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> — Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="http://developer.android.com/guide/practices/screens_support.html#ConfigurationExamples">Configuration examples
+</a></strong> — Examples of how to declare layouts and other resources for specific screen sizes.</a></li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="use-extra-space">3. Take advantage of extra screen area available on tablets</h2>
+
+<div style="width:290px;float:right;margin:1.5em;margin-bottom:0;margin-top:0;">
+<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png" style="width:280px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:0em .5em .5em 1.5em"><span
+style="font-weight:500;">Multi-pane layouts</span> result in a better visual balance on tablet screens, while offering more utility and legibility.</p>
+</div>
+
+<p>Tablet screens provide significantly more screen real estate to your app,
+especially when in landscape orientation. In particular, 10-inch tablets offer a
+greatly expanded area, but even 7-inch tablets give you more space for
+displaying content and engaging users. </p>
+
+<p>As you consider the UI of your app when running on tablets, make sure that it
+is taking full advantage of extra screen area available on tablets. Here are
+some suggestions:</p>
+
+<ul>
+<li>Look for opportunities to include additional content or use an alternative
+treatment of existing content.</li>
+<li>Use <a href="{@docRoot}design/patterns/multi-pane-layouts.html">multi-pane
+layouts</a> on tablet screens to combine single views into a compound view. This
+lets you use the additional screen area more efficiently and makes it easier for
+users to navigate your app. </li>
+<li>Plan how you want the panels of your compound views to reorganize when
+screen orientation changes.</li>
+
+
+
+<div style="width:490px;margin:1.5em auto 1.5em 0;">
+
+<div style="">
+<img src="{@docRoot}images/ui-ex-single-panes.png" style="width:490px;padding:4px;margin-bottom:0em;" align="middle">
+<img src="{@docRoot}images/ui-ex-multi-pane.png" style="width:490px;padding:4px;margin-bottom:0em;">
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Compound views</span> combine several single views from a handset UI <em>(above)</em> into a richer, more efficient UI for tablets <em>(below)</em>. </p>
+</div>
+</div>
+
+<li>While a single screen is implemented as an {@link android.app.Activity}
+subclass, consider implementing individual content panels as {@link
+android.app.Fragment} subclasses. This lets you maximize code reuse across
+different form factors and across screens that share content.</li>
+<li>Decide on which screen sizes you'll use a multi-pane UI, then provide the
+different layouts in the appropriate screen size buckets (such as
+<code>large</code>/<code>xlarge</code>) or minimum screen widths (such as
+<code>sw600dp</code>/<code>sw720</code>).</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a></strong> — Android Design guide for using multi-pane UI, including examples of how to flatten navigation and integrate more content into your tablet UI.</li>
+<li><strong><a href="{@docRoot}training/design-navigation/multiple-sizes.html">Planning for Multiple Touchscreen Sizes</a></strong> — Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
+<li><strong><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></strong> — Android Training class that walks you through the essentials of planning an intuitive, effective navigation for tablets and other devices. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="use-tablet-icons">4. Use Icons and other assets that are designed for tablet screens</h2>
+
+<p>So that your app looks its best, make sure to use icons and other bitmap
+assets that are created specifically for the densities used by tablet screens.
+Specifically, you should create sets of alternative bitmap drawables for each
+density in the range commonly supported by tablets.</p>
+
+<p class="table-caption">Raw asset sizes for icon types.<table>
+<tr>
+<th>Density </th>
+<th colspa>Launcher</th>
+<th>Action Bar</th>
+<th>Small/Contextual</th>
+<th>Notification</th>
+</tr>
+<tr>
+<td><code>mdpi</code></td>
+<td>48x48px</td>
+<td>32x32px</td>
+<td>16x16px</td>
+<td>24x24px</td>
+</tr>
+<tr>
+<td><code>hdpi</code></td>
+<td>72x72px</td>
+<td>48x48px</td>
+<td>24x24px</td>
+<td>36x36px</td>
+</tr>
+<tr>
+<td><code>tvdpi</code></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+<td><em>(use hdpi)</em></td>
+</tr>
+<tr>
+<td><code>xhdpi</code></td>
+<td>96x96px</td>
+<td>64x64px</td>
+<td>32x32px</td>
+<td>48x48px</td>
+</tr>
+
+</table>
+
+<p>Other points to consider: </p>
+
+<ul>
+<li>Icons in the action bar, notifications, and launcher should be designed
+according to the icon design guidelines and have the same physical size on
+tablets as on phones.</li>
+<li>Use density-specific <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">
+resource qualifiers</a> to ensure that the proper set of alternative resources
+gets loaded.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}design/style/iconography.html">Iconography</a></strong> — Android Design document that shows how to use various types of icons.</li>
+<li><strong><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></strong> — Developer documentation on how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> — API Guide documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="{@docRoot}training/basics/supporting-devices/screens.html">Supporting Different Screens</a></strong> — Android Training class that takes you through the process of optimizing the user experience for different screen sizes and densities.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="adjust-font-sizes">5. Adjust font sizes and touch targets for tablet screens</h2>
+
+<p>To make sure your app is easy to use on tablets, take some time to adjust the
+font sizes and touch targets in your tablet UI, for all of the screen
+configurations you are targeting. You can adjust font sizes through <a
+href="{@docRoot}guide/topics/ui/themes.html">styleable attributes</a> or <a
+href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">dimension
+resources</a>, and you can adjust touch targets through layouts and bitmap
+drawables, as discussed above. </p>
+
+<p>Here are some considerations:</p>
+<ul>
+<li>Text should not be excessively large or small on tablet screen sizes and
+densities. Make sure that labels are sized appropriately for the UI elements they
+correspond to, and ensure that there are no improper line breaks in labels,
+titles, and other elements.</li>
+<li>The recommended touch-target size for onscreen elements is 48dp (32dp
+minimum) — some adjustments may be needed in your tablet UI. Read <a
+href="http://developer.android.com/design/style/metrics-grids.html">Metrics and
+Grids
+</a> to learn about implementation strategies to help most of your users. To
+meet the accessibility needs of certain users, it may be appropriate to use
+larger touch targets. </li>
+<li>When possible, for smaller icons, expand the touchable area to more than
+48dp using {@link android.view.TouchDelegate} or just centering the icon within
+the transparent button.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://developer.android.com/design/style/metrics-grids.html">Metrics and Grids
+</a></strong> — Android Design document that explains how to arrange and size touch targets and other UI elements on the screen.</li>
+<li><strong><a href="{@docRoot}design/style/typography.html">Typography</a></strong> — Android Design document that gives an overview of how to use typography in your apps. </li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></strong> — Developer documentation that explains the details of managing UI for best display on multiple screen sizes.</li>
+<li><strong><a href="{@docRoot}training/multiscreen/screendensities.html">Supporting Different Densities</a></strong> — Android Training class that shows you how to provide sets of layouts and drawable resources for specific ranges of device screens. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="adjust-widgets">6. Adjust sizes of home screen widgets for tablet screens</h2>
+
+<p>If your app includes a home screen widget, here are a few points to consider
+to ensure a great user experience on tablet screens: </p>
+
+<ul>
+<li>Make sure that the widget's default height and width are set appropriately
+for tablet screens, as well as the minimum and maximum resize height and width.
+</li>
+<li>The widget should be resizable to 420dp or more, to span 5 or more home
+screen rows (if this is a vertical or square widget) or columns (if this is a
+horizontal or square widget). </li>
+<li>Make sure that 9-patch images render correctly.</li>
+<li>Use default system margins.</li>
+<li>Set the app's <code>targetSdkVersion</code> to 14 or higher, if
+possible.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/appwidgets/index.html#MetaData">Adding the AppWidgetProviderInfo Metadata
+</a></strong> — API Guide that explains how to set the height and width dimensions of a widget.</li>
+<li><strong><a href="{@docRoot}guide/practices/ui_guidelines/widget_design.html">App Widget Design Guidelines</a></strong> — API Guide that provides best practices and techniques for designing and managing the size of widgets. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="offer-full-feature-set">7. Offer the app's full feature set to tablet users</h2>
+
+<p>Let your tablet users experience the best features of your app. Here are
+some recommendations:</p>
+
+<ul>
+<li>Design your app to offer at least the same set of features on tablets as it does on
+handsets. </li>
+<li>In exceptional cases, your app might omit or replace certain features on
+tablets if they are not supported by the hardware or use-case of most tablets.
+For example:
+<ul>
+<li>If the handset uses telephony features but telephony is not available on the
+current tablet, you can omit or replace the related functionality.</li>
+<li>Many tablets have a GPS sensor, but most users would not normally carry
+their tablets while running. If your phone app provides functionality to let the
+user record a GPS track of their runs while carrying their phones, the app would not need to
+provide that functionality on tablets because the use-case is not
+compelling.</li>
+</ul>
+</li>
+<li>If you will omit a feature or capability from your tablet UI, make sure
+that it is not accessible to users or that it offers “graceful degradation”
+to a replacement feature (also see the section below on hardware features).</li>
+</ul>
+
+
+<h2 id="hardware-requirements">8. Don’t require hardware features that might not be available on tablets</h2>
+
+<p>Handsets and tablets typically offer slightly different hardware support for
+sensors, camera, telephony, and other features. For example, many tablets are
+available in a "Wi-Fi" configuration that does not include telephony support.</p>
+
+<p>To ensure that you can deliver a single APK broadly across the
+your full customer base, make sure that your app does not have built-in
+requirements for hardware features that aren't commonly available on tablets.
+</p>
+
+<ul>
+<li>Your app's manifest should not include <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a>
+elements for hardware features or capabilities that might not be
+available on tablets, except when they are declared with the
+<code>android:required=”false”</code> attribute. For example, your app should
+not <em>require</em> features such as:
+<ul>
+<li><code>android.hardware.telephony</code></li>
+<li><code>android.hardware.camera</code> (refers to back camera), or</li>
+<li><code>android.hardware.camera.front</code></li>
+</ul>
+</li>
+<li>Similarly, your app manifest should not include any <a
+href="{@docRoot}guide/topics/manifest/permission-element.html"><code><permission></code></a> elements that <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">imply
+feature requirements</a> that might not be appropriate for tablets, except when
+accompanied by a corresponding <code><uses-feature></code> element
+declared with the <code>android:required=”false”</code> attribute.</li>
+</ul>
+
+<p>In all cases, the app must function normally when the hardware features it
+uses are not available and should offer “graceful degradation” and alternative
+functionality where appropriate. For example, if GPS is not supported on the device,
+your app could let the user set their location manually. The app should do
+run-time checking for the hardware capability that it needs and handle as needed.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions that Imply Feature Requirements</a></strong> — A list of permissions that may cause unwanted filtering if declared in your app's manifest.</li>
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code><uses-feature></code></a></strong> — Description and reference documentation for the <code><uses-feature></code> manifest element.</li>
+<li><strong><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#testing">Testing the features required by your application</a></strong> — Description of how to determine the actual set of hardware and software requirements (explicit or implied) that your app requires.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="support-screens">9. Declare support for tablet screen configurations</h2>
+
+<p>To ensure that you can distribute your app to a broad range of tablets,
+declare all the screen sizes that your app supports in its manifest:</p>
+
+<ul>
+<li>Declare a <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a> element
+with appropriate attributes, as needed.</li>
+<li>If the app declares a <code><compatible-screens></code> element in the
+manifest, the element must include attributes that specify <em>all of the size and
+density combinations for tablet screens</em> that the app supports. Note that, if possible,
+you should avoid using this element in your app.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code><supports-screens></code></a></strong>
+— Description and reference documentation for the <code><supports-screens></code>
+manifest element.</li>
+<li><strong><a href="{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring Screen Size
+Support</a></strong> — Developer documentation that explains the details of managing UI
+for best display on multiple screen sizes.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="google-play">10. Follow best practices for publishing in Google Play</h2>
+
+<ul>
+<li>Publish your app as a single APK for all screen sizes (handsets
+and tablets), with a single Google Play listing:
+ <ul style="margin-top:.25em;">
+ <li>Easier for users to find your app from search, browsing, or promotions</li>
+ <li>Easier for users to restore your app automatically if they get a new device.</li>
+ <li>Your ratings and download stats are consolidated across all devices.</li>
+ <li>Publishing a tablet app in a second listing can dilute ratings for your brand.</li>
+ </ul>
+</li>
+<li>If necessary, you can alternatively choose to deliver your app using <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>,
+although in most cases using a single APK to reach all devices is strongly recommended.</li>
+
+<li>Highlight your app’s tablet capabilities in the product details page:
+ <ul style="margin-top:.25em;">
+ <li>Add <strong>at least one screenshot taken while the app is running on a
+ tablet</strong>. It's recommended that you add one screenshot of landscape orientation
+ and one of portrait orientation, if possible. These screenshots make it clear to users
+ that your app is designed for tablets and highlight all the effort you've put into designing
+ a great tablet app experience.</li>
+ <li>Mention tablet support in the app description.</li>
+ <li>Include information about tablet support in the app's release notes and update
+ information.</li>
+ <li>In your app's promo video, add shots of your app running on a tablet.</li>
+ </ul>
+</li>
+<li>Make sure you are distributing to tablet devices. Check the app's Supported Devices
+list in the <a href="https://play.google.com/apps/publish/">Developer Console</a>
+to make sure your app is not filtered from tablet devices that you want to target.</li>
+
+<li>Let tablet users know about your app! Plan a marketing or advertising campaign that
+highlights the use of your app on tablets.</li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></strong> — The tools console for publishing your app to Android users.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="test-environment">Setting Up a Test Environment for Tablets</h2>
+
+<p>To assess the quality of your app on tablets — both for core app quality
+and tablet app quality — you need to set up a suitable
+hardware or emulator environment for testing. </p>
+
+<p>The ideal test environment would
+include a small number of actual hardware devices that represent key form
+factors and hardware/software combinations currently available to consumers.
+It's not necessary to test on <em>every</em> device that's on the market —
+rather, you should focus on a small number of representative devices, even using
+one or two devices per form factor. The table below provides an overview of
+devices you could use for testing.</p>
+
+<p>If you are not able to obtain actual hardware devices for testing, you should
+set up emulated devices (AVDs) to represent the most common form factors and
+hardware/software combinations. See the table below for suggestions on the emulator
+configurations to use. </p>
+
+<p>To go beyond basic testing, you can add more devices, more form factors, or
+new hardware/software combinations to your test environment. For example, you
+could include mid-size tablets, tablets with more or fewer hardware/software
+features, and so on. You can also increase the number or complexity of tests
+and quality criteria. </p>
+
+<p class="table-caption"><strong>Table 1</strong>. A typical tablet test environment might
+include one or two devices from each row in the table below, with one of the
+listed chipsets, platform versions, and hardware feature configurations.</p>
+
+<table>
+<tr>
+<th>Type</th>
+<th>Size</th>
+<th>Density</th>
+<th>Version</th>
+<th>AVD Skin</th>
+</tr>
+
+<tr>
+<td>7-inch tablet</td>
+<td><span style="white-space:nowrap"><code>large</code> or</span><br /><code>-sw600</code></td>
+<td><code>hdpi</code>,<br /><code>tvdpi</code></td>
+<td>Android 4.0+</td>
+<td>WXGA800-7in</td>
+</tr>
+<tr>
+<td><span style="white-space:nowrap">10-inch</span> tablet</td>
+<td><span style="white-space:nowrap"><code>xlarge</code> or</span><br /><code>-sw800</code></td>
+<td><code>mdpi</code>,<br /><code>hdpi</code></td>
+<td>Android 3.2+</td>
+<td>WXGA800</td>
+</tr>
+</table>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/spotlight/index.jd b/docs/html/distribute/googleplay/spotlight/index.jd
new file mode 100644
index 0000000..6acd914
--- /dev/null
+++ b/docs/html/distribute/googleplay/spotlight/index.jd
@@ -0,0 +1,46 @@
+page.title=Spotlight
+walkthru=0
+header.hide=0
+
+@jd:body
+
+
+<p>Android developers, their apps, and their successes with Android and Google Play. </p>
+
+
+
+<div style="background: #F0F0F0;
+ border-top: 1px solid #DDD;
+ padding: 0px 0 24px 0;
+ overflow: auto;
+ clear:both;
+ margin-bottom:-10px;
+ margin-top:30px;"">
+ <div style="padding:0 0 0 29px;">
+ <h4>Developer Story: Robot Invader</h4>
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 17px 20px 9px 0;" src=
+ "//g0.gstatic.com/android/market/com.robotinvader.knightmare/hi-256-0-9e08d83bc8d01649e167131d197ada1cd1783fb0">
+ <div style="width:700px;">
+ <p style="margin-top:26px;margin-bottom:12px;">Robot Invader chose
+ Android and Google Play as the launch platform for their first game,<br />
+ <a data-g-event="Developers Page" data-g-label="Case Study Link" href=
+ "//play.google.com/store/apps/details?id=com.robotinvader.knightmare"><em>Wind-up
+ Knight</em></a>.
+ </p>
+ <p>
+ Hear from the developers how Android helped them reach millions of users
+ and more than 100 device models with a single app binary, then iterate rapidly to ensure
+ a great user experience.
+ </p>
+ </div>
+ <iframe style="float:left;
+ margin-right:24px;
+ margin-top:14px;" width="700" height="394" src=
+ "http://www.youtube.com/embed/hTtlLiUTowY" frameborder="0" allowfullscreen></iframe>
+ </div>
+</div>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/spotlight/tablets.jd b/docs/html/distribute/googleplay/spotlight/tablets.jd
new file mode 100644
index 0000000..641b794
--- /dev/null
+++ b/docs/html/distribute/googleplay/spotlight/tablets.jd
@@ -0,0 +1,283 @@
+page.title=Developer Stories: The Opportunity of Android Tablets
+walkthru=0
+header.hide=0
+
+@jd:body
+
+
+<p>More and more, developers are investing in a full tablet experience
+for their apps and are seeing those investments pay off big. The increased
+screen area on tablets opens up a world of possibilities, allowing for more
+engagement with the user — which can mean an increase in usage as well as
+more monetization opportunities. And with the growing wave of Android tablets that
+continue to hit the market, it’s an important piece of any developer’s mobile
+offering. </p>
+
+<p>Here are some stories from developers who are seeing real results as they
+expand their offering to include Android tablets.</p>
+
+
+<div style="margin-bottom:2em;"><!-- START STORY -->
+
+<h3>Mint: More screen real estate = more engagement</h3>
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 9px 20px;" src=
+ "https://lh5.ggpht.com/0xAIZJ1uE05b4RHNHgBBTIH6nRdPTY660T104xY7O2GbHXwab6YVmpU5yYg8yacfBg=w124">
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+
+ <h5>About the app</h5>
+
+
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.mint">Mint.com Personal Finance</a> by Intuit Inc.</li>
+ <li>Financial management app targeting 7- to 10-inch tablets</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>Able to offer richer UI features</li>
+ <li>Much higher user engagement</li>
+ <li>Longer sessions — more Android tablet users have sessions longer than 5 minutes</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.mint">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">When Intuit was thinking about
+expanding their Mint mobile offering to include a version optimized for Android
+tablets, they knew that taking the layout that worked for phones and simply
+showing an enlarged version wouldn’t take full advantage of the opportunities
+that tablets afford.</p>
+
+ <p>“We knew we had a lot more real estate, and we wanted to provide a more
+immersive experience for our users” said Ken Sun, Intuit Group Product Manager
+at Mint.</p>
+
+<p>Intuit’s Mint app, which has a 4-star rating on Google Play, brings a number
+of features to Android tablets that aren’t available for phones, including a
+more visual presentation of personal financial data.</p>
+
+<p>“Whereas our app for phones is used throughout the day for quick sessions,
+we’ve seen a larger percentage of our tablet usage happen in the evening, for
+much longer sessions,” said Sun. “People are doing a lot more than just checking
+their spending. They’re looking at historical trends, re-categorizing
+transactions, analyzing the data and setting financial goals for the future
+— digging much deeper and being more thoughtful. One example is how much
+users are interacting with their own budgets in the tablet app. Customer budget
+operations (view, edit, drill-down, etc.) are 7x higher on Android tablets than
+they are on phones.”</p>
+
+<p>Fifty percent more Android tablet users have Mint sessions of 5 minutes or
+longer than they do on phones. “We’ve found that phone usage is indicative of a
+customer’s regular financial check-in, while tablet usage points towards more
+analysis and interaction with that customer’s personal financial data. This is
+the sort of immersive engagement experience we were looking for; the tablet and
+phone apps serve as great complements to each other."</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/mint.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">Making the most of tablet screens</span>: Mint used the extra screen area on tablets to offer quick access to additional tools and information.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+<div style="margin:3em auto"><!-- START STORY -->
+
+
+<h3>TinyCo: Monetization opportunities abound on tablets</h3>
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 9px 20px;" src=
+ "https://lh5.ggpht.com/mO1TPos65MWJF_n8ZrXMbNCqIqsvN4dQV_rwNOU3pF6N_Ii3lSiCPe_H_MP8C1MK5UKo=w124">
+
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+ <h5>About the app</h5>
+
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.tinyco.village">Tiny Village</a> by TinyCo</li>
+ <li>Game targeting 7- to 10-inch tablets and phones</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>35% higher average revenue per paying user (ARPPU)</li>
+ <li>Consistent increase in user retention</li>
+ <li>3x increase in downloads to Android tablets in the last 6 months</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.tinyco.village">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">Over a year ago, developer
+TinyCo, makers of games such as Tiny Monsters, switched to a
+simultaneous launch strategy for their products. They chose Android as one of their
+primary launch platforms because of its large installed base and global reach. They
+also knew that the growing base of Android tablet users represented a huge
+opportunity. </p>
+
+ <p>Tiny Village was their first title to take advantage of the strategy, and
+it proved to be a winning one — especially in terms of Android
+tablets.</p>
+
+ <p> “With continued optimization of the gameplay experience and a genuine
+commitment to our Android offering through our Griffin engine, all of our
+metrics started to rise,” said Rajeev Nagpal, Head of Product at TinyCo. In
+fact, they’ve seen Android tablet downloads more than triple in the last six
+months.</p>
+
+ <p>One of the first things they noticed about usage of Tiny Village on
+tablets was an increase in average revenue per paying user (ARPPU)—about 35%
+higher than on smaller-screen devices such as phones. Additionally, average
+revenue per user ARPU is now about 35% higher as well. “The game is just much
+more immersive on tablet.”</p>
+
+ <p>In addition to an increase in monetization metrics, they’ve also seen a
+consistent increase in retention over other platforms. “These are really
+important metrics for games — if you can get users to both stay around
+longer and spend more while they’re there, you have a recipe for success.”</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/tinyvillage.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">More monetization
+on tablets</span>: On Android tablets TinyCo has seen higher ARPPU and user
+retention than on phones.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+<div style="margin-bottom:2em;"><!-- START STORY -->
+
+<h3>Instapaper: Riding the growing wave of Android tablets</h3>
+
+
+ <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px height:78px;
+ width: 78px;
+ float: left;
+ margin: 12px 20px 9px 20px;" src=
+ "https://lh3.ggpht.com/30KKcrIFO8V_wRfhnHaI9l0CLH_orIVFE7Xywtr9TBxAf0hi2BaZkKyBOs63Yfavpg=w124">
+
+
+ <div style="list-style: none;height:100%;
+ float: right;
+ border-top: 1px solid #9C0;
+ width: 220px;
+ margin: 4px 20px;padding: .5em;">
+
+
+
+
+ <h5>About the app</h5>
+ <ul>
+ <li><a href="http://play.google.com/store/apps/details?id=com.instapaper.android">Instapaper</a> by Mobelux</li>
+ <li>Content-browsing utility that targets 7- to 10-inch tablets and phones</li>
+ </ul>
+
+ <h5>Tablet Results</h5>
+
+ <ul>
+ <li>Tablets are now 50% of the app's installed base.</li>
+ </ul>
+
+ <div style="padding:.5em 0 0 1em;">
+<a href="http://play.google.com/store/apps/details?id=com.instapaper.android">
+ <img alt="Android app on Google Play"
+ src="http://developer.android.com/images/brand/en_generic_rgb_wo_45.png" />
+</a>
+
+ </div>
+ </div>
+
+ <div style="line-height:1.4em;">
+ <p style="margin-top:0;margin-bottom:12px;">Instapaper for Android is an app
+for saving web content to read later. Developer Mobelux decided that creating a
+great UI for Android tablet users would be an essential part of their initial launch
+plan.</p>
+
+ <p>The app launched at the beginning of the summer of 2012, just in time to
+take advantage of a new tide of Android tablets, including the <span
+style="white-space:nowrap;">Nexus 7</span> tablet. The app has since seen huge
+popularity among tablet users, in particular, on Nexus 7. On the day that
+pre-orders of Nexus 7 began arriving, Mobelux saw a 600% jump in downloads of
+its app on Google Play.</p>
+
+ <p>“We saw a promising new set of Android tablets about to hit the market
+and wanted to position ourselves to be ready for them” said Jeff Rock of
+Mobelux. “It was a market that others were hesitant to explore, but the decision
+to prioritize tablets has paid off very well for us.”</p>
+
+ <p>Since that initial 600% jump in downloads, Instapaper for Android has
+continued to see a successful run on Android tablets. In fact, Android tablets
+now represent about 50% of their installed base. “With more and more Android
+tablets coming online, we’re excited to see how our investment in Android
+tablets continues to pay off.”</p>
+ </div>
+
+ <div style="clear:both;margin-top:40px;width:auto;">
+
+ <a href=""><img src="{@docRoot}images/distribute/instapaper.png"></a>
+
+ <div style="width:600px;margin-top:0px;padding:0 90px;">
+ <p class="image-caption"><span style="font-weight:500;">Popular with
+tablet users</span>: A great tablet UI and browsing convenience make Instapaper
+popular with Android tablet users.</p>
+ </div>
+
+ </div>
+
+</div> <!-- END STORY -->
+
+
+
diff --git a/docs/html/distribute/googleplay/strategies/app-quality.jd b/docs/html/distribute/googleplay/strategies/app-quality.jd
index 6ea862b..ecc51dc 100644
--- a/docs/html/distribute/googleplay/strategies/app-quality.jd
+++ b/docs/html/distribute/googleplay/strategies/app-quality.jd
@@ -1,10 +1,10 @@
-page.title=Improving App Quality
+page.title=Improving App Quality After Launch
@jd:body
<div id="qv-wrapper">
<div id="qv">
-<h2>Strategies:</h2>
-<ul>
+<h2>Strategies</h2>
+<ol>
<li><a href="#listen">Listen to Your Users</a></li>
<li><a href="#stability">Improve Stability and Eliminate Bugs</a></li>
<li><a href="#responsiveness">Improve UI Responsiveness</a></li>
@@ -13,7 +13,14 @@
<li><a href="#features">Deliver the Right Set of Features</a></li>
<li><a href="#integrate">Integrate with the System and Third-Party Apps</a></li>
<li><a href="#details">Pay Attention to Details</a></li>
-</ul>
+</ol>
+
+<h2>You Should Also Read</h2>
+<ol>
+<li><a href="{@docRoot}distribute/googleplay/quality/core.html">Core App Quality Guidelines</a></li>
+<li><a href="{@docRoot}distribute/googleplay/quality/tablet.html">Tablet App Quality Checklist</a></li>
+</ol>
+
</div>
</div>
@@ -22,7 +29,7 @@
<p>
A better app can go a very long way: a higher quality app will translate to higher user ratings, generally better rankings, more downloads, and higher retention (longer install periods). High-quality apps also have a much higher likelihood of getting some unanticipated positive publicity such as being featured in Google Play or getting social media buzz.</p>
<p>
-The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". The path to improving app quality isn't always well-lit. The term "quality" — along with "polish" and "fit and finish" — aren't always well-defined. Here we'll light the path by looking at some of the key factors in app quality and ways of improving your app along these dimensions.</p>
+The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". This document looks at some of the key factors in app quality and ways of improving your app over time, after you've launched the app.</p>
<h2 id="listen">Listen to Your Users</h2>
<p>
@@ -52,15 +59,14 @@
<p>
You can improve your apps's UI responsiveness by moving long-running operations off the main thread to worker threads. Android offers built-in debugging facilities such as StrictMode for analyzing your app's performance and activities on the main thread. You can see more recommendations in <a href="http://www.youtube.com/watch?v=c4znvD-7VDA">Writing Zippy Android Apps</a>, a developer session from Google I/O 2010,</p>
-
<div class="sidebox-wrapper">
<div class="sidebox">
-<h2>More resources</h2>
+<h3>More resources</h3>
<ul>
<li><a href="{@docRoot}design/index.html">Android Design</a></li>
<li><a href="{@docRoot}guide/practices/performance.html">Designing for Performance</a></li>
<li><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a>
-<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for seamlessness</a>
+<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for Seamlessness</a>
</li>
</ul>
</div></div>
@@ -73,18 +79,17 @@
<h2 id="usability">Improve Usability</h2>
<p>
In usability and in app design too, you should listen carefully to your users. Ask a handful of real Android device users (friends, family, etc.) to try out your app and observe them as they interact with it. Look for cases where they get confused, are unsure of how to proceed, or are surprised by certain behaviors. Minimize these cases by rethinking some of the interactions in your app, perhaps working in some of the <a href="http://www.youtube.com/watch?v=M1ZBjlCRfz0">user interface patterns</a> the Android UI team discussed at Google I/O.</p>
-<p>
-In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
<div class="sidebox-wrapper">
<div class="sidebox">
-<h2>More resources</h2>
-<ul>
-As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="{@docRoot}design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</li>
-</ul>
+<p>
+As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="/design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</p>
</div></div>
<p>
+In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
+
+<p>
Another way to incrementally improve usability, based on real-world data, is to implement <a href="http://code.google.com/mobile/analytics/docs/">Analytics</a> throughout your app to log usage of particular sections. Consider demoting infrequently used sections to the overflow menu in the <a href="{@docRoot}design/patterns/actionbar.html">Action bar</a>, or removing them altogether. For often-used sections and UI elements, make sure they're immediately obvious and easily accessible in your app's UI so that users can get to them quickly.</p>
<p>
Lastly, usability is an extensive and well-documented subject, with close ties to interface design, cognitive science, and other disciplines.</p>
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index e9d2d25..2603a06 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -232,7 +232,12 @@
(non-removable) storage. Files saved to the external storage are world-readable and can
be modified by the user when they enable USB mass storage to transfer files on a computer.</p>
-<p class="caution"><strong>Caution:</strong> External files can disappear if the user mounts the
+<p>It's possible that a device using a partition of the
+internal storage for the external storage may also offer an SD card slot. In this case,
+the SD card is <em>not</em> part of the external storage and your app cannot access it (the extra
+storage is intended only for user-provided media that the system scans).</p>
+
+<p class="caution"><strong>Caution:</strong> External storage can become unavailable if the user mounts the
external storage on a computer or removes the media, and there's no security enforced upon files you
save to the external storage. All applications can read and write files placed on the external
storage and the user can remove them.</p>
diff --git a/docs/html/images/distribute/instapaper.png b/docs/html/images/distribute/instapaper.png
new file mode 100644
index 0000000..ffbf052
--- /dev/null
+++ b/docs/html/images/distribute/instapaper.png
Binary files differ
diff --git a/docs/html/images/distribute/mint.png b/docs/html/images/distribute/mint.png
new file mode 100644
index 0000000..50d90d5
--- /dev/null
+++ b/docs/html/images/distribute/mint.png
Binary files differ
diff --git a/docs/html/images/distribute/tinyvillage.png b/docs/html/images/distribute/tinyvillage.png
new file mode 100644
index 0000000..cde77f0
--- /dev/null
+++ b/docs/html/images/distribute/tinyvillage.png
Binary files differ
diff --git a/docs/html/images/ui-ex-multi-pane.png b/docs/html/images/ui-ex-multi-pane.png
new file mode 100644
index 0000000..188bb8b
--- /dev/null
+++ b/docs/html/images/ui-ex-multi-pane.png
Binary files differ
diff --git a/docs/html/images/ui-ex-single-panes.png b/docs/html/images/ui-ex-single-panes.png
new file mode 100644
index 0000000..dff24a7
--- /dev/null
+++ b/docs/html/images/ui-ex-single-panes.png
Binary files differ
diff --git a/docs/html/training/basics/data-storage/databases.jd b/docs/html/training/basics/data-storage/databases.jd
new file mode 100644
index 0000000..3a717dd
--- /dev/null
+++ b/docs/html/training/basics/data-storage/databases.jd
@@ -0,0 +1,322 @@
+page.title=Saving Data in SQL Databases
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Saving Data in Files
+previous.link=files.html
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#DefineContract">Define a Schema and Contract</a></li>
+ <li><a href="#DbHelper">Create a Database Using a SQL Helper</a></li>
+ <li><a href="#WriteDbRow">Put Information into a Database</a></li>
+ <li><a href="#ReadDbRow">Read Information from a Database</a></li>
+ <li><a href="#DeleteDbRow">Delete Information from a Database</a></li>
+ <li><a href="#UpdateDbRow">Update a Database</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#db">Using Databases</a></li>
+</ul>
+
+<!--
+<h2>Try it out</h2>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/Sample.zip" class="button">Download the sample</a>
+ <p class="filename">Sample.zip</p>
+</div>
+-->
+
+</div>
+</div>
+
+
+<p>Saving data to a database is ideal for repeating or structured data,
+such as contact information. This class assumes that you are
+familiar with SQL databases in general and helps you get started with
+SQLite databases on Android. The APIs you'll need to use a database
+on Android are available in the {@link android.database.sqlite} package.</p>
+
+
+<h2 id="DefineContract">Define a Schema and Contract</h2>
+
+<p>One of the main principles of SQL databases is the schema: a formal
+declaration of how the database is organized. The schema is reflected in the SQL
+statements that you use to create your database. You may find it helpful to
+create a companion class, known as a <em>contract</em> class, which explicitly specifies
+the layout of your schema in a systematic and self-documenting way.</p>
+
+<p>A contract class is a container for constants that define names for URIs,
+tables, and columns. The contract class allows you to use the same constants
+across all the other classes in the same package. This lets you change a column
+name in one place and have it propagate throughout your code.</p>
+
+<p>A good way to organize a contract class is to put definitions that are
+global to your whole database in the root level of the class. Then create an inner
+class for each table that enumerates its columns.</p>
+
+<p class="note"><strong>Note:</strong> By implementing the {@link
+android.provider.BaseColumns} interface, your inner class can inherit a primary
+key field called {@code _ID} that some Android classes such as cursor adaptors
+will expect it to have. It's not required, but this can help your database
+work harmoniously with the Android framework.</p>
+
+<p>For example, this snippet defines the table name and column names for a
+single table:</p>
+
+
+<pre>
+public static abstract class FeedEntry implements BaseColumns {
+ public static final String TABLE_NAME = "entry";
+ public static final String COLUMN_NAME_ENTRY_ID = "entryid";
+ public static final String COLUMN_NAME_TITLE = "title";
+ public static final String COLUMN_NAME_SUBTITLE = "subtitle";
+ ...
+}
+</pre>
+
+
+<p>To prevent someone from accidentally instantiating the contract class, give
+it an empty constructor. </p>
+
+<pre>
+// Prevents the FeedReaderContract class from being instantiated.
+private FeedReaderContract() {}
+</pre>
+
+
+
+<h2 id="DbHelper">Create a Database Using a SQL Helper</h2>
+
+<p>Once you have defined how your database looks, you should implement methods
+that create and maintain the database and tables. Here are some typical
+statements that create and delete a table:</P>
+
+<pre>
+private static final String TEXT_TYPE = " TEXT";
+private static final String COMMA_SEP = ",";
+private static final String SQL_CREATE_ENTRIES =
+ "CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" +
+ FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," +
+ FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
+ FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
+ ... // Any other options for the CREATE command
+ " )";
+
+private static final String SQL_DELETE_ENTRIES =
+ "DROP TABLE IF EXISTS " + TABLE_NAME_ENTRIES;
+</pre>
+
+<p>Just like files that you save on the device's <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">internal
+storage</a>, Android stores your database in private disk space that's associated
+application. Your data is secure, because by default this area is not
+accessible to other applications.</p>
+
+<p>A useful set of APIs is available in the {@link
+android.database.sqlite.SQLiteOpenHelper} class.
+When you use this class to obtain references to your database, the system
+performs the potentially
+long-running operations of creating and updating the database only when
+needed and <em>not during app startup</em>. All you need to do is call
+{@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} or
+{@link android.database.sqlite.SQLiteOpenHelper#getReadableDatabase}.</p>
+
+<p class="note"><strong>Note:</strong> Because they can be long-running,
+be sure that you call {@link
+android.database.sqlite.SQLiteOpenHelper#getWritableDatabase} or {@link
+android.database.sqlite.SQLiteOpenHelper#getReadableDatabase} in a background thread,
+such as with {@link android.os.AsyncTask} or {@link android.app.IntentService}.</p>
+
+<p>To use {@link android.database.sqlite.SQLiteOpenHelper}, create a subclass that
+overrides the {@link
+android.database.sqlite.SQLiteOpenHelper#onCreate onCreate()}, {@link
+android.database.sqlite.SQLiteOpenHelper#onUpgrade onUpgrade()} and {@link
+android.database.sqlite.SQLiteOpenHelper#onOpen onOpen()} callback methods. You may also
+want to implement {@link android.database.sqlite.SQLiteOpenHelper#onDowngrade onDowngrade()},
+but it's not required.</p>
+
+<p>For example, here's an implementation of {@link
+android.database.sqlite.SQLiteOpenHelper} that uses some of the commands shown above:</p>
+
+<pre>
+public class FeedReaderDbHelper extends SQLiteOpenHelper {
+ // If you change the database schema, you must increment the database version.
+ public static final int DATABASE_VERSION = 1;
+ public static final String DATABASE_NAME = "FeedReader.db";
+
+ public FeedReaderDbHelper(Context context) {
+ super(context, DATABASE_NAME, null, DATABASE_VERSION);
+ }
+ public void onCreate(SQLiteDatabase db) {
+ db.execSQL(SQL_CREATE_ENTRIES);
+ }
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ // This database is only a cache for online data, so its upgrade policy is
+ // to simply to discard the data and start over
+ db.execSQL(SQL_DELETE_ENTRIES);
+ onCreate(db);
+ }
+ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+ onUpgrade(db, oldVersion, newVersion);
+ }
+}
+</pre>
+
+<p>To access your database, instantiate your subclass of {@link
+android.database.sqlite.SQLiteOpenHelper}:</p>
+
+<pre>
+FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(getContext());
+</pre>
+
+
+
+
+<h2 id="WriteDbRow">Put Information into a Database</h2>
+
+<p>Insert data into the database by passing a {@link android.content.ContentValues}
+object to the {@link android.database.sqlite.SQLiteDatabase#insert insert()} method:</p>
+
+<pre>
+// Gets the data repository in write mode
+SQLiteDatabase db = mDbHelper.getWritableDatabase();
+
+// Create a new map of values, where column names are the keys
+ContentValues values = new ContentValues();
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID, id);
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_CONTENT, content);
+
+// Insert the new row, returning the primary key value of the new row
+long newRowId;
+newRowId = db.insert(
+ FeedReaderContract.FeedEntry.TABLE_NAME,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_NULLABLE,
+ values);
+</pre>
+
+<p>The first argument for {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+is simply the table name. The second argument provides
+the name of a column in which the framework can insert NULL in the event that the
+{@link android.content.ContentValues} is empty (if you instead set this to {@code "null"},
+then the framework will not insert a row when there are no values).</p>
+
+
+
+
+<h2 id="ReadDbRow">Read Information from a Database</h2>
+
+<p>To read from a database, use the {@link android.database.sqlite.SQLiteDatabase#query query()}
+method, passing it your selection criteria and desired columns.
+The method combines elements of {@link android.database.sqlite.SQLiteDatabase#insert insert()}
+and {@link android.database.sqlite.SQLiteDatabase#update update()}, except the column list
+defines the data you want to fetch, rather than the data to insert. The results of the query
+are returned to you in a {@link android.database.Cursor} object.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// Define a <em>projection</em> that specifies which columns from the database
+// you will actually use after this query.
+String[] projection = {
+ FeedReaderContract.FeedEntry._ID,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE,
+ FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED,
+ ...
+ };
+
+// How you want the results sorted in the resulting Cursor
+String sortOrder =
+ FeedReaderContract.FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+
+Cursor c = db.query(
+ FeedReaderContract.FeedEntry.TABLE_NAME, // The table to query
+ projection, // The columns to return
+ selection, // The columns for the WHERE clause
+ selectionArgs, // The values for the WHERE clause
+ null, // don't group the rows
+ null, // don't filter by row groups
+ sortOrder // The sort order
+ );
+</pre>
+
+<p>To look at a row in the cursor, use one of the {@link android.database.Cursor} move
+methods, which you must always call before you begin reading values. Generally, you should start
+by calling {@link android.database.Cursor#moveToFirst}, which places the "read position" on the
+first entry in the results. For each row, you can read a column's value by calling one of the
+{@link android.database.Cursor} get methods, such as {@link android.database.Cursor#getString
+getString()} or {@link android.database.Cursor#getLong getLong()}. For each of the get methods,
+you must pass the index position of the column you desire, which you can get by calling
+{@link android.database.Cursor#getColumnIndex getColumnIndex()} or
+{@link android.database.Cursor#getColumnIndexOrThrow getColumnIndexOrThrow()}.
+For example:</p>
+
+<pre>
+cursor.moveToFirst();
+long itemId = cursor.getLong(
+ cursor.getColumnIndexOrThrow(FeedReaderContract.FeedEntry._ID)
+);
+</pre>
+
+
+
+
+<h2 id="DeleteDbRow">Delete Information from a Database</h2>
+
+<p>To delete rows from a table, you need to provide selection criteria that
+identify the rows. The database API provides a mechanism for creating selection
+criteria that protects against SQL injection. The mechanism divides the
+selection specification into a selection clause and selection arguments. The
+clause defines the columns to look at, and also allows you to combine column
+tests. The arguments are values to test against that are bound into the clause.
+Because the result isn't handled the same as a regular SQL statement, it is
+immune to SQL injection.</p>
+
+<pre>
+// Define 'where' part of query.
+String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
+// Specify arguments in placeholder order.
+String[] selelectionArgs = { String.valueOf(rowId) };
+// Issue SQL statement.
+db.delete(table_name, mySelection, selectionArgs);
+</pre>
+
+
+
+<h2 id="UpdateDbRow">Update a Database</h2>
+
+<p>When you need to modify a subset of your database values, use the {@link
+android.database.sqlite.SQLiteDatabase#update update()} method.</p>
+
+<p>Updating the table combines the content values syntax of {@link
+android.database.sqlite.SQLiteDatabase#insert insert()} with the {@code where} syntax
+of {@link android.database.sqlite.SQLiteDatabase#delete delete()}.</p>
+
+<pre>
+SQLiteDatabase db = mDbHelper.getReadableDatabase();
+
+// New value for one column
+ContentValues values = new ContentValues();
+values.put(FeedReaderContract.FeedEntry.COLUMN_NAME_TITLE, title);
+
+// Which row to update, based on the ID
+String selection = FeedReaderContract.FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
+String[] selelectionArgs = { String.valueOf(rowId) };
+
+int count = db.update(
+ FeedReaderDbHelper.FeedEntry.TABLE_NAME,
+ values,
+ selection,
+ selectionArgs);
+</pre>
+
diff --git a/docs/html/training/basics/data-storage/files.jd b/docs/html/training/basics/data-storage/files.jd
new file mode 100644
index 0000000..dd081a6
--- /dev/null
+++ b/docs/html/training/basics/data-storage/files.jd
@@ -0,0 +1,382 @@
+page.title=Saving Files
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#InternalVsExternalStorage">Choose Internal or External Storage</a></li>
+ <li><a href="#GetWritePermission">Obtain Permissions for External Storage</a></li>
+ <li><a href="#WriteInternalStorage">Save a File on Internal Storage</a></li>
+ <li><a href="#WriteExternalStorage">Save a File on External Storage</a></li>
+ <li><a href="#GetFreeSpace">Query Free Space</a></li>
+ <li><a href="#DeleteFile">Delete a File</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">Using the Internal
+Storage</a></li>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Using the External
+Storage</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Android uses a file system that's
+similar to disk-based file systems on other platforms. This lesson describes
+how to work with the Android file system to read and write files with the {@link java.io.File}
+APIs.</p>
+
+<p>A {@link java.io.File} object is suited to reading or writing large amounts of data in
+start-to-finish order without skipping around. For example, it's good for image files or
+anything exchanged over a network.</p>
+
+<p>This lesson shows how to perform basic file-related tasks in your app.
+The lesson assumes that you are familiar with the basics of the Linux file system and the
+standard file input/output APIs in {@link java.io}.</p>
+
+
+<h2 id="InternalVsExternalStorage">Choose Internal or External Storage</h2>
+
+<p>All Android devices have two file storage areas: "internal" and "external" storage. These names
+come from the early days of Android, when most devices offered built-in non-volatile memory
+(internal storage), plus a removable storage medium such as a micro SD card (external storage).
+Some devices divide the permanent storage space into "internal" and "external" partitions, so even
+without a removable storage medium, there are always two storage spaces and
+the API behavior is the same whether the external storage is removable or not.
+The following lists summarize the facts about each storage space.</p>
+
+<div class="col-5" style="margin-left:0">
+<p><b>Internal storage:</b></p>
+<ul>
+<li>It's always available.</li>
+<li>Files saved here are accessible by only your app by default.</li>
+<li>When the user uninstalls your app, the system removes all your app's files from
+internal storage.</li>
+</ul>
+<p>Internal storage is best when you want to be sure that neither the user nor other apps can
+access your files.</p>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<p><b>External storage:</b></p>
+<ul>
+<li>It's not always available, because the user can mount the external storage as USB storage
+and in some cases remove it from the device.</li>
+<li>It's world-readable, so
+files saved here may be read outside of your control.</li>
+<li>When the user uninstalls your app, the system removes your app's files from here
+only if you save them in the directory from {@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()}.</li>
+</ul>
+<p>External storage is the best
+place for files that don't require access restrictions and for files that you want to share
+with other apps or allow the user to access with a computer.</p>
+</div>
+
+
+<p class="note" style="clear:both">
+<strong>Tip:</strong> Although apps are installed onto the internal storage by
+default, you can specify the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> attribute in your manifest so your app may
+be installed on external storage. Users appreciate this option when the APK size is very large and
+they have an external storage space that's larger than the internal storage. For more
+information, see <a
+href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a>.</p>
+
+
+<h2 id="GetWritePermission">Obtain Permissions for External Storage</h2>
+
+<p>To write to the external storage, you must request the
+ {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission in your <a
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a>:</p>
+
+<pre>
+<manifest ...>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ ...
+</manifest>
+</pre>
+
+<div class="caution"><p><strong>Caution:</strong>
+Currently, all apps have the ability to read the external storage
+without a special permission. However, this will change in a future release. If your app needs
+to read the external storage (but not write to it), then you will need to declare the {@link
+android.Manifest.permission#READ_EXTERNAL_STORAGE} permission. To ensure that your app continues
+to work as expected, you should declare this permission now, before the change takes effect.</p>
+<pre>
+<manifest ...>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+ ...
+</manifest>
+</pre>
+<p>However, if your app uses the {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}
+permission, then it implicitly has permission to read the external storage as well.</p>
+</div>
+
+<p>You don’t need any permissions to save files on the internal
+storage. Your application always has permission to read and
+write files in its internal storage directory.</p>
+
+
+
+
+
+<h2 id="WriteInternalStorage">Save a File on Internal Storage</h2>
+
+<p>When saving a file to internal storage, you can acquire the appropriate directory as a
+{@link java.io.File} by calling one of two methods:</p>
+
+<dl>
+ <dt>{@link android.content.Context#getFilesDir}</dt>
+ <dd>Returns a {@link java.io.File} representing an internal directory for your app.</dd>
+ <dt>{@link android.content.Context#getCacheDir}</dt>
+ <dd>Returns a {@link java.io.File} representing an internal directory for your app's temporary
+cache files. Be sure to delete each file once it is no
+longer needed and implement a reasonable size limit for the amount of memory you use at any given
+time, such as 1MB. If the system begins running low on storage, it may delete your cache files
+without warning.</dd>
+</dl>
+
+<p>To create a new file in one of these directories, you can use the {@link
+java.io.File#File(File,String) File()} constructor, passing the {@link java.io.File} provided by one
+of the above methods that specifies your internal storage directory. For example:</p>
+
+<pre>
+File file = new File(context.getFilesDir(), filename);
+</pre>
+
+<p>Alternatively, you can call {@link
+android.content.Context#openFileOutput openFileOutput()} to get a {@link java.io.FileOutputStream}
+that writes to a file in your internal directory. For example, here's
+how to write some text to a file:</p>
+
+<pre>
+String filename = "myfile";
+String string = "Hello world!";
+FileOutputStream outputStream;
+
+try {
+ outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
+ outputStream.write(string.getBytes());
+ outputStream.close();
+} catch (Exception e) {
+ e.printStackTrace();
+}
+</pre>
+
+<p>Or, if you need to cache some files, you should instead use {@link
+java.io.File#createTempFile createTempFile()}. For example, the following method extracts the
+file name from a {@link java.net.URL} and creates a file with that name
+in your app's internal cache directory:</p>
+
+<pre>
+public File getTempFile(Context context, String url) {
+ File file;
+ try {
+ String fileName = Uri.parse(url).getLastPathSegment();
+ file = File.createTempFile(fileName, null, context.getCacheDir());
+ catch (IOException e) {
+ // Error while creating file
+ }
+ return file;
+}
+</pre>
+
+<p class="note"><strong>Note:</strong>
+Your app's internal storage directory is specified
+by your app's package name in a special location of the Android file system.
+Technically, another app can read your internal files if you set
+the file mode to be readable. However, the other app would also need to know your app package
+name and file names. Other apps cannot browse your internal directories and do not have
+read or write access unless you explicitly set the files to be readable or writable. So as long
+as you use {@link android.content.Context#MODE_PRIVATE} for your files on the internal storage,
+they are never accessible to other apps.</p>
+
+
+
+
+
+<h2 id="WriteExternalStorage">Save a File on External Storage</h2>
+
+<p>Because the external storage may be unavailable—such as when the user has mounted the
+storage to a PC or has removed the SD card that provides the external storage—you
+should always verify that the volume is available before accessing it. You can query the external
+storage state by calling {@link android.os.Environment#getExternalStorageState}. If the returned
+state is equal to {@link android.os.Environment#MEDIA_MOUNTED}, then you can read and
+write your files. For example, the following methods are useful to determine the storage
+availability:</p>
+
+<pre>
+/* Checks if external storage is available for read and write */
+public boolean isExternalStorageWritable() {
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state)) {
+ return true;
+ }
+ return false;
+}
+
+/* Checks if external storage is available to at least read */
+public boolean isExternalStorageReadable() {
+ String state = Environment.getExternalStorageState();
+ if (Environment.MEDIA_MOUNTED.equals(state) ||
+ Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
+ return true;
+ }
+ return false;
+}
+</pre>
+
+<p>Although the external storage is modifiable by the user and other apps, there are two
+categories of files you might save here:</p>
+
+<dl>
+ <dt>Public files</dt>
+ <dd>Files that
+should be freely available to other apps and to the user. When the user uninstalls your app,
+these files should remain available to the user.
+ <p>For example, photos captured by your app or other downloaded files.</p>
+ </dd>
+ <dt>Private files</dt>
+ <dd>Files that rightfully belong to your app and should be deleted when the user uninstalls
+ your app. Although these files are technically accessible by the user and other apps because they
+ are on the external storage, they are files that realistically don't provide value to the user
+ outside your app. When the user uninstalls your app, the system deletes
+ all files in your app's external private directory.
+ <p>For example, additional resources downloaded by your app or temporary media files.</p>
+ </dd>
+</dl>
+
+<p>If you want to save public files on the external storage, use the
+{@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} method to get a {@link java.io.File} representing
+the appropriate directory on the external storage. The method takes an argument specifying
+the type of file you want to save so that they can be logically organized with other public
+files, such as {@link android.os.Environment#DIRECTORY_MUSIC} or {@link
+android.os.Environment#DIRECTORY_PICTURES}. For example:</p>
+
+<pre>
+public File getAlbumStorageDir(String albumName) {
+ // Get the directory for the user's public pictures directory.
+ File file = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES), albumName);
+ if (!file.mkdirs()) {
+ Log.e(LOG_TAG, "Directory not created");
+ }
+ return file;
+}
+</pre>
+
+
+<p>If you want to save files that are private to your app, you can acquire the
+appropriate directory by calling {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} and passing it a name indicating
+the type of directory you'd like. Each directory created this way is added to a parent
+directory that encapsulates all your app's external storage files, which the system deletes when the
+user uninstalls your app.</p>
+
+<p>For example, here's a method you can use to create a directory for an individual photo album:</p>
+
+<pre>
+public File getAlbumStorageDir(Context context, String albumName) {
+ // Get the directory for the app's private pictures directory.
+ File file = new File(context.getExternalFilesDir(
+ Environment.DIRECTORY_PICTURES), albumName);
+ if (!file.mkdirs()) {
+ Log.e(LOG_TAG, "Directory not created");
+ }
+ return file;
+}
+</pre>
+
+<p>If none of the pre-defined sub-directory names suit your files, you can instead call {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()} and pass {@code null}. This
+returns the root directory for your app's private directory on the external storage.</p>
+
+<p>Remember that {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}
+creates a directory inside a directory that is deleted when the user uninstalls your app.
+If the files you're saving should remain available after the user uninstalls your
+app—such as when your app is a camera and the user will want to keep the photos—you
+should instead use {@link android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()}.</p>
+
+
+<p>Regardless of whether you use {@link
+android.os.Environment#getExternalStoragePublicDirectory
+getExternalStoragePublicDirectory()} for files that are shared or
+{@link android.content.Context#getExternalFilesDir
+getExternalFilesDir()} for files that are private to your app, it's important that you use
+directory names provided by API constants like
+{@link android.os.Environment#DIRECTORY_PICTURES}. These directory names ensure
+that the files are treated properly by the system. For instance, files saved in {@link
+android.os.Environment#DIRECTORY_RINGTONES} are categorized by the system media scanner as ringtones
+instead of music.</p>
+
+
+
+
+<h2 id="GetFreeSpace">Query Free Space</h2>
+
+<p>If you know ahead of time how much data you're saving, you can find out
+whether sufficient space is available without causing an {@link
+java.io.IOException} by calling {@link java.io.File#getFreeSpace} or {@link
+java.io.File#getTotalSpace}. These methods provide the current available space and the
+total space in the storage volume, respectively. This information is also useful to avoid filling
+the storage volume above a certain threshold.</p>
+
+<p>However, the system does not guarantee that you can write as many bytes as are
+indicated by {@link java.io.File#getFreeSpace}. If the number returned is a
+few MB more than the size of the data you want to save, or if the file system
+is less than 90% full, then it's probably safe to proceed.
+Otherwise, you probably shouldn't write to storage.</p>
+
+<p class="note"><strong>Note:</strong> You aren't required to check the amount of available space
+before you save your file. You can instead try writing the file right away, then
+catch an {@link java.io.IOException} if one occurs. You may need to do
+this if you don't know exactly how much space you need. For example, if you
+change the file's encoding before you save it by converting a PNG image to
+JPEG, you won't know the file's size beforehand.</p>
+
+
+
+
+<h2 id="DeleteFile">Delete a File</h2>
+
+<p>You should always delete files that you no longer need. The most straightforward way to delete a
+file is to have the opened file reference call {@link java.io.File#delete} on itself.</p>
+
+<pre>
+myFile.delete();
+</pre>
+
+<p>If the file is saved on internal storage, you can also ask the {@link android.content.Context} to locate and
+delete a file by calling {@link android.content.Context#deleteFile deleteFile()}:</p>
+
+<pre>
+myContext.deleteFile(fileName);
+</pre>
+
+<div class="note">
+<p><strong>Note:</strong> When the user uninstalls your app, the Android system deletes
+the following:</p>
+<ul>
+<li>All files you saved on internal storage</li>
+<li>All files you saved on external storage using {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+</ul>
+<p>However, you should manually delete all cached files created with
+{@link android.content.Context#getCacheDir()} on a regular basis and also regularly delete
+other files you no longer need.</p>
+</div>
+
diff --git a/docs/html/training/basics/data-storage/index.jd b/docs/html/training/basics/data-storage/index.jd
new file mode 100644
index 0000000..99bb2614
--- /dev/null
+++ b/docs/html/training/basics/data-storage/index.jd
@@ -0,0 +1,55 @@
+page.title=Saving Data
+
+trainingnavtop=true
+startpage=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+ <li>Android 1.6 (API Level 4) or higher</li>
+ <li>Familiarity with Map key-value collections</li>
+ <li>Familiarity with the Java file I/O API</li>
+ <li>Familiarity with SQL databases</li>
+</ul>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html">Storage Options</a></li>
+</ul>
+
+</div>
+</div>
+
+<p>Most Android apps need to save data, even if only to save information about the app state
+during {@link android.app.Activity#onPause onPause()} so the user's progress is not lost. Most
+non-trivial apps also need to save user settings, and some apps must manage large
+amounts of information in files and databases. This class introduces you to the
+principal data storage options in Android, including:</p>
+
+<ul>
+ <li>Saving key-value pairs of simple data types in a shared preferences
+file</li>
+ <li>Saving arbitrary files in Android's file system</li>
+ <li>Using databases managed by SQLite</li>
+</ul>
+
+
+<h2>Lessons</h2>
+
+<dl>
+ <dt><b><a href="shared-preferences.html">Saving Data in Shared Preferences</a></b></dt>
+ <dd>Learn to use a shared preferences file for storing small amounts of information in
+key-value pairs.</dd>
+
+ <dt><b><a href="files.html">Saving Data in Files</a></b></dt>
+ <dd>Learn to save a basic file, such as to store long sequences of data that
+ are generally read in order.</dd>
+
+ <dt><b><a href="databases.html">Saving Data in SQL Databases</a></b></dt>
+ <dd>Learn to use a SQLite database to read and write structured data.</dd>
+
+</dl>
diff --git a/docs/html/training/basics/data-storage/shared-preferences.jd b/docs/html/training/basics/data-storage/shared-preferences.jd
new file mode 100644
index 0000000..67f45cb
--- /dev/null
+++ b/docs/html/training/basics/data-storage/shared-preferences.jd
@@ -0,0 +1,121 @@
+page.title=Saving Key-Value Sets
+parent.title=Data Storage
+parent.link=index.html
+
+trainingnavtop=true
+
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#GetSharedPreferences">Get a Handle to a SharedPreferences</a></li>
+ <li><a href="#WriteSharedPreference">Write to Shared Preferences</a></li>
+ <li><a href="#ReadSharedPreference">Read from Shared Preferences</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+ <li><a href="{@docRoot}guide/topics/data/data-storage.html#pref">Using Shared Preferences</a></li>
+</ul>
+
+</div>
+</div>
+
+
+<p>If you have a relatively small collection of key-values that you'd like to save,
+you should use the {@link android.content.SharedPreferences} APIs.
+A {@link android.content.SharedPreferences} object points to a file containing
+key-value pairs and provides simple methods to read and write them. Each
+{@link android.content.SharedPreferences} file is
+managed by the framework and can be private or shared.</p>
+
+<p>This class shows you how to use the {@link android.content.SharedPreferences} APIs to store and
+retrieve simple values.</p>
+
+<p class="note"><strong>Note:</strong> The {@link android.content.SharedPreferences} APIs are
+only for reading and writing key-value pairs and you should not confuse them with the
+{@link android.preference.Preference} APIs, which help you build a user interface
+for your app settings (although they use {@link android.content.SharedPreferences} as their
+implementation to save the app settings). For information about using the {@link
+android.preference.Preference} APIs, see the <a href="{@docRoot}guide/topics/ui/settings.html"
+>Settings</a> guide.</p>
+
+<h2 id="GetSharedPreferences">Get a Handle to a SharedPreferences</h2>
+
+<p>You can create a new shared preference file or access an existing
+one by calling one of two methods:</p>
+<ul>
+ <li>{@link android.content.Context#getSharedPreferences(String,int)
+getSharedPreferences()} — Use this if you need multiple shared preference files identified
+by name, which you specify with the first parameter. You can call this from any
+{@link android.content.Context} in your app.</li>
+ <li>{@link android.app.Activity#getPreferences(int) getPreferences()} — Use this from an
+{@link android.app.Activity} if you need
+to use only one shared preference file for the activity. Because this retrieves a default shared
+preference file that belongs to the activity, you don't need to supply a name.</li>
+</ul>
+
+<p>For example, the following code is executed inside a {@link android.app.Fragment}.
+It accesses the shared preferences file that's
+identified by the resource string {@code R.string.preference_file_key} and opens it using
+the private mode so the file is accessible by only your app.</p>
+
+<pre>
+Context context = getActivity();
+SharedPreferences sharedPref = context.getSharedPreferences(
+ getString(R.string.preference_file_key), Context.MODE_PRIVATE);
+</pre>
+
+<p>When naming your shared preference files, you should use a name that's uniquely identifiable
+to your app, such as {@code "com.example.myapp.PREFERENCE_FILE_KEY"}</p>
+
+<p>Alternatively, if you need just one shared preference file for your activity, you can use the
+{@link android.app.Activity#getPreferences(int) getPreferences()} method:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+</pre>
+
+<p class="caution"><strong>Caution:</strong> If you create a shared preferences file
+with {@link android.content.Context#MODE_WORLD_READABLE} or {@link
+android.content.Context#MODE_WORLD_WRITEABLE}, then any other apps that know the file identifier
+can access your data.</p>
+
+
+<h2 id="WriteSharedPreference">Write to Shared Preferences</h2>
+
+<p>To write to a shared preferences file, create a {@link
+android.content.SharedPreferences.Editor} by calling {@link
+android.content.SharedPreferences#edit} on your {@link android.content.SharedPreferences}.</p>
+
+<p>Pass the keys and values you want to write with methods such as {@link
+android.content.SharedPreferences.Editor#putInt putInt()} and {@link
+android.content.SharedPreferences.Editor#putString putString()}. Then call {@link
+android.content.SharedPreferences.Editor#commit} to save the changes. For example:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+SharedPreferences.Editor editor = sharedPref.edit();
+editor.putInt(getString(R.string.saved_high_score), newHighScore);
+editor.commit();
+</pre>
+
+
+<h2 id="ReadSharedPreference">Read from Shared Preferences</h2>
+
+<p>To retrieve values from a shared preferences file, call methods such as {@link
+android.content.SharedPreferences#getInt getInt()} and {@link
+android.content.SharedPreferences#getString getString()}, providing the key for the value
+you want, and optionally a default value to return if the key isn't
+present. For example:</p>
+
+<pre>
+SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
+long default = getResources().getInteger(R.string.saved_high_score_default));
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), default);
+</pre>
+
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index b70ba3f..4ad1353 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -104,6 +104,26 @@
</li>
<li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot?>training/basics/data-storage/index.html">
+ <span class="en">Saving Data</span>
+ </a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/shared-preferences.html">
+ <span class="en">Saving Key-Value Sets</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/files.html">
+ <span class="en">Saving Files</span>
+ </a>
+ </li>
+ <li><a href="<?cs var:toroot ?>training/basics/data-storage/databases.html">
+ <span class="en">Saving Data in SQL Databases</span>
+ </a>
+ </li>
+ </ul>
+ </li>
+
+ <li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/intents/index.html">
<span class="en">Interacting with Other Apps</span>
</a></div>
@@ -215,41 +235,31 @@
</li>
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiscreen/index.html">
- <span class="en">Designing for Multiple Screens</span>
- <span class="es">Cómo diseñar aplicaciones para varias pantallas</span>
- <span class="ja">複数画面のデザイン</span>
- <span class="ko">Designing for Multiple Screens</span>
- <span class="ru">Designing for Multiple Screens</span>
- <span class="zh-CN">针对多种屏幕进行设计</span>
- </a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiscreen/index.html"
+ zh-CN-lang="针对多种屏幕进行设计"
+ ja-lang="複数画面のデザイン"
+ es-lang="Cómo diseñar aplicaciones para varias pantallas"
+ >Designing for Multiple Screens</a>
+ </div>
<ul>
- <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html">
- <span class="en">Supporting Different Screen Sizes</span>
- <span class="es">Cómo admitir varios tamaños de pantalla</span>
- <span class="ja">さまざまな画面サイズのサポート</span>
- <span class="ko">다양한 화면 크기 지원</span>
- <span class="ru">Supporting Different Screen Sizes</span>
- <span class="zh-CN">支持各种屏幕尺寸</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html"
+ zh-CN-lang="支持各种屏幕尺寸"
+ ko-lang="다양한 화면 크기 지원"
+ ja-lang="さまざまな画面サイズのサポート"
+ es-lang="Cómo admitir varios tamaños de pantalla"
+ >Designing for Multiple Screens</a>
</li>
- <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html">
- <span class="en">Supporting Different Screen Densities</span>
- <span class="es">Cómo admitir varias densidades de pantalla</span>
- <span class="ja">さまざまな画面密度のサポート</span>
- <span class="ko">Supporting Different Screen Densities</span>
- <span class="ru">Supporting Different Screen Densities</span>
- <span class="zh-CN">支持各种屏幕密度</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html"
+ zh-CN-lang="支持各种屏幕密度"
+ ja-lang="さまざまな画面密度のサポート"
+ es-lang="Cómo admitir varias densidades de pantalla"
+ >Supporting Different Screen Densities</a>
</li>
- <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html">
- <span class="en">Implementing Adaptive UI Flows</span>
- <span class="es">Cómo implementar interfaces de usuario adaptables</span>
- <span class="ja">順応性のある UI フローの実装</span>
- <span class="ko">Implementing Adaptive UI Flows</span>
- <span class="ru">Implementing Adaptive UI Flows</span>
- <span class="zh-CN">实施自适应用户界面流程</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html"
+ zh-CN-lang="实施自适应用户界面流程"
+ ja-lang="順応性のある UI フローの実装"
+ es-lang="Cómo implementar interfaces de usuario adaptables"
+ >Implementing Adaptive UI Flows</a>
</li>
</ul>
</li>
@@ -299,50 +309,36 @@
</li>
<li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html">
- <span class="en">Optimizing Battery Life</span>
- <span class="es">Cómo optimizar la duración de la batería</span>
- <span class="ja">電池消費量の最適化</span>
- <span class="ko">Optimizing Battery Life</span>
- <span class="ru">Optimizing Battery Life</span>
- <span class="zh-CN">优化电池使用时间</span>
- </a></div>
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html"
+ zh-CN-lang="优化电池使用时间"
+ ja-lang="電池消費量の最適化"
+ es-lang="Cómo optimizar la duración de la batería"
+ >Optimizing Battery Life</a>
+ </div>
<ul>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html">
- <span class="en">Monitoring the Battery Level and Charging State</span>
- <span class="es">Cómo controlar el nivel de batería y el estado de carga</span>
- <span class="ja">電池残量と充電状態の監視</span>
- <span class="ko">Monitoring the Battery Level and Charging State</span>
- <span class="ru">Monitoring the Battery Level and Charging State</span>
- <span class="zh-CN">监控电池电量和充电状态</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html"
+ zh-CN-lang="监控电池电量和充电状态"
+ ja-lang="電池残量と充電状態の監視"
+ es-lang="Cómo controlar el nivel de batería y el estado de carga"
+ >Monitoring the Battery Level and Charging State</a>
</li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html">
- <span class="en">Determining and Monitoring the Docking State and Type</span>
- <span class="es">Cómo determinar y controlar el tipo de conector y el estado de la conexión</span>
- <span class="ja">ホルダーの装着状態とタイプの特定と監視</span>
- <span class="ko">Determining and Monitoring the Docking State and Type</span>
- <span class="ru">Determining and Monitoring the Docking State and Type</span>
- <span class="zh-CN">确定和监控基座对接状态和类型</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html"
+ zh-CN-lang="确定和监控基座对接状态和类型"
+ ja-lang="ホルダーの装着状態とタイプの特定と監視"
+ es-lang="Cómo determinar y controlar el tipo de conector y el estado de la conexión"
+ >Determining and Monitoring the Docking State and Type</a>
</li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html">
- <span class="en">Determining and Monitoring the Connectivity Status</span>
- <span class="es">Cómo determinar y controlar el estado de la conectividad</span>
- <span class="ja">接続状態の特定と監視</span>
- <span class="ko">Determining and Monitoring the Connectivity Status</span>
- <span class="ru">Determining and Monitoring the Connectivity Status</span>
- <span class="zh-CN">确定和监控网络连接状态</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html"
+ zh-CN-lang="确定和监控网络连接状态"
+ ja-lang="接続状態の特定と監視"
+ es-lang="Cómo determinar y controlar el estado de la conectividad"
+ >Determining and Monitoring the Connectivity Status</a>
</li>
- <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html">
- <span class="en">Manipulating Broadcast Receivers On Demand</span>
- <span class="es">Cómo manipular los receptores de emisión bajo demanda</span>
- <span class="ja">オンデマンドでのブロードキャスト レシーバ操作</span>
- <span class="ko">Manipulating Broadcast Receivers On Demand</span>
- <span class="ru">Manipulating Broadcast Receivers On Demand</span>
- <span class="zh-CN">根据需要操作广播接收器</span>
- </a>
+ <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html"
+ zh-CN-lang="根据需要操作广播接收器"
+ ja-lang="オンデマンドでのブロードキャスト レシーバ操作"
+ es-lang="Cómo manipular los receptores de emisión bajo demanda"
+ >Manipulating Broadcast Receivers On Demand</a>
</li>
</ul>
</li>
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 2ca54d4..8374b10 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -478,6 +478,9 @@
mFillPaint.setAlpha(currFillAlpha);
mFillPaint.setDither(mDither);
mFillPaint.setColorFilter(mColorFilter);
+ if (mColorFilter != null && !mGradientState.mHasSolidColor) {
+ mFillPaint.setColor(0xff000000);
+ }
if (haveStroke) {
mStrokePaint.setAlpha(currStrokeAlpha);
mStrokePaint.setDither(mDither);
@@ -513,7 +516,10 @@
canvas.drawRoundRect(mRect, rad, rad, mStrokePaint);
}
} else {
- canvas.drawRect(mRect, mFillPaint);
+ if (mFillPaint.getColor() != 0 || mColorFilter != null ||
+ mFillPaint.getShader() != null) {
+ canvas.drawRect(mRect, mFillPaint);
+ }
if (haveStroke) {
canvas.drawRect(mRect, mStrokePaint);
}
@@ -736,6 +742,9 @@
mFillPaint.setShader(new LinearGradient(x0, y0, x1, y1,
colors, st.mPositions, Shader.TileMode.CLAMP));
+ if (!mGradientState.mHasSolidColor) {
+ mFillPaint.setColor(0xff000000);
+ }
} else if (st.mGradient == RADIAL_GRADIENT) {
x0 = r.left + (r.right - r.left) * st.mCenterX;
y0 = r.top + (r.bottom - r.top) * st.mCenterY;
@@ -745,6 +754,9 @@
mFillPaint.setShader(new RadialGradient(x0, y0,
level * st.mGradientRadius, colors, null,
Shader.TileMode.CLAMP));
+ if (!mGradientState.mHasSolidColor) {
+ mFillPaint.setColor(0xff000000);
+ }
} else if (st.mGradient == SWEEP_GRADIENT) {
x0 = r.left + (r.right - r.left) * st.mCenterX;
y0 = r.top + (r.bottom - r.top) * st.mCenterY;
@@ -775,6 +787,9 @@
}
mFillPaint.setShader(new SweepGradient(x0, y0, tempColors, tempPositions));
+ if (!mGradientState.mHasSolidColor) {
+ mFillPaint.setColor(0xff000000);
+ }
}
}
}
@@ -1251,6 +1266,11 @@
private void initializeWithState(GradientState state) {
if (state.mHasSolidColor) {
mFillPaint.setColor(state.mSolidColor);
+ } else if (state.mColors == null) {
+ // If we don't have a solid color and we don't have a gradient,
+ // the app is stroking the shape, set the color to the default
+ // value of state.mSolidColor
+ mFillPaint.setColor(0);
}
mPadding = state.mPadding;
if (state.mStrokeWidth >= 0) {
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index c2e6ee3..7c23e4b 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2440,16 +2440,33 @@
return drawShape(left, top, texture, paint);
}
+// See SkPaintDefaults.h
+#define SkPaintDefaults_MiterLimit SkIntToScalar(4)
+
status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom, SkPaint* p) {
if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p)) {
return DrawGlInfo::kStatusDone;
}
- // only fill style is supported by drawConvexPath, since others have to handle joins
if (p->getStyle() != SkPaint::kFill_Style) {
- mCaches.activeTexture(0);
- const PathTexture* texture = mCaches.rectShapeCache.getRect(right - left, bottom - top, p);
- return drawShape(left, top, texture, p);
+ // only fill style is supported by drawConvexPath, since others have to handle joins
+ if (p->getPathEffect() != 0 || p->getStrokeJoin() != SkPaint::kMiter_Join ||
+ p->getStrokeMiter() != SkPaintDefaults_MiterLimit) {
+ mCaches.activeTexture(0);
+ const PathTexture* texture =
+ mCaches.rectShapeCache.getRect(right - left, bottom - top, p);
+ return drawShape(left, top, texture, p);
+ }
+
+ SkPath path;
+ SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
+ if (p->getStyle() == SkPaint::kStrokeAndFill_Style) {
+ rect.outset(p->getStrokeWidth() / 2, p->getStrokeWidth() / 2);
+ }
+ path.addRect(rect);
+ drawConvexPath(path, p);
+
+ return DrawGlInfo::kStatusDrew;
}
if (p->isAntiAlias() && !mSnapshot->transform->isSimple()) {
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index fdb6818..61418fb 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -1737,7 +1737,8 @@
streamState.readSettings();
// unmute stream that was muted but is not affect by mute anymore
- if (streamState.muteCount() != 0 && !isStreamAffectedByMute(streamType)) {
+ if (streamState.muteCount() != 0 && !isStreamAffectedByMute(streamType) &&
+ !isStreamMutedByRingerMode(streamType)) {
int size = streamState.mDeathHandlers.size();
for (int i = 0; i < size; i++) {
streamState.mDeathHandlers.get(i).mMuteCount = 1;
@@ -2591,6 +2592,18 @@
public synchronized void readSettings() {
int remainingDevices = AudioSystem.DEVICE_OUT_ALL;
+ // do not read system stream volume from settings: this stream is always aliased
+ // to another stream type and its volume is never persisted. Values in settings can
+ // only be stale values
+ if ((mStreamType == AudioSystem.STREAM_SYSTEM) ||
+ (mStreamType == AudioSystem.STREAM_SYSTEM_ENFORCED)) {
+ mLastAudibleIndex.put(AudioSystem.DEVICE_OUT_DEFAULT,
+ 10 * AudioManager.DEFAULT_STREAM_VOLUME[mStreamType]);
+ mIndex.put(AudioSystem.DEVICE_OUT_DEFAULT,
+ 10 * AudioManager.DEFAULT_STREAM_VOLUME[mStreamType]);
+ return;
+ }
+
for (int i = 0; remainingDevices != 0; i++) {
int device = (1 << i);
if ((device & remainingDevices) == 0) {
@@ -2621,11 +2634,8 @@
// a last audible index of 0 should never be stored for ring and notification
// streams on phones (voice capable devices).
- // same for system stream on phones and tablets
- if ((lastAudibleIndex == 0) &&
- ((mVoiceCapable &&
- (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_RING)) ||
- (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_SYSTEM))) {
+ if ((lastAudibleIndex == 0) && mVoiceCapable &&
+ (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_RING)) {
lastAudibleIndex = AudioManager.DEFAULT_STREAM_VOLUME[mStreamType];
// Correct the data base
sendMsg(mAudioHandler,
@@ -2639,11 +2649,9 @@
mLastAudibleIndex.put(device, getValidIndex(10 * lastAudibleIndex));
// the initial index should never be 0 for ring and notification streams on phones
// (voice capable devices) if not in silent or vibrate mode.
- // same for system stream on phones and tablets
if ((index == 0) && (mRingerMode == AudioManager.RINGER_MODE_NORMAL) &&
- ((mVoiceCapable &&
- (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_RING)) ||
- (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_SYSTEM))) {
+ mVoiceCapable &&
+ (mStreamVolumeAlias[mStreamType] == AudioSystem.STREAM_RING)) {
index = lastAudibleIndex;
// Correct the data base
sendMsg(mAudioHandler,
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index f69c0af..2716b04 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -68,7 +68,7 @@
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 90;
+ private static final int DATABASE_VERSION = 91;
private Context mContext;
private int mUserHandle;
@@ -1400,6 +1400,39 @@
upgradeVersion = 90;
}
+ if (upgradeVersion == 90) {
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ try {
+ String[] systemToGlobal = {
+ Settings.Global.WINDOW_ANIMATION_SCALE,
+ Settings.Global.TRANSITION_ANIMATION_SCALE,
+ Settings.Global.ANIMATOR_DURATION_SCALE,
+ Settings.Global.FANCY_IME_ANIMATIONS,
+ Settings.Global.COMPATIBILITY_MODE,
+ Settings.Global.EMERGENCY_TONE,
+ Settings.Global.CALL_AUTO_RETRY,
+ Settings.Global.DEBUG_APP,
+ Settings.Global.WAIT_FOR_DEBUGGER,
+ Settings.Global.SHOW_PROCESSES,
+ Settings.Global.ALWAYS_FINISH_ACTIVITIES,
+ };
+ String[] secureToGlobal = {
+ Settings.Global.PREFERRED_NETWORK_MODE,
+ Settings.Global.PREFERRED_CDMA_SUBSCRIPTION,
+ };
+
+ moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_GLOBAL, systemToGlobal, true);
+ moveSettingsToNewTable(db, TABLE_SECURE, TABLE_GLOBAL, secureToGlobal, true);
+
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ }
+ }
+ upgradeVersion = 91;
+ }
+
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
@@ -1816,12 +1849,6 @@
loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
R.integer.def_screen_off_timeout);
- // Set default cdma emergency tone
- loadSetting(stmt, Settings.System.EMERGENCY_TONE, 0);
-
- // Set default cdma call auto retry
- loadSetting(stmt, Settings.System.CALL_AUTO_RETRY, 0);
-
// Set default cdma DTMF type
loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
@@ -1846,9 +1873,6 @@
loadBooleanSetting(stmt, Settings.System.NOTIFICATION_LIGHT_PULSE,
R.bool.def_notification_pulse);
- loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
- loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
- PackageHelper.APP_INSTALL_AUTO);
loadUISoundEffectsSettings(stmt);
@@ -1912,16 +1936,6 @@
loadSetting(stmt, Settings.Secure.WIFI_WATCHDOG_WATCH_LIST, wifiWatchList);
}
- // Set the preferred network mode to 0 = Global, CDMA default
- int type;
- if (TelephonyManager.getLteOnCdmaModeStatic() == PhoneConstants.LTE_ON_CDMA_TRUE) {
- type = Phone.NT_MODE_GLOBAL;
- } else {
- type = SystemProperties.getInt("ro.telephony.default_network",
- RILConstants.PREFERRED_NETWORK_MODE);
- }
- loadSetting(stmt, Settings.Secure.PREFERRED_NETWORK_MODE, type);
-
// Don't do this. The SystemServer will initialize ADB_ENABLED from a
// persistent system property instead.
//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
@@ -2105,6 +2119,26 @@
loadStringSetting(stmt, Settings.Global.UNLOCK_SOUND,
R.string.def_unlock_sound);
+ loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);
+ loadSetting(stmt, Settings.Global.DEFAULT_INSTALL_LOCATION,
+ PackageHelper.APP_INSTALL_AUTO);
+
+ // Set default cdma emergency tone
+ loadSetting(stmt, Settings.Global.EMERGENCY_TONE, 0);
+
+ // Set default cdma call auto retry
+ loadSetting(stmt, Settings.Global.CALL_AUTO_RETRY, 0);
+
+ // Set the preferred network mode to 0 = Global, CDMA default
+ int type;
+ if (TelephonyManager.getLteOnCdmaModeStatic() == PhoneConstants.LTE_ON_CDMA_TRUE) {
+ type = Phone.NT_MODE_GLOBAL;
+ } else {
+ type = SystemProperties.getInt("ro.telephony.default_network",
+ RILConstants.PREFERRED_NETWORK_MODE);
+ }
+ loadSetting(stmt, Settings.Global.PREFERRED_NETWORK_MODE, type);
+
// --- New global settings start here
} finally {
if (stmt != null) stmt.close();
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 10f96cc..cc6656d 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -227,6 +227,8 @@
sSecureGlobalKeys.add(Settings.Global.GLOBAL_HTTP_PROXY_EXCLUSION_LIST);
sSecureGlobalKeys.add(Settings.Global.SET_GLOBAL_HTTP_PROXY);
sSecureGlobalKeys.add(Settings.Global.DEFAULT_DNS_SERVER);
+ sSecureGlobalKeys.add(Settings.Global.PREFERRED_NETWORK_MODE);
+ sSecureGlobalKeys.add(Settings.Global.PREFERRED_CDMA_SUBSCRIPTION);
// Keys from the 'system' table now moved to 'global'
// These must match Settings.System.MOVED_TO_GLOBAL
@@ -249,6 +251,17 @@
sSystemGlobalKeys.add(Settings.Global.STAY_ON_WHILE_PLUGGED_IN);
sSystemGlobalKeys.add(Settings.Global.WIFI_SLEEP_POLICY);
sSystemGlobalKeys.add(Settings.Global.MODE_RINGER);
+ sSystemGlobalKeys.add(Settings.Global.WINDOW_ANIMATION_SCALE);
+ sSystemGlobalKeys.add(Settings.Global.TRANSITION_ANIMATION_SCALE);
+ sSystemGlobalKeys.add(Settings.Global.ANIMATOR_DURATION_SCALE);
+ sSystemGlobalKeys.add(Settings.Global.FANCY_IME_ANIMATIONS);
+ sSystemGlobalKeys.add(Settings.Global.COMPATIBILITY_MODE);
+ sSystemGlobalKeys.add(Settings.Global.EMERGENCY_TONE);
+ sSystemGlobalKeys.add(Settings.Global.CALL_AUTO_RETRY);
+ sSystemGlobalKeys.add(Settings.Global.DEBUG_APP);
+ sSystemGlobalKeys.add(Settings.Global.WAIT_FOR_DEBUGGER);
+ sSystemGlobalKeys.add(Settings.Global.SHOW_PROCESSES);
+ sSystemGlobalKeys.add(Settings.Global.ALWAYS_FINISH_ACTIVITIES);
}
private boolean settingMovedToGlobal(final String name) {
diff --git a/packages/SystemUI/res/layout/quick_settings.xml b/packages/SystemUI/res/layout/quick_settings.xml
index c1bcdfe..d119cf5 100644
--- a/packages/SystemUI/res/layout/quick_settings.xml
+++ b/packages/SystemUI/res/layout/quick_settings.xml
@@ -22,10 +22,11 @@
android:background="@drawable/notification_panel_bg"
>
<!-- TODO: Put into ScrollView -->
- <ScrollView
+ <com.android.systemui.statusbar.phone.QuickSettingsScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/close_handle_underlap"
+ android:overScrollMode="ifContentScrolls"
>
<com.android.systemui.statusbar.phone.QuickSettingsContainerView
android:id="@+id/quick_settings_container"
@@ -34,7 +35,7 @@
android:animateLayoutChanges="true"
android:columnCount="@integer/quick_settings_num_columns"
/>
- </ScrollView>
+ </com.android.systemui.statusbar.phone.QuickSettingsScrollView>
<View
android:id="@+id/handle"
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_time.xml b/packages/SystemUI/res/layout/quick_settings_tile_time.xml
index 4ffbf52..910e1f6 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_time.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_time.xml
@@ -29,10 +29,11 @@
android:hand_hour="@drawable/ic_qs_clock_hour"
android:hand_minute="@drawable/ic_qs_clock_minute"
/>
- <com.android.systemui.statusbar.policy.QuickSettingsDateView
+ <com.android.systemui.statusbar.policy.DateView
android:textAppearance="@style/TextAppearance.QuickSettings.TileView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
+ android:gravity="center"
/>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
index f93da08..140cc80 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
@@ -17,6 +17,7 @@
package com.android.systemui.recent;
import android.app.Activity;
+import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -30,6 +31,8 @@
import com.android.systemui.SystemUIApplication;
import com.android.systemui.statusbar.tablet.StatusBarPanel;
+import java.util.List;
+
public class RecentsActivity extends Activity {
public static final String TOGGLE_RECENTS_INTENT = "com.android.systemui.TOGGLE_RECENTS";
public static final String CLOSE_RECENTS_INTENT = "com.android.systemui.CLOSE_RECENTS";
@@ -122,11 +125,15 @@
public void dismissAndGoBack() {
if (mRecentsPanel != null) {
- final SystemUIApplication app = (SystemUIApplication) getApplication();
- final RecentTasksLoader recentTasksLoader = app.getRecentTasksLoader();
- TaskDescription firstTask = mRecentsPanel.getBottomTask();
- if (firstTask != null && mRecentsPanel.simulateClick(firstTask)) {
- // recents panel will take care of calling show(false);
+ final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+
+ final List<ActivityManager.RecentTaskInfo> recentTasks =
+ am.getRecentTasks(2,
+ ActivityManager.RECENT_WITH_EXCLUDED |
+ ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+ if (recentTasks.size() > 1 &&
+ mRecentsPanel.simulateClick(recentTasks.get(1).persistentId)) {
+ // recents panel will take care of calling show(false) through simulateClick
return;
}
mRecentsPanel.show(false);
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
index 4aa2095..6cb7dec 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
@@ -76,11 +76,11 @@
}
}
- public View findViewForTask(TaskDescription task) {
+ public View findViewForTask(int persistentTaskId) {
for (int i = 0; i < mLinearLayout.getChildCount(); i++) {
View v = mLinearLayout.getChildAt(i);
RecentsPanelView.ViewHolder holder = (RecentsPanelView.ViewHolder) v.getTag();
- if (holder.taskDescription == task) {
+ if (holder.taskDescription.persistentTaskId == persistentTaskId) {
return v;
}
}
@@ -156,19 +156,19 @@
}
setLayoutTransition(transitioner);
- // Scroll to end after layout.
- final ViewTreeObserver observer = getViewTreeObserver();
+ // Scroll to end after initial layout.
final OnGlobalLayoutListener updateScroll = new OnGlobalLayoutListener() {
public void onGlobalLayout() {
mLastScrollPosition = scrollPositionOfMostRecent();
scrollTo(mLastScrollPosition, 0);
+ final ViewTreeObserver observer = getViewTreeObserver();
if (observer.isAlive()) {
observer.removeOnGlobalLayoutListener(this);
}
}
};
- observer.addOnGlobalLayoutListener(updateScroll);
+ getViewTreeObserver().addOnGlobalLayoutListener(updateScroll);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 3a89059..ff51996 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -95,7 +95,7 @@
public void setAdapter(TaskDescriptionAdapter adapter);
public void setCallback(RecentsCallback callback);
public void setMinSwipeAlpha(float minAlpha);
- public View findViewForTask(TaskDescription task);
+ public View findViewForTask(int persistentTaskId);
}
private final class OnLongClickDelegate implements View.OnLongClickListener {
@@ -518,24 +518,6 @@
showIfReady();
}
- public TaskDescription getBottomTask() {
- if (mRecentsContainer != null) {
- ViewGroup container = mRecentsContainer;
- if (container instanceof RecentsScrollView) {
- container = (ViewGroup) container.findViewById(
- R.id.recents_linear_layout);
- }
- if (container.getChildCount() > 0) {
- View v = container.getChildAt(container.getChildCount() - 1);
- if (v.getTag() instanceof ViewHolder) {
- ViewHolder h = (ViewHolder)v.getTag();
- return h.taskDescription;
- }
- }
- }
- return null;
- }
-
public void onWindowAnimationStart() {
if (mItemToAnimateInWhenWindowAnimationIsFinished != null) {
final int startDelay = 100;
@@ -590,7 +572,7 @@
public void onTasksLoaded(ArrayList<TaskDescription> tasks, boolean firstScreenful) {
mNumItemsWaitingForThumbnailsAndIcons = firstScreenful
- ? tasks.size() : mRecentTaskDescriptions == null
+ ? tasks.size() : mRecentTaskDescriptions == null
? 0 : mRecentTaskDescriptions.size();
if (mRecentTaskDescriptions == null) {
mRecentTaskDescriptions = new ArrayList<TaskDescription>(tasks);
@@ -622,11 +604,11 @@
setContentDescription(recentAppsAccessibilityDescription);
}
- public boolean simulateClick(TaskDescription task) {
+ public boolean simulateClick(int persistentTaskId) {
if (mRecentsContainer instanceof RecentsScrollView){
RecentsScrollView scrollView
= (RecentsScrollView) mRecentsContainer;
- View v = scrollView.findViewForTask(task);
+ View v = scrollView.findViewForTask(persistentTaskId);
if (v != null) {
handleOnClick(v);
return true;
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
index 5e0df49..47b0113 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
@@ -77,11 +77,11 @@
}
}
- public View findViewForTask(TaskDescription task) {
+ public View findViewForTask(int persistentTaskId) {
for (int i = 0; i < mLinearLayout.getChildCount(); i++) {
View v = mLinearLayout.getChildAt(i);
RecentsPanelView.ViewHolder holder = (RecentsPanelView.ViewHolder) v.getTag();
- if (holder.taskDescription == task) {
+ if (holder.taskDescription.persistentTaskId == persistentTaskId) {
return v;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index c9ec481..32b7c68 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -24,6 +24,7 @@
import android.view.View;
import com.android.systemui.R;
+import com.android.systemui.statusbar.GestureRecorder;
public class NotificationPanelView extends PanelView {
@@ -47,9 +48,12 @@
@Override
public void fling(float vel, boolean always) {
- ((PhoneStatusBarView) mBar).mBar.getGestureRecorder().tag(
- "fling " + ((vel > 0) ? "open" : "closed"),
- "notifications,v=" + vel);
+ GestureRecorder gr = ((PhoneStatusBarView) mBar).mBar.getGestureRecorder();
+ if (gr != null) {
+ gr.tag(
+ "fling " + ((vel > 0) ? "open" : "closed"),
+ "notifications,v=" + vel);
+ }
super.fling(vel, always);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
index f623692..6b9bc89 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
@@ -83,7 +83,11 @@
// figure out which panel needs to be talked to here
if (event.getAction() == MotionEvent.ACTION_DOWN) {
final PanelView panel = selectPanelForTouchX(event.getX());
- LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s", mState, panel);
+ boolean enabled = panel.isEnabled();
+ LOG("PanelBar.onTouch: state=%d ACTION_DOWN: panel %s %s", mState, panel,
+ (enabled ? "" : " (disabled)"));
+ if (!enabled)
+ return false;
startOpeningPanel(panel);
}
final boolean result = mTouchingPanel.getHandle().dispatchTouchEvent(event);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 12e749d..a12af8d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -30,6 +30,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
+import android.database.ContentObserver;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
@@ -39,6 +40,7 @@
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.inputmethodservice.InputMethodService;
+import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
@@ -97,6 +99,7 @@
public static final boolean DEBUG = BaseStatusBar.DEBUG;
public static final boolean SPEW = DEBUG;
public static final boolean DUMPTRUCK = true; // extra dumpsys info
+ public static final boolean DEBUG_GESTURES = false;
// additional instrumentation for testing purposes; intended to be left on during development
public static final boolean CHATTY = DEBUG;
@@ -245,7 +248,9 @@
DisplayMetrics mDisplayMetrics = new DisplayMetrics();
// XXX: gesture research
- private GestureRecorder mGestureRec = new GestureRecorder("/sdcard/statusbar_gestures.dat");
+ private final GestureRecorder mGestureRec = DEBUG_GESTURES
+ ? new GestureRecorder("/sdcard/statusbar_gestures.dat")
+ : null;
private int mNavigationIconHints = 0;
private final Animator.AnimatorListener mMakeIconsInvisible = new AnimatorListenerAdapter() {
@@ -259,6 +264,26 @@
}
};
+ // ensure quick settings is disabled until the current user makes it through the setup wizard
+ private boolean mUserSetup = false;
+ private ContentObserver mUserSetupObserver = new ContentObserver(new Handler()) {
+ @Override
+ public void onChange(boolean selfChange) {
+ final boolean userSetup = 0 != Settings.Secure.getIntForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.USER_SETUP_COMPLETE,
+ 0 /*default */,
+ mCurrentUserId);
+ if (userSetup != mUserSetup) {
+ mUserSetup = userSetup;
+ if (mSettingsPanel != null)
+ mSettingsPanel.setEnabled(mUserSetup);
+ if (!mUserSetup && mStatusBarView != null)
+ animateCollapseQuickSettings();
+ }
+ }
+ };
+
@Override
public void start() {
mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
@@ -461,6 +486,9 @@
filter.addAction(Intent.ACTION_SCREEN_ON);
context.registerReceiver(mBroadcastReceiver, filter);
+ // listen for USER_SETUP_COMPLETE setting (per-user)
+ resetUserSetupObserver();
+
return mStatusBarView;
}
@@ -1325,7 +1353,9 @@
}
}
- mGestureRec.add(event);
+ if (DEBUG_GESTURES) {
+ mGestureRec.add(event);
+ }
return false;
}
@@ -1605,8 +1635,10 @@
}
}
- pw.print(" status bar gestures: ");
- mGestureRec.dump(fd, pw, args);
+ if (DEBUG_GESTURES) {
+ pw.print(" status bar gestures: ");
+ mGestureRec.dump(fd, pw, args);
+ }
mNetworkController.dump(fd, pw, args);
}
@@ -1688,8 +1720,10 @@
// called by makeStatusbar and also by PhoneStatusBarView
void updateDisplaySize() {
mDisplay.getMetrics(mDisplayMetrics);
- mGestureRec.tag("display",
- String.format("%dx%d", mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels));
+ if (DEBUG_GESTURES) {
+ mGestureRec.tag("display",
+ String.format("%dx%d", mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels));
+ }
}
private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
@@ -1827,8 +1861,18 @@
if (MULTIUSER_DEBUG) mNotificationPanelDebugText.setText("USER " + newUserId);
animateCollapsePanels();
updateNotificationIcons();
+ resetUserSetupObserver();
}
-
+
+ private void resetUserSetupObserver() {
+ mContext.getContentResolver().unregisterContentObserver(mUserSetupObserver);
+ mUserSetupObserver.onChange(false);
+ mContext.getContentResolver().registerContentObserver(
+ Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), true,
+ mUserSetupObserver,
+ mCurrentUserId);
+ }
+
private void setIntruderAlertVisibility(boolean vis) {
if (!ENABLE_INTRUDERS) return;
if (DEBUG) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java
new file mode 100644
index 0000000..8a2f8d6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.ScrollView;
+
+public class QuickSettingsScrollView extends ScrollView {
+
+ public QuickSettingsScrollView(Context context) {
+ super(context);
+ }
+
+ public QuickSettingsScrollView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public QuickSettingsScrollView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ }
+
+ // Y U NO PROTECTED
+ private int getScrollRange() {
+ int scrollRange = 0;
+ if (getChildCount() > 0) {
+ View child = getChildAt(0);
+ scrollRange = Math.max(0,
+ child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop));
+ }
+ return scrollRange;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ final int range = getScrollRange();
+ if (range == 0) {
+ return false;
+ }
+
+ return super.onTouchEvent(ev);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
index f9d9dac0..e555277 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
@@ -29,6 +29,7 @@
import com.android.systemui.R;
import com.android.systemui.statusbar.BaseStatusBar;
+import com.android.systemui.statusbar.GestureRecorder;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.LocationController;
@@ -95,9 +96,12 @@
@Override
public void fling(float vel, boolean always) {
- ((PhoneStatusBarView) mBar).mBar.getGestureRecorder().tag(
- "fling " + ((vel > 0) ? "open" : "closed"),
- "settings,v=" + vel);
+ GestureRecorder gr = ((PhoneStatusBarView) mBar).mBar.getGestureRecorder();
+ if (gr != null) {
+ gr.tag(
+ "fling " + ((vel > 0) ? "open" : "closed"),
+ "settings,v=" + vel);
+ }
super.fling(vel, always);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java
deleted file mode 100644
index c52f94b..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/QuickSettingsDateView.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.statusbar.policy;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.text.format.DateFormat;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewParent;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-
-import java.util.Date;
-
-public final class QuickSettingsDateView extends DateView {
-
- public QuickSettingsDateView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- protected void updateClock() {
- final Context context = getContext();
- Date now = new Date();
- CharSequence dow = DateFormat.format("MMM d, yyyy", now);
- setText(dow);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java
index 5007cf4..ff06630 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbAccessoryUriActivity.java
@@ -26,6 +26,7 @@
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
+import android.os.UserHandle;
import android.util.Log;
import com.android.internal.app.AlertActivity;
@@ -90,7 +91,7 @@
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
- startActivity(intent);
+ startActivityAsUser(intent, UserHandle.CURRENT);
} catch (ActivityNotFoundException e) {
Log.e(TAG, "startActivity failed for " + mUri);
}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java
index 030a261..3eccccd 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbConfirmActivity.java
@@ -16,23 +16,21 @@
package com.android.systemui.usb;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.hardware.usb.IUsbManager;
-import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbAccessory;
+import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -42,7 +40,6 @@
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
-
import com.android.systemui.R;
public class UsbConfirmActivity extends AlertActivity
@@ -62,10 +59,10 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- Intent intent = getIntent();
- mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
+ Intent intent = getIntent();
+ mDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
- mResolveInfo = (ResolveInfo)intent.getParcelableExtra("rinfo");
+ mResolveInfo = (ResolveInfo) intent.getParcelableExtra("rinfo");
PackageManager packageManager = getPackageManager();
String appName = mResolveInfo.loadLabel(packageManager).toString();
@@ -117,7 +114,8 @@
try {
IBinder b = ServiceManager.getService(USB_SERVICE);
IUsbManager service = IUsbManager.Stub.asInterface(b);
- int uid = mResolveInfo.activityInfo.applicationInfo.uid;
+ final int uid = mResolveInfo.activityInfo.applicationInfo.uid;
+ final int userId = UserHandle.myUserId();
boolean alwaysUse = mAlwaysUse.isChecked();
Intent intent = null;
@@ -129,9 +127,10 @@
service.grantDevicePermission(mDevice, uid);
// set or clear default setting
if (alwaysUse) {
- service.setDevicePackage(mDevice, mResolveInfo.activityInfo.packageName);
+ service.setDevicePackage(
+ mDevice, mResolveInfo.activityInfo.packageName, userId);
} else {
- service.setDevicePackage(mDevice, null);
+ service.setDevicePackage(mDevice, null, userId);
}
} else if (mAccessory != null) {
intent = new Intent(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
@@ -141,10 +140,10 @@
service.grantAccessoryPermission(mAccessory, uid);
// set or clear default setting
if (alwaysUse) {
- service.setAccessoryPackage(mAccessory,
- mResolveInfo.activityInfo.packageName);
+ service.setAccessoryPackage(
+ mAccessory, mResolveInfo.activityInfo.packageName, userId);
} else {
- service.setAccessoryPackage(mAccessory, null);
+ service.setAccessoryPackage(mAccessory, null, userId);
}
}
@@ -152,7 +151,7 @@
intent.setComponent(
new ComponentName(mResolveInfo.activityInfo.packageName,
mResolveInfo.activityInfo.name));
- startActivity(intent);
+ startActivityAsUser(intent, new UserHandle(userId));
} catch (Exception e) {
Log.e(TAG, "Unable to start activity", e);
}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
index c384f50..6e88d0d 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbPermissionActivity.java
@@ -32,6 +32,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -67,7 +68,7 @@
mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
mAccessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
mPendingIntent = (PendingIntent)intent.getParcelableExtra(Intent.EXTRA_INTENT);
- mUid = intent.getIntExtra("uid", 0);
+ mUid = intent.getIntExtra(Intent.EXTRA_UID, -1);
mPackageName = intent.getStringExtra("package");
PackageManager packageManager = getPackageManager();
@@ -128,7 +129,8 @@
if (mPermissionGranted) {
service.grantDevicePermission(mDevice, mUid);
if (mAlwaysUse.isChecked()) {
- service.setDevicePackage(mDevice, mPackageName);
+ final int userId = UserHandle.getUserId(mUid);
+ service.setDevicePackage(mDevice, mPackageName, userId);
}
}
}
@@ -137,7 +139,8 @@
if (mPermissionGranted) {
service.grantAccessoryPermission(mAccessory, mUid);
if (mAlwaysUse.isChecked()) {
- service.setAccessoryPackage(mAccessory, mPackageName);
+ final int userId = UserHandle.getUserId(mUid);
+ service.setAccessoryPackage(mAccessory, mPackageName, userId);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
index f61ecb1..9928f7f 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
@@ -16,8 +16,6 @@
package com.android.systemui.usb;
-import com.android.internal.app.ResolverActivity;
-
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.ResolveInfo;
@@ -30,9 +28,11 @@
import android.os.Parcelable;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.util.Log;
import android.widget.CheckBox;
+import com.android.internal.app.ResolverActivity;
import com.android.systemui.R;
import java.util.ArrayList;
@@ -92,34 +92,36 @@
super.onDestroy();
}
+ @Override
protected void onIntentSelected(ResolveInfo ri, Intent intent, boolean alwaysCheck) {
try {
IBinder b = ServiceManager.getService(USB_SERVICE);
IUsbManager service = IUsbManager.Stub.asInterface(b);
- int uid = ri.activityInfo.applicationInfo.uid;
+ final int uid = ri.activityInfo.applicationInfo.uid;
+ final int userId = UserHandle.myUserId();
if (mDevice != null) {
// grant permission for the device
service.grantDevicePermission(mDevice, uid);
// set or clear default setting
if (alwaysCheck) {
- service.setDevicePackage(mDevice, ri.activityInfo.packageName);
+ service.setDevicePackage(mDevice, ri.activityInfo.packageName, userId);
} else {
- service.setDevicePackage(mDevice, null);
+ service.setDevicePackage(mDevice, null, userId);
}
} else if (mAccessory != null) {
// grant permission for the accessory
service.grantAccessoryPermission(mAccessory, uid);
// set or clear default setting
if (alwaysCheck) {
- service.setAccessoryPackage(mAccessory, ri.activityInfo.packageName);
+ service.setAccessoryPackage(mAccessory, ri.activityInfo.packageName, userId);
} else {
- service.setAccessoryPackage(mAccessory, null);
+ service.setAccessoryPackage(mAccessory, null, userId);
}
}
try {
- startActivity(intent);
+ startActivityAsUser(intent, new UserHandle(userId));
} catch (ActivityNotFoundException e) {
Log.e(TAG, "startActivity failed", e);
}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 93f2aa5..5af32e9 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -2573,11 +2573,13 @@
final boolean hasNavBar = (isDefaultDisplay && mHasNavigationBar
&& mNavigationBar != null && mNavigationBar.isVisibleLw());
+ final int adjust = sim & SOFT_INPUT_MASK_ADJUST;
+
if (!isDefaultDisplay) {
if (attached != null) {
// If this window is attached to another, our display
// frame is the same as the one we are attached to.
- setAttachedWindowFrames(win, fl, sim, attached, true, pf, df, cf, vf);
+ setAttachedWindowFrames(win, fl, adjust, attached, true, pf, df, cf, vf);
} else {
// Give the window full screen.
pf.left = df.left = cf.left = mUnrestrictedScreenLeft;
@@ -2596,8 +2598,6 @@
attrs.gravity = Gravity.BOTTOM;
mDockLayer = win.getSurfaceLayer();
} else {
- final int adjust = sim & SOFT_INPUT_MASK_ADJUST;
-
if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR))
== (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)
&& (sysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
@@ -2611,7 +2611,7 @@
if (attached != null) {
// If this window is attached to another, our display
// frame is the same as the one we are attached to.
- setAttachedWindowFrames(win, fl, sim, attached, true, pf, df, cf, vf);
+ setAttachedWindowFrames(win, fl, adjust, attached, true, pf, df, cf, vf);
} else {
if (attrs.type == TYPE_STATUS_BAR_PANEL
|| attrs.type == TYPE_STATUS_BAR_SUB_PANEL) {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
index 5922810..8776a80 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardFaceUnlockView.java
@@ -153,7 +153,8 @@
if (mBiometricUnlock != null) {
mBiometricUnlock.stop();
}
- mLockPatternUtils.setCurrentUser(userId);
+ // No longer required; static value set by KeyguardViewMediator
+ // mLockPatternUtils.setCurrentUser(userId);
}
};
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
index a7fc1a1..3df9bb2 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java
@@ -67,6 +67,7 @@
private AppWidgetHost mAppWidgetHost;
private KeyguardWidgetPager mAppWidgetContainer;
private ViewFlipper mSecurityViewContainer;
+ private KeyguardTransportControlView mTransportControl;
private boolean mEnableMenuKey;
private boolean mIsVerifyUnlockOnly;
private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
@@ -80,7 +81,6 @@
private KeyguardSecurityModel mSecurityModel;
private Rect mTempRect = new Rect();
- private KeyguardTransportControlView mTransportControl;
/*package*/ interface TransportCallback {
void hide();
@@ -145,45 +145,7 @@
kgwr.setVisibility(VISIBLE);
mSecurityViewContainer = (ViewFlipper) findViewById(R.id.view_flipper);
- // This code manages showing/hiding the transport control. We keep it around and only
- // add it to the hierarchy if it needs to be present.
- mTransportControl =
- (KeyguardTransportControlView) findViewById(R.id.keyguard_transport_control);
- if (mTransportControl != null) {
- mTransportControl.setKeyguardCallback(new TransportCallback() {
- boolean mSticky = false;
- @Override
- public void hide() {
- int page = getWidgetPosition(R.id.keyguard_transport_control);
- if (page != -1 && !mSticky) {
- if (page == mAppWidgetContainer.getCurrentPage()) {
- // Switch back to clock view if music was showing.
- mAppWidgetContainer
- .setCurrentPage(getWidgetPosition(R.id.keyguard_status_view));
- }
- mAppWidgetContainer.removeView(mTransportControl);
- // XXX keep view attached to hierarchy so we still get show/hide events
- // from AudioManager
- KeyguardHostView.this.addView(mTransportControl);
- mTransportControl.setVisibility(View.GONE);
- showAppropriateWidgetPage();
- }
- }
-
- @Override
- public void show() {
- if (getWidgetPosition(R.id.keyguard_transport_control) == -1) {
- KeyguardHostView.this.removeView(mTransportControl);
- mAppWidgetContainer.addView(mTransportControl,
- getWidgetPosition(R.id.keyguard_status_view) + 1);
- mTransportControl.setVisibility(View.VISIBLE);
- // Once shown, leave it showing
- mSticky = true;
- showAppropriateWidgetPage();
- }
- }
- });
- }
+ addDefaultWidgets();
updateSecurityViews();
setSystemUiVisibility(getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK);
}
@@ -702,6 +664,52 @@
}
}
+ private void addDefaultWidgets() {
+ LayoutInflater inflater = LayoutInflater.from(mContext);
+ inflater.inflate(R.layout.keyguard_status_view, mAppWidgetContainer, true);
+ inflater.inflate(R.layout.keyguard_transport_control_view, mAppWidgetContainer, true);
+
+ mTransportControl =
+ (KeyguardTransportControlView) findViewById(R.id.keyguard_transport_control);
+
+
+ // This code manages showing/hiding the transport control. We keep it around and only
+ // add it to the hierarchy if it needs to be present.
+ if (mTransportControl != null) {
+ mTransportControl.setKeyguardCallback(new TransportCallback() {
+ boolean mSticky = false;
+ @Override
+ public void hide() {
+ int page = getWidgetPosition(R.id.keyguard_transport_control);
+ if (page != -1 && !mSticky) {
+ if (page == mAppWidgetContainer.getCurrentPage()) {
+ // Switch back to clock view if music was showing.
+ mAppWidgetContainer
+ .setCurrentPage(getWidgetPosition(R.id.keyguard_status_view));
+ }
+ mAppWidgetContainer.removeView(mTransportControl);
+ // XXX keep view attached to hierarchy so we still get show/hide events
+ // from AudioManager
+ KeyguardHostView.this.addView(mTransportControl);
+ mTransportControl.setVisibility(View.GONE);
+ }
+ }
+
+ @Override
+ public void show() {
+ if (getWidgetPosition(R.id.keyguard_transport_control) == -1) {
+ KeyguardHostView.this.removeView(mTransportControl);
+ mAppWidgetContainer.addView(mTransportControl,
+ getWidgetPosition(R.id.keyguard_status_view) + 1);
+ mTransportControl.setVisibility(View.VISIBLE);
+ // Once shown, leave it showing
+ mSticky = true;
+ }
+ }
+ });
+ }
+ }
+
private void maybePopulateWidgets() {
DevicePolicyManager dpm =
(DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
@@ -716,6 +724,7 @@
inflateAndAddUserSelectorWidgetIfNecessary();
// Add status widget
+ View statusView = null;
int statusWidgetId = mLockPatternUtils.getStatusWidget();
if (statusWidgetId != -1) {
addWidget(statusWidgetId);
@@ -729,6 +738,16 @@
mAppWidgetContainer.removeView(newStatusWidget);
newStatusWidget.setId(R.id.keyguard_status_view);
mAppWidgetContainer.addView(newStatusWidget, oldStatusWidgetPosition);
+ statusView = newStatusWidget;
+ } else {
+ statusView = findViewById(R.id.keyguard_status_view);
+ }
+
+ // Disable all user interaction on status view. This is done to prevent falsing in the
+ // pocket from triggering useractivity and prevents 3rd party replacement widgets
+ // from responding to user interaction while in this position.
+ if (statusView instanceof KeyguardWidgetFrame) {
+ ((KeyguardWidgetFrame) statusView).setDisableUserInteraction(true);
}
// Add user-selected widget
@@ -812,4 +831,8 @@
}
}
+ public void goToUserSwitcher() {
+ mAppWidgetContainer.setCurrentPage(getWidgetPosition(R.id.keyguard_multi_user_selector));
+ }
+
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
index 8c1dfe1..a034f4c 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardMultiUserAvatar.java
@@ -22,11 +22,11 @@
import android.animation.ValueAnimator.AnimatorUpdateListener;
import android.content.Context;
import android.content.pm.UserInfo;
+import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
-import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -38,9 +38,13 @@
private ImageView mUserImage;
private TextView mUserName;
private UserInfo mUserInfo;
- private static final int INACTIVE_COLOR = 85;
- private static final int INACTIVE_ALPHA = 195;
- private static final float ACTIVE_SCALE = 1.1f;
+ private static final float ACTIVE_ALPHA = 1.0f;
+ private static final float INACTIVE_ALPHA = 0.5f;
+ private static final float ACTIVE_SCALE = 1.2f;
+ private static final float ACTIVE_TEXT_BACGROUND_ALPHA = 0.5f;
+ private static final float INACTIVE_TEXT_BACGROUND_ALPHA = 0f;
+ private static int mActiveTextColor;
+ private static int mInactiveTextColor;
private boolean mActive;
private boolean mInit = true;
private KeyguardMultiUserSelectorView mUserSelector;
@@ -76,8 +80,12 @@
}
private void init() {
+ Resources res = mContext.getResources();
+ mActiveTextColor = res.getColor(R.color.kg_multi_user_text_active);
+ mInactiveTextColor = res.getColor(R.color.kg_multi_user_text_inactive);
+
mUserImage = (ImageView) findViewById(R.id.keyguard_user_avatar);
- mUserName = (TextView) findViewById(R.id.keyguard_user_name);
+ mUserName = (TextView) findViewById(R.id.keyguard_user_name);
mUserImage.setImageDrawable(Drawable.createFromPath(mUserInfo.iconPath));
mUserName.setText(mUserInfo.name);
@@ -89,51 +97,61 @@
public void setActive(boolean active, boolean animate, int duration, final Runnable onComplete) {
if (mActive != active || mInit) {
mActive = active;
- final int finalFilterAlpha = mActive ? 0 : INACTIVE_ALPHA;
- final int initFilterAlpha = mActive ? INACTIVE_ALPHA : 0;
-
- final float finalScale = mActive ? ACTIVE_SCALE : 1.0f;
- final float initScale = mActive ? 1.0f : ACTIVE_SCALE;
if (active) {
KeyguardSubdivisionLayout parent = (KeyguardSubdivisionLayout) getParent();
parent.setTopChild(parent.indexOfChild(this));
}
+ }
+ updateVisualsForActive(mActive, animate, duration, true, onComplete);
+ }
- if (animate) {
- ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
- va.addUpdateListener(new AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- float r = animation.getAnimatedFraction();
- float scale = (1 - r) * initScale + r * finalScale;
- int filterAlpha = (int) ((1 - r) * initFilterAlpha + r * finalFilterAlpha);
- setScaleX(scale);
- setScaleY(scale);
- mUserImage.setColorFilter(Color.argb(filterAlpha, INACTIVE_COLOR,
- INACTIVE_COLOR, INACTIVE_COLOR));
- mUserSelector.invalidate();
+ void updateVisualsForActive(boolean active, boolean animate, int duration, boolean scale,
+ final Runnable onComplete) {
+ final float finalAlpha = active ? ACTIVE_ALPHA : INACTIVE_ALPHA;
+ final float initAlpha = active ? INACTIVE_ALPHA : ACTIVE_ALPHA;
+ final float finalScale = active && scale ? ACTIVE_SCALE : 1.0f;
+ final float initScale = active ? 1.0f : ACTIVE_SCALE;
+ final int finalTextBgAlpha = active ? (int) (ACTIVE_TEXT_BACGROUND_ALPHA * 255) :
+ (int) (INACTIVE_TEXT_BACGROUND_ALPHA * 255);
+ final int initTextBgAlpha = active ? (int) (INACTIVE_TEXT_BACGROUND_ALPHA * 255) :
+ (int) (ACTIVE_TEXT_BACGROUND_ALPHA * 255);
+ int textColor = active ? mActiveTextColor : mInactiveTextColor;
+ mUserName.setTextColor(textColor);
- }
- });
- va.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- if (onComplete != null) {
- onComplete.run();
- }
- }
- });
- va.setDuration(duration);
- va.start();
- } else {
- setScaleX(finalScale);
- setScaleY(finalScale);
- mUserImage.setColorFilter(Color.argb(finalFilterAlpha, INACTIVE_COLOR,
- INACTIVE_COLOR, INACTIVE_COLOR));
- if (onComplete != null) {
- post(onComplete);
+ if (animate) {
+ ValueAnimator va = ValueAnimator.ofFloat(0f, 1f);
+ va.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float r = animation.getAnimatedFraction();
+ float scale = (1 - r) * initScale + r * finalScale;
+ float alpha = (1 - r) * initAlpha + r * finalAlpha;
+ int textBgAlpha = (int) ((1 - r) * initTextBgAlpha + r * finalTextBgAlpha);
+ setScaleX(scale);
+ setScaleY(scale);
+ mUserImage.setAlpha(alpha);
+ mUserName.setBackgroundColor(Color.argb(textBgAlpha, 0, 0, 0));
+ mUserSelector.invalidate();
}
+ });
+ va.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (onComplete != null) {
+ onComplete.run();
+ }
+ }
+ });
+ va.setDuration(duration);
+ va.start();
+ } else {
+ setScaleX(finalScale);
+ setScaleY(finalScale);
+ mUserImage.setAlpha(finalAlpha);
+ mUserName.setBackgroundColor(Color.argb(finalTextBgAlpha, 0, 0, 0));
+ if (onComplete != null) {
+ post(onComplete);
}
}
}
@@ -156,13 +174,7 @@
public void setPressed(boolean pressed) {
if (!mPressedStateLocked) {
super.setPressed(pressed);
- if (pressed) {
- mUserImage.setColorFilter(Color.argb(0, INACTIVE_COLOR,
- INACTIVE_COLOR, INACTIVE_COLOR));
- } else if (!mActive) {
- mUserImage.setColorFilter(Color.argb(INACTIVE_ALPHA, INACTIVE_COLOR,
- INACTIVE_COLOR, INACTIVE_COLOR));
- }
+ updateVisualsForActive(pressed || mActive, false, 0, mActive, null);
} else {
mTempPressedStateHolder = pressed;
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
index 1977b529..4003754 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSelectorView.java
@@ -23,6 +23,8 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.MediaStore;
@@ -38,6 +40,8 @@
import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
import com.android.internal.R;
+import java.util.List;
+
public class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView {
private static final boolean DEBUG = KeyguardHostView.DEBUG;
private static final String TAG = "SecuritySelectorView";
@@ -118,12 +122,39 @@
this(context, null);
}
+ private boolean wouldLaunchResolverActivity(Intent intent) {
+ PackageManager packageManager = mContext.getPackageManager();
+ ResolveInfo resolved = packageManager.resolveActivityAsUser(intent,
+ PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser());
+ final List<ResolveInfo> appList = packageManager.queryIntentActivitiesAsUser(
+ intent, PackageManager.MATCH_DEFAULT_ONLY, mLockPatternUtils.getCurrentUser());
+ // If the list contains the above resolved activity, then it can't be
+ // ResolverActivity itself.
+ for (int i = 0; i < appList.size(); i++) {
+ ResolveInfo tmp = appList.get(i);
+ if (tmp.activityInfo.name.equals(resolved.activityInfo.name)
+ && tmp.activityInfo.packageName.equals(resolved.activityInfo.packageName)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
protected void launchCamera() {
if (mLockPatternUtils.isSecure()) {
// Launch the secure version of the camera
- Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
+ final Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- launchActivity(intent, true);
+
+ if (wouldLaunchResolverActivity(intent)) {
+ // TODO: Show disambiguation dialog instead.
+ // For now, we'll treat this like launching any other app from secure keyguard.
+ // When they do, user sees the system's ResolverActivity which lets them choose
+ // which secure camera to use.
+ launchActivity(intent, false);
+ } else {
+ launchActivity(intent, true);
+ }
} else {
// Launch the normal camera
launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA), false);
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
index a3a9c5f..c4f761f 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java
@@ -24,9 +24,11 @@
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.os.IBinder;
+import android.os.Parcelable;
import android.os.SystemProperties;
import android.util.Log;
import android.util.Slog;
+import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -89,7 +91,7 @@
boolean enableScreenRotation = shouldEnableScreenRotation();
- maybeCreateKeyguardLocked(enableScreenRotation);
+ maybeCreateKeyguardLocked(enableScreenRotation, false);
maybeEnableScreenRotation(enableScreenRotation);
// Disable common aspects of the system/status/navigation bars that are not appropriate or
@@ -120,13 +122,19 @@
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- maybeCreateKeyguardLocked(shouldEnableScreenRotation());
+ maybeCreateKeyguardLocked(shouldEnableScreenRotation(), false);
}
}
- private void maybeCreateKeyguardLocked(boolean enableScreenRotation) {
+ SparseArray<Parcelable> mStateContainer = new SparseArray<Parcelable>();
+
+ private void maybeCreateKeyguardLocked(boolean enableScreenRotation, boolean userSwitched) {
final boolean isActivity = (mContext instanceof Activity); // for test activity
+ if (mKeyguardHost != null) {
+ mKeyguardHost.saveHierarchyState(mStateContainer);
+ }
+
if (mKeyguardHost == null) {
if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
@@ -161,11 +169,13 @@
mWindowLayoutParams = lp;
mViewManager.addView(mKeyguardHost, lp);
}
- inflateKeyguardView();
+ inflateKeyguardView(userSwitched);
mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
+
+ mKeyguardHost.restoreHierarchyState(mStateContainer);
}
- private void inflateKeyguardView() {
+ private void inflateKeyguardView(boolean userSwitched) {
View v = mKeyguardHost.findViewById(R.id.keyguard_host_view);
if (v != null) {
mKeyguardHost.removeView(v);
@@ -179,6 +189,10 @@
mKeyguardView.setLockPatternUtils(mLockPatternUtils);
mKeyguardView.setViewMediatorCallback(mViewMediatorCallback);
+ if (userSwitched) {
+ mKeyguardView.goToUserSwitcher();
+ }
+
if (mScreenOn) {
mKeyguardView.show();
}
@@ -219,11 +233,11 @@
/**
* Reset the state of the view.
*/
- public synchronized void reset() {
+ public synchronized void reset(boolean userSwitched) {
if (DEBUG) Log.d(TAG, "reset()");
// User might have switched, check if we need to go back to keyguard
// TODO: It's preferable to stay and show the correct lockscreen or unlock if none
- maybeCreateKeyguardLocked(shouldEnableScreenRotation());
+ maybeCreateKeyguardLocked(shouldEnableScreenRotation(), userSwitched);
}
public synchronized void onScreenTurnedOff() {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
index 514ada6..83324bc 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
@@ -291,7 +291,7 @@
public void onUserSwitched(int userId) {
// Note that the mLockPatternUtils user has already been updated from setCurrentUser.
synchronized (KeyguardViewMediator.this) {
- resetStateLocked();
+ resetStateLocked(true);
}
// We should always go back to the locked state when a user
// switch happens. Is there a more direct way to do this?
@@ -351,7 +351,7 @@
+ "device isn't provisioned yet.");
doKeyguardLocked();
} else {
- resetStateLocked();
+ resetStateLocked(false);
}
}
}
@@ -364,7 +364,7 @@
+ "showing; need to show keyguard so user can enter sim pin");
doKeyguardLocked();
} else {
- resetStateLocked();
+ resetStateLocked(false);
}
}
break;
@@ -377,14 +377,14 @@
} else {
if (DEBUG) Log.d(TAG, "PERM_DISABLED, resetStateLocked to"
+ "show permanently disabled message in lockscreen.");
- resetStateLocked();
+ resetStateLocked(false);
}
}
break;
case READY:
synchronized (this) {
if (isShowing()) {
- resetStateLocked();
+ resetStateLocked(false);
}
}
break;
@@ -530,7 +530,7 @@
}
} else if (mShowing) {
notifyScreenOffLocked();
- resetStateLocked();
+ resetStateLocked(false);
} else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT
|| (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) {
// if the screen turned off because of timeout or the user hit the power button
@@ -644,7 +644,7 @@
if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
mExitSecureCallback.onKeyguardExitResult(false);
mExitSecureCallback = null;
- resetStateLocked();
+ resetStateLocked(false);
} else {
showLocked();
@@ -805,11 +805,12 @@
/**
* Send message to keyguard telling it to reset its state.
+ * @param userSwitched true if we're resetting state because user switched
* @see #handleReset()
*/
- private void resetStateLocked() {
+ private void resetStateLocked(boolean userSwitched) {
if (DEBUG) Log.d(TAG, "resetStateLocked");
- Message msg = mHandler.obtainMessage(RESET);
+ Message msg = mHandler.obtainMessage(RESET, userSwitched ? 1 : 0, 0);
mHandler.sendMessage(msg);
}
@@ -894,6 +895,8 @@
/**
* Update the newUserId. Call while holding WindowManagerService lock.
+ * NOTE: Should only be called by KeyguardViewMediator in response to the user id changing.
+ *
* @param newUserId The id of the incoming user.
*/
public void setCurrentUser(int newUserId) {
@@ -1044,7 +1047,7 @@
handleHide();
return ;
case RESET:
- handleReset();
+ handleReset(msg.arg1 != 0);
return ;
case VERIFY_UNLOCK:
handleVerifyUnlock();
@@ -1287,13 +1290,13 @@
}
/**
- * Handle message sent by {@link #resetStateLocked()}
+ * Handle message sent by {@link #resetStateLocked(boolean)}
* @see #RESET
*/
- private void handleReset() {
+ private void handleReset(boolean userSwitched) {
synchronized (KeyguardViewMediator.this) {
if (DEBUG) Log.d(TAG, "handleReset");
- mKeyguardViewManager.reset();
+ mKeyguardViewManager.reset(userSwitched);
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
index d17c128..fe1005f 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java
@@ -19,13 +19,17 @@
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.NinePatchDrawable;
+import android.graphics.Shader;
+import android.os.PowerManager;
+import android.os.SystemClock;
import android.util.AttributeSet;
+import android.view.MotionEvent;
import android.widget.FrameLayout;
import com.android.internal.R;
@@ -33,13 +37,19 @@
public class KeyguardWidgetFrame extends FrameLayout {
private final static PorterDuffXfermode sAddBlendMode =
new PorterDuffXfermode(PorterDuff.Mode.ADD);
- private static Drawable sLeftOverscrollDrawable;
- private static Drawable sRightOverscrollDrawable;
- private Drawable mForegroundDrawable;
+ private int mGradientColor;
+ private LinearGradient mForegroundGradient;
+ private LinearGradient mLeftToRightGradient;
+ private LinearGradient mRightToLeftGradient;
+ private Paint mGradientPaint = new Paint();
+ boolean mLeftToRight = true;
+
private float mOverScrollAmount = 0f;
private final Rect mForegroundRect = new Rect();
private int mForegroundAlpha = 0;
+ private PowerManager mPowerManager;
+ private boolean mDisableInteraction;
public KeyguardWidgetFrame(Context context) {
this(context, null, 0);
@@ -51,28 +61,42 @@
public KeyguardWidgetFrame(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- Resources res = context.getResources();
- if (sLeftOverscrollDrawable == null) {
- sLeftOverscrollDrawable = res.getDrawable(R.drawable.kg_widget_overscroll_layer_left);
- sRightOverscrollDrawable = res.getDrawable(R.drawable.kg_widget_overscroll_layer_right);
- }
+ mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+
+ Resources res = context.getResources();
int hPadding = res.getDimensionPixelSize(R.dimen.kg_widget_pager_horizontal_padding);
int topPadding = res.getDimensionPixelSize(R.dimen.kg_widget_pager_top_padding);
int bottomPadding = res.getDimensionPixelSize(R.dimen.kg_widget_pager_bottom_padding);
setPadding(hPadding, topPadding, hPadding, bottomPadding);
+ mGradientColor = res.getColor(R.color.kg_widget_pager_gradient);
+ mGradientPaint.setXfermode(sAddBlendMode);
+ }
+
+ public void setDisableUserInteraction(boolean disabled) {
+ mDisableInteraction = disabled;
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ if (!mDisableInteraction) {
+ mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
+ return super.onInterceptTouchEvent(ev);
+ }
+ return true;
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
- if (mForegroundAlpha > 0) {
- mForegroundDrawable.setBounds(mForegroundRect);
- Paint p = ((NinePatchDrawable) mForegroundDrawable).getPaint();
- p.setXfermode(sAddBlendMode);
- mForegroundDrawable.draw(canvas);
- p.setXfermode(null);
- }
+ drawGradientOverlay(canvas);
+
+ }
+
+ private void drawGradientOverlay(Canvas c) {
+ mGradientPaint.setShader(mForegroundGradient);
+ mGradientPaint.setAlpha(mForegroundAlpha);
+ c.drawRect(mForegroundRect, mGradientPaint);
}
@Override
@@ -80,19 +104,19 @@
super.onSizeChanged(w, h, oldw, oldh);
mForegroundRect.set(getPaddingLeft(), getPaddingTop(),
w - getPaddingRight(), h - getPaddingBottom());
+ float x0 = mLeftToRight ? 0 : mForegroundRect.width();
+ float x1 = mLeftToRight ? mForegroundRect.width(): 0;
+ mLeftToRightGradient = new LinearGradient(x0, 0f, x1, 0f,
+ mGradientColor, 0, Shader.TileMode.CLAMP);
+ mRightToLeftGradient = new LinearGradient(x1, 0f, x0, 0f,
+ mGradientColor, 0, Shader.TileMode.CLAMP);
}
void setOverScrollAmount(float r, boolean left) {
if (Float.compare(mOverScrollAmount, r) != 0) {
mOverScrollAmount = r;
- if (left && mForegroundDrawable != sLeftOverscrollDrawable) {
- mForegroundDrawable = sLeftOverscrollDrawable;
- } else if (!left && mForegroundDrawable != sRightOverscrollDrawable) {
- mForegroundDrawable = sRightOverscrollDrawable;
- }
-
- mForegroundAlpha = (int) Math.round((r * 255));
- mForegroundDrawable.setAlpha(mForegroundAlpha);
+ mForegroundGradient = left ? mLeftToRightGradient : mRightToLeftGradient;
+ mForegroundAlpha = (int) Math.round((0.85f * r * 255));
if (getLayerType() != LAYER_TYPE_HARDWARE) {
setLayerType(LAYER_TYPE_HARDWARE, null);
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
index 4af7a25..a1603dc 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java
@@ -27,6 +27,8 @@
import android.widget.FrameLayout;
+import com.android.internal.R;
+
public class KeyguardWidgetPager extends PagedView {
ZInterpolator mZInterpolator = new ZInterpolator(0.5f);
private static float CAMERA_DISTANCE = 10000;
@@ -47,6 +49,9 @@
public KeyguardWidgetPager(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ if (getImportantForAccessibility() == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+ setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ }
}
/*
@@ -60,6 +65,7 @@
// The framework adds a default padding to AppWidgetHostView. We don't need this padding
// for the Keyguard, so we override it to be 0.
widget.setPadding(0, 0, 0, 0);
+ widget.setContentDescription(widget.getAppWidgetInfo().label);
frame.addView(widget, lp);
addView(frame);
}
@@ -90,6 +96,21 @@
}
@Override
+ public String getCurrentPageDescription() {
+ final int nextPageIndex = getNextPage();
+ if (nextPageIndex >= 0 && nextPageIndex < getChildCount()) {
+ KeyguardWidgetFrame frame = (KeyguardWidgetFrame) getChildAt(nextPageIndex);
+ CharSequence title = frame.getChildAt(0).getContentDescription();
+ if (title == null) {
+ title = "";
+ }
+ return mContext.getString(R.string.keyguard_accessibility_widget_changed,
+ title, nextPageIndex + 1, getChildCount());
+ }
+ return super.getCurrentPageDescription();
+ }
+
+ @Override
protected void overScroll(float amount) {
acceleratedOverScroll(amount);
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java
index f7f23c7..e9ea2c3 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetRegion.java
@@ -16,6 +16,8 @@
package com.android.internal.policy.impl.keyguard;
import android.content.Context;
+import android.os.PowerManager;
+import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
@@ -29,6 +31,7 @@
KeyguardGlowStripView mRightStrip;
KeyguardWidgetPager mPager;
private int mPage = 0;
+ private PowerManager mPowerManager;
public KeyguardWidgetRegion(Context context) {
this(context, null, 0);
@@ -40,6 +43,7 @@
public KeyguardWidgetRegion(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
}
@Override
@@ -70,21 +74,25 @@
@Override
public void onPageSwitch(View newPage, int newPageIndex) {
- mPage = newPageIndex;
-
- // If we're showing the default system status widget, then we want to hide the clock
- boolean hideClock = false;
+ boolean showingStatusWidget = false;
if ((newPage instanceof ViewGroup)) {
ViewGroup vg = (ViewGroup) newPage;
if (vg.getChildAt(0) instanceof KeyguardStatusView) {
- hideClock = true;
+ showingStatusWidget = true;
}
}
- if (hideClock) {
+ // Disable the status bar clock if we're showing the default status widget
+ if (showingStatusWidget) {
setSystemUiVisibility(getSystemUiVisibility() | View.STATUS_BAR_DISABLE_CLOCK);
} else {
setSystemUiVisibility(getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_CLOCK);
}
+
+ // Extend the display timeout if the user switches pages
+ if (mPage != newPageIndex) {
+ mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
+ mPage = newPageIndex;
+ }
}
}
diff --git a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java
index 8ff8dad..3de1428 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard_obsolete/KeyguardViewMediator.java
@@ -392,14 +392,14 @@
mScreenOn = mPM.isScreenOn();
mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
- String soundPath = Settings.System.getString(cr, Settings.System.LOCK_SOUND);
+ String soundPath = Settings.Global.getString(cr, Settings.Global.LOCK_SOUND);
if (soundPath != null) {
mLockSoundId = mLockSounds.load(soundPath, 1);
}
if (soundPath == null || mLockSoundId == 0) {
if (DEBUG) Log.d(TAG, "failed to load sound from " + soundPath);
}
- soundPath = Settings.System.getString(cr, Settings.System.UNLOCK_SOUND);
+ soundPath = Settings.Global.getString(cr, Settings.Global.UNLOCK_SOUND);
if (soundPath != null) {
mUnlockSoundId = mLockSounds.load(soundPath, 1);
}
diff --git a/services/java/com/android/server/BatteryService.java b/services/java/com/android/server/BatteryService.java
index 0b4871d..0045f4a 100644
--- a/services/java/com/android/server/BatteryService.java
+++ b/services/java/com/android/server/BatteryService.java
@@ -40,11 +40,9 @@
import java.io.File;
import java.io.FileDescriptor;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.Arrays;
/**
@@ -69,12 +67,12 @@
* a degree Centigrade</p>
* <p>"technology" - String, the type of battery installed, e.g. "Li-ion"</p>
*/
-public class BatteryService extends Binder {
+public final class BatteryService extends Binder {
private static final String TAG = BatteryService.class.getSimpleName();
- private static final boolean LOCAL_LOGV = false;
+ private static final boolean DEBUG = false;
- static final int BATTERY_SCALE = 100; // battery capacity is a percentage
+ private static final int BATTERY_SCALE = 100; // battery capacity is a percentage
// Used locally for determining when to make a last ditch effort to log
// discharge stats before the device dies.
@@ -92,6 +90,9 @@
private final Context mContext;
private final IBatteryStats mBatteryStats;
+ private final Object mLock = new Object();
+
+ /* Begin native fields: All of these fields are set by native code. */
private boolean mAcOnline;
private boolean mUsbOnline;
private boolean mWirelessOnline;
@@ -103,7 +104,7 @@
private int mBatteryTemperature;
private String mBatteryTechnology;
private boolean mBatteryLevelCritical;
- private int mInvalidCharger;
+ /* End native fields. */
private int mLastBatteryStatus;
private int mLastBatteryHealth;
@@ -112,6 +113,8 @@
private int mLastBatteryVoltage;
private int mLastBatteryTemperature;
private boolean mLastBatteryLevelCritical;
+
+ private int mInvalidCharger;
private int mLastInvalidCharger;
private int mLowBatteryWarningLevel;
@@ -128,6 +131,8 @@
private boolean mSentLowBatteryBroadcast = false;
+ private native void native_update();
+
public BatteryService(Context context, LightsService lights) {
mContext = context;
mLed = new Led(context, lights);
@@ -146,83 +151,83 @@
// watch for invalid charger messages if the invalid_charger switch exists
if (new File("/sys/devices/virtual/switch/invalid_charger/state").exists()) {
- mInvalidChargerObserver.startObserving("DEVPATH=/devices/virtual/switch/invalid_charger");
+ mInvalidChargerObserver.startObserving(
+ "DEVPATH=/devices/virtual/switch/invalid_charger");
}
// set initial status
- update();
+ synchronized (mLock) {
+ updateLocked();
+ }
}
- public final boolean isPowered() {
- // assume we are powered if battery state is unknown so the "stay on while plugged in" option will work.
- return (mAcOnline || mUsbOnline || mWirelessOnline
- || mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN);
+ void systemReady() {
+ // check our power situation now that it is safe to display the shutdown dialog.
+ synchronized (mLock) {
+ shutdownIfNoPowerLocked();
+ shutdownIfOverTempLocked();
+ }
}
- public final boolean isPowered(int plugTypeSet) {
+ /**
+ * Returns true if the device is plugged into any of the specified plug types.
+ */
+ public boolean isPowered(int plugTypeSet) {
+ synchronized (mLock) {
+ return isPoweredLocked(plugTypeSet);
+ }
+ }
+
+ private boolean isPoweredLocked(int plugTypeSet) {
// assume we are powered if battery state is unknown so
// the "stay on while plugged in" option will work.
if (mBatteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) {
return true;
}
- if (plugTypeSet == 0) {
- return false;
+ if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_AC) != 0 && mAcOnline) {
+ return true;
}
- int plugTypeBit = 0;
- if (mAcOnline) {
- plugTypeBit |= BatteryManager.BATTERY_PLUGGED_AC;
+ if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_USB) != 0 && mUsbOnline) {
+ return true;
}
- if (mUsbOnline) {
- plugTypeBit |= BatteryManager.BATTERY_PLUGGED_USB;
+ if ((plugTypeSet & BatteryManager.BATTERY_PLUGGED_WIRELESS) != 0 && mWirelessOnline) {
+ return true;
}
- if (mWirelessOnline) {
- plugTypeBit |= BatteryManager.BATTERY_PLUGGED_WIRELESS;
- }
- return (plugTypeSet & plugTypeBit) != 0;
+ return false;
}
- public final int getPlugType() {
- return mPlugType;
- }
-
- private UEventObserver mPowerSupplyObserver = new UEventObserver() {
- @Override
- public void onUEvent(UEventObserver.UEvent event) {
- update();
+ /**
+ * Returns the current plug type.
+ */
+ public int getPlugType() {
+ synchronized (mLock) {
+ return mPlugType;
}
- };
+ }
- private UEventObserver mInvalidChargerObserver = new UEventObserver() {
- @Override
- public void onUEvent(UEventObserver.UEvent event) {
- int invalidCharger = "1".equals(event.get("SWITCH_STATE")) ? 1 : 0;
- if (mInvalidCharger != invalidCharger) {
- mInvalidCharger = invalidCharger;
- update();
- }
+ /**
+ * Returns battery level as a percentage.
+ */
+ public int getBatteryLevel() {
+ synchronized (mLock) {
+ return mBatteryLevel;
}
- };
-
- // returns battery level as a percentage
- public final int getBatteryLevel() {
- return mBatteryLevel;
}
- // true if battery level is below the first warning threshold
- public final boolean isBatteryLow() {
- return mBatteryPresent && mBatteryLevel <= mLowBatteryWarningLevel;
+ /**
+ * Returns true if battery level is below the first warning threshold.
+ */
+ public boolean isBatteryLow() {
+ synchronized (mLock) {
+ return mBatteryPresent && mBatteryLevel <= mLowBatteryWarningLevel;
+ }
}
- void systemReady() {
- // check our power situation now that it is safe to display the shutdown dialog.
- shutdownIfNoPower();
- shutdownIfOverTemp();
- }
-
- private final void shutdownIfNoPower() {
+ private void shutdownIfNoPowerLocked() {
// shut down gracefully if our battery is critically low and we are not powered.
// wait until the system has booted before attempting to display the shutdown dialog.
- if (mBatteryLevel == 0 && !isPowered() && ActivityManagerNative.isSystemReady()) {
+ if (mBatteryLevel == 0 && !isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)
+ && ActivityManagerNative.isSystemReady()) {
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -230,7 +235,7 @@
}
}
- private final void shutdownIfOverTemp() {
+ private void shutdownIfOverTempLocked() {
// shut down gracefully if temperature is too high (> 68.0C by default)
// wait until the system has booted before attempting to display the
// shutdown dialog.
@@ -243,18 +248,19 @@
}
}
- private native void native_update();
-
- private synchronized final void update() {
+ private void updateLocked() {
+ // Update the values of mAcOnline, et. all.
native_update();
- processValues();
+
+ // Process the new values.
+ processValuesLocked();
}
- private void processValues() {
+ private void processValuesLocked() {
boolean logOutlier = false;
long dischargeDuration = 0;
- mBatteryLevelCritical = mBatteryLevel <= mCriticalBatteryLevel;
+ mBatteryLevelCritical = (mBatteryLevel <= mCriticalBatteryLevel);
if (mAcOnline) {
mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
} else if (mUsbOnline) {
@@ -265,6 +271,22 @@
mPlugType = BATTERY_PLUGGED_NONE;
}
+ if (DEBUG) {
+ Slog.d(TAG, "Processing new values: "
+ + "mAcOnline=" + mAcOnline
+ + ", mUsbOnline=" + mUsbOnline
+ + ", mWirelessOnline=" + mWirelessOnline
+ + ", mBatteryStatus=" + mBatteryStatus
+ + ", mBatteryHealth=" + mBatteryHealth
+ + ", mBatteryPresent=" + mBatteryPresent
+ + ", mBatteryLevel=" + mBatteryLevel
+ + ", mBatteryTechnology=" + mBatteryTechnology
+ + ", mBatteryVoltage=" + mBatteryVoltage
+ + ", mBatteryTemperature=" + mBatteryTemperature
+ + ", mBatteryLevelCritical=" + mBatteryLevelCritical
+ + ", mPlugType=" + mPlugType);
+ }
+
// Let the battery stats keep track of the current level.
try {
mBatteryStats.setBatteryState(mBatteryStatus, mBatteryHealth,
@@ -274,8 +296,8 @@
// Should never happen.
}
- shutdownIfNoPower();
- shutdownIfOverTemp();
+ shutdownIfNoPowerLocked();
+ shutdownIfOverTempLocked();
if (mBatteryStatus != mLastBatteryStatus ||
mBatteryHealth != mLastBatteryHealth ||
@@ -342,7 +364,7 @@
&& mBatteryLevel <= mLowBatteryWarningLevel
&& (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
- sendIntent();
+ sendIntentLocked();
// Separate broadcast is sent for power connected / not connected
// since the standard intent will not wake any applications and some
@@ -373,7 +395,7 @@
// This needs to be done after sendIntent() so that we get the lastest battery stats.
if (logOutlier && dischargeDuration != 0) {
- logOutlier(dischargeDuration);
+ logOutlierLocked(dischargeDuration);
}
mLastBatteryStatus = mBatteryStatus;
@@ -388,13 +410,13 @@
}
}
- private final void sendIntent() {
+ private void sendIntentLocked() {
// Pack up the values and broadcast them to everyone
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
| Intent.FLAG_RECEIVER_REPLACE_PENDING);
- int icon = getIcon(mBatteryLevel);
+ int icon = getIconLocked(mBatteryLevel);
intent.putExtra(BatteryManager.EXTRA_STATUS, mBatteryStatus);
intent.putExtra(BatteryManager.EXTRA_HEALTH, mBatteryHealth);
@@ -408,22 +430,22 @@
intent.putExtra(BatteryManager.EXTRA_TECHNOLOGY, mBatteryTechnology);
intent.putExtra(BatteryManager.EXTRA_INVALID_CHARGER, mInvalidCharger);
- if (false) {
- Slog.d(TAG, "level:" + mBatteryLevel +
- " scale:" + BATTERY_SCALE + " status:" + mBatteryStatus +
- " health:" + mBatteryHealth + " present:" + mBatteryPresent +
- " voltage: " + mBatteryVoltage +
- " temperature: " + mBatteryTemperature +
- " technology: " + mBatteryTechnology +
- " AC powered:" + mAcOnline + " USB powered:" + mUsbOnline +
- " Wireless powered:" + mWirelessOnline +
- " icon:" + icon + " invalid charger:" + mInvalidCharger);
+ if (DEBUG) {
+ Slog.d(TAG, "Sending ACTION_BATTERY_CHANGED. level:" + mBatteryLevel +
+ ", scale:" + BATTERY_SCALE + ", status:" + mBatteryStatus +
+ ", health:" + mBatteryHealth + ", present:" + mBatteryPresent +
+ ", voltage: " + mBatteryVoltage +
+ ", temperature: " + mBatteryTemperature +
+ ", technology: " + mBatteryTechnology +
+ ", AC powered:" + mAcOnline + ", USB powered:" + mUsbOnline +
+ ", Wireless powered:" + mWirelessOnline +
+ ", icon:" + icon + ", invalid charger:" + mInvalidCharger);
}
ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL);
}
- private final void logBatteryStats() {
+ private void logBatteryStatsLocked() {
IBinder batteryInfoService = ServiceManager.getService(BATTERY_STATS_SERVICE_NAME);
if (batteryInfoService == null) return;
@@ -461,7 +483,7 @@
}
}
- private final void logOutlier(long duration) {
+ private void logOutlierLocked(long duration) {
ContentResolver cr = mContext.getContentResolver();
String dischargeThresholdString = Settings.Global.getString(cr,
Settings.Global.BATTERY_DISCHARGE_THRESHOLD);
@@ -475,11 +497,11 @@
if (duration <= durationThreshold &&
mDischargeStartLevel - mBatteryLevel >= dischargeThreshold) {
// If the discharge cycle is bad enough we want to know about it.
- logBatteryStats();
+ logBatteryStatsLocked();
}
- if (LOCAL_LOGV) Slog.v(TAG, "duration threshold: " + durationThreshold +
+ if (DEBUG) Slog.v(TAG, "duration threshold: " + durationThreshold +
" discharge threshold: " + dischargeThreshold);
- if (LOCAL_LOGV) Slog.v(TAG, "duration: " + duration + " discharge: " +
+ if (DEBUG) Slog.v(TAG, "duration: " + duration + " discharge: " +
(mDischargeStartLevel - mBatteryLevel));
} catch (NumberFormatException e) {
Slog.e(TAG, "Invalid DischargeThresholds GService string: " +
@@ -489,14 +511,15 @@
}
}
- private final int getIcon(int level) {
+ private int getIconLocked(int level) {
if (mBatteryStatus == BatteryManager.BATTERY_STATUS_CHARGING) {
return com.android.internal.R.drawable.stat_sys_battery_charge;
} else if (mBatteryStatus == BatteryManager.BATTERY_STATUS_DISCHARGING) {
return com.android.internal.R.drawable.stat_sys_battery;
} else if (mBatteryStatus == BatteryManager.BATTERY_STATUS_NOT_CHARGING
|| mBatteryStatus == BatteryManager.BATTERY_STATUS_FULL) {
- if (isPowered() && mBatteryLevel >= 100) {
+ if (isPoweredLocked(BatteryManager.BATTERY_PLUGGED_ANY)
+ && mBatteryLevel >= 100) {
return com.android.internal.R.drawable.stat_sys_battery_charge;
} else {
return com.android.internal.R.drawable.stat_sys_battery;
@@ -517,8 +540,8 @@
return;
}
- if (args == null || args.length == 0 || "-a".equals(args[0])) {
- synchronized (this) {
+ synchronized (mLock) {
+ if (args == null || args.length == 0 || "-a".equals(args[0])) {
pw.println("Current Battery Service state:");
pw.println(" AC powered: " + mAcOnline);
pw.println(" USB powered: " + mUsbOnline);
@@ -531,73 +554,89 @@
pw.println(" voltage:" + mBatteryVoltage);
pw.println(" temperature: " + mBatteryTemperature);
pw.println(" technology: " + mBatteryTechnology);
- }
- } else if (false) {
- // DO NOT SUBMIT WITH THIS TURNED ON
- if (args.length == 3 && "set".equals(args[0])) {
- String key = args[1];
- String value = args[2];
- try {
- boolean update = true;
- if ("ac".equals(key)) {
- mAcOnline = Integer.parseInt(value) != 0;
- } else if ("usb".equals(key)) {
- mUsbOnline = Integer.parseInt(value) != 0;
- } else if ("wireless".equals(key)) {
- mWirelessOnline = Integer.parseInt(value) != 0;
- } else if ("status".equals(key)) {
- mBatteryStatus = Integer.parseInt(value);
- } else if ("level".equals(key)) {
- mBatteryLevel = Integer.parseInt(value);
- } else if ("invalid".equals(key)) {
- mInvalidCharger = Integer.parseInt(value);
- } else {
- update = false;
+ } else if (false) {
+ // DO NOT SUBMIT WITH THIS TURNED ON
+ if (args.length == 3 && "set".equals(args[0])) {
+ String key = args[1];
+ String value = args[2];
+ try {
+ boolean update = true;
+ if ("ac".equals(key)) {
+ mAcOnline = Integer.parseInt(value) != 0;
+ } else if ("usb".equals(key)) {
+ mUsbOnline = Integer.parseInt(value) != 0;
+ } else if ("wireless".equals(key)) {
+ mWirelessOnline = Integer.parseInt(value) != 0;
+ } else if ("status".equals(key)) {
+ mBatteryStatus = Integer.parseInt(value);
+ } else if ("level".equals(key)) {
+ mBatteryLevel = Integer.parseInt(value);
+ } else if ("invalid".equals(key)) {
+ mInvalidCharger = Integer.parseInt(value);
+ } else {
+ update = false;
+ }
+ if (update) {
+ processValuesLocked();
+ }
+ } catch (NumberFormatException ex) {
+ pw.println("Bad value: " + value);
}
- if (update) {
- processValues();
- }
- } catch (NumberFormatException ex) {
- pw.println("Bad value: " + value);
}
}
}
}
- class Led {
- private LightsService mLightsService;
- private LightsService.Light mBatteryLight;
+ private final UEventObserver mPowerSupplyObserver = new UEventObserver() {
+ @Override
+ public void onUEvent(UEventObserver.UEvent event) {
+ synchronized (mLock) {
+ updateLocked();
+ }
+ }
+ };
- private int mBatteryLowARGB;
- private int mBatteryMediumARGB;
- private int mBatteryFullARGB;
- private int mBatteryLedOn;
- private int mBatteryLedOff;
+ private final UEventObserver mInvalidChargerObserver = new UEventObserver() {
+ @Override
+ public void onUEvent(UEventObserver.UEvent event) {
+ final int invalidCharger = "1".equals(event.get("SWITCH_STATE")) ? 1 : 0;
+ synchronized (mLock) {
+ if (mInvalidCharger != invalidCharger) {
+ mInvalidCharger = invalidCharger;
+ updateLocked();
+ }
+ }
+ }
+ };
- private boolean mBatteryCharging;
- private boolean mBatteryLow;
- private boolean mBatteryFull;
+ private final class Led {
+ private final LightsService.Light mBatteryLight;
- Led(Context context, LightsService lights) {
- mLightsService = lights;
+ private final int mBatteryLowARGB;
+ private final int mBatteryMediumARGB;
+ private final int mBatteryFullARGB;
+ private final int mBatteryLedOn;
+ private final int mBatteryLedOff;
+
+ public Led(Context context, LightsService lights) {
mBatteryLight = lights.getLight(LightsService.LIGHT_ID_BATTERY);
- mBatteryLowARGB = mContext.getResources().getInteger(
+ mBatteryLowARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLowARGB);
- mBatteryMediumARGB = mContext.getResources().getInteger(
+ mBatteryMediumARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryMediumARGB);
- mBatteryFullARGB = mContext.getResources().getInteger(
+ mBatteryFullARGB = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryFullARGB);
- mBatteryLedOn = mContext.getResources().getInteger(
+ mBatteryLedOn = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLedOn);
- mBatteryLedOff = mContext.getResources().getInteger(
+ mBatteryLedOff = context.getResources().getInteger(
com.android.internal.R.integer.config_notificationsBatteryLedOff);
}
/**
* Synchronize on BatteryService.
*/
- void updateLightsLocked() {
+ public void updateLightsLocked() {
final int level = mBatteryLevel;
final int status = mBatteryStatus;
if (level < mLowBatteryWarningLevel) {
diff --git a/services/java/com/android/server/DeviceStorageMonitorService.java b/services/java/com/android/server/DeviceStorageMonitorService.java
index a4c376d..94a087a 100644
--- a/services/java/com/android/server/DeviceStorageMonitorService.java
+++ b/services/java/com/android/server/DeviceStorageMonitorService.java
@@ -405,7 +405,7 @@
notification.setLatestEventInfo(mContext, title, details, intent);
mNotificationMgr.notifyAsUser(null, LOW_MEMORY_NOTIFICATION_ID, notification,
UserHandle.ALL);
- mContext.sendStickyBroadcast(mStorageLowIntent);
+ mContext.sendStickyBroadcastAsUser(mStorageLowIntent, UserHandle.ALL);
}
/**
@@ -428,7 +428,7 @@
*/
private final void sendFullNotification() {
if(localLOGV) Slog.i(TAG, "Sending memory full notification");
- mContext.sendStickyBroadcast(mStorageFullIntent);
+ mContext.sendStickyBroadcastAsUser(mStorageFullIntent, UserHandle.ALL);
}
/**
diff --git a/services/java/com/android/server/LocationManagerService.java b/services/java/com/android/server/LocationManagerService.java
index 2197e31..ae95c4c 100644
--- a/services/java/com/android/server/LocationManagerService.java
+++ b/services/java/com/android/server/LocationManagerService.java
@@ -645,12 +645,11 @@
/**
* Returns all providers by name, including passive, but excluding
- * fused.
+ * fused, also including ones that are not permitted to
+ * be accessed by the calling activity or are currently disabled.
*/
@Override
public List<String> getAllProviders() {
- checkPermission();
-
ArrayList<String> out;
synchronized (mLock) {
out = new ArrayList<String>(mProviders.size());
diff --git a/services/java/com/android/server/Watchdog.java b/services/java/com/android/server/Watchdog.java
index 9dbe503..1342250 100644
--- a/services/java/com/android/server/Watchdog.java
+++ b/services/java/com/android/server/Watchdog.java
@@ -26,6 +26,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.os.BatteryManager;
import android.os.Debug;
import android.os.Handler;
import android.os.Message;
@@ -329,7 +330,7 @@
* text of why it is not a good time.
*/
String shouldWeBeBrutalLocked(long curTime) {
- if (mBattery == null || !mBattery.isPowered()) {
+ if (mBattery == null || !mBattery.isPowered(BatteryManager.BATTERY_PLUGGED_ANY)) {
return "battery";
}
diff --git a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
index f1a03de..eb414fa 100644
--- a/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
+++ b/services/java/com/android/server/accessibility/AccessibilityInputFilter.java
@@ -119,13 +119,16 @@
mCurrentDeviceId = deviceId;
}
mPm.userActivity(event.getEventTime(), false);
- MotionEvent motionEvent = (MotionEvent) event;
- mEventHandler.onMotionEvent(motionEvent, policyFlags);
+ MotionEvent rawEvent = (MotionEvent) event;
+ MotionEvent transformedEvent = MotionEvent.obtain(rawEvent);
+ mEventHandler.onMotionEvent(transformedEvent, rawEvent, policyFlags);
+ transformedEvent.recycle();
}
@Override
- public void onMotionEvent(MotionEvent event, int policyFlags) {
- sendInputEvent(event, policyFlags);
+ public void onMotionEvent(MotionEvent transformedEvent, MotionEvent rawEvent,
+ int policyFlags) {
+ sendInputEvent(transformedEvent, policyFlags);
}
@Override
diff --git a/services/java/com/android/server/accessibility/EventStreamTransformation.java b/services/java/com/android/server/accessibility/EventStreamTransformation.java
index b715570..3289a15 100644
--- a/services/java/com/android/server/accessibility/EventStreamTransformation.java
+++ b/services/java/com/android/server/accessibility/EventStreamTransformation.java
@@ -57,12 +57,15 @@
interface EventStreamTransformation {
/**
- * Receives a motion event.
+ * Receives motion event. Passed are the event transformed by previous
+ * transformations and the raw event to which no transformations have
+ * been applied.
*
- * @param event The motion event.
+ * @param event The transformed motion event.
+ * @param rawEvent The raw motion event.
* @param policyFlags Policy flags for the event.
*/
- public void onMotionEvent(MotionEvent event, int policyFlags);
+ public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags);
/**
* Receives an accessibility event.
diff --git a/services/java/com/android/server/accessibility/ScreenMagnifier.java b/services/java/com/android/server/accessibility/ScreenMagnifier.java
index b7327080..14762a1 100644
--- a/services/java/com/android/server/accessibility/ScreenMagnifier.java
+++ b/services/java/com/android/server/accessibility/ScreenMagnifier.java
@@ -183,8 +183,8 @@
com.android.internal.R.integer.config_longAnimTime);
mTapDistanceSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mMultiTapDistanceSlop = ViewConfiguration.get(context).getScaledDoubleTapSlop();
- mWindowAnimationScale = Settings.System.getFloat(context.getContentResolver(),
- Settings.System.WINDOW_ANIMATION_SCALE, DEFAULT_WINDOW_ANIMATION_SCALE);
+ mWindowAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.WINDOW_ANIMATION_SCALE, DEFAULT_WINDOW_ANIMATION_SCALE);
mMagnificationController = new MagnificationController(mShortAnimationDuration);
mDisplayProvider = new DisplayProvider(context, mWindowManager);
@@ -203,14 +203,15 @@
}
@Override
- public void onMotionEvent(MotionEvent event, int policyFlags) {
+ public void onMotionEvent(MotionEvent event, MotionEvent rawEvent,
+ int policyFlags) {
mMagnifiedContentInteractonStateHandler.onMotionEvent(event);
switch (mCurrentState) {
case STATE_DELEGATING: {
- handleMotionEventStateDelegating(event, policyFlags);
+ handleMotionEventStateDelegating(event, rawEvent, policyFlags);
} break;
case STATE_DETECTING: {
- mDetectingStateHandler.onMotionEvent(event, policyFlags);
+ mDetectingStateHandler.onMotionEvent(event, rawEvent, policyFlags);
} break;
case STATE_VIEWPORT_DRAGGING: {
mStateViewportDraggingHandler.onMotionEvent(event, policyFlags);
@@ -259,7 +260,8 @@
mScreenStateObserver.destroy();
}
- private void handleMotionEventStateDelegating(MotionEvent event, int policyFlags) {
+ private void handleMotionEventStateDelegating(MotionEvent event,
+ MotionEvent rawEvent, int policyFlags) {
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
if (mDetectingStateHandler.mDelayedEventQueue == null) {
transitionToState(STATE_DETECTING);
@@ -290,7 +292,7 @@
coords, 0, 0, 1.0f, 1.0f, event.getDeviceId(), 0, event.getSource(),
event.getFlags());
}
- mNext.onMotionEvent(event, policyFlags);
+ mNext.onMotionEvent(event, rawEvent, policyFlags);
}
}
@@ -533,8 +535,8 @@
}
};
- public void onMotionEvent(MotionEvent event, int policyFlags) {
- cacheDelayedMotionEvent(event, policyFlags);
+ public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
+ cacheDelayedMotionEvent(event, rawEvent, policyFlags);
final int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN: {
@@ -640,8 +642,10 @@
}
}
- private void cacheDelayedMotionEvent(MotionEvent event, int policyFlags) {
- MotionEventInfo info = MotionEventInfo.obtain(event, policyFlags);
+ private void cacheDelayedMotionEvent(MotionEvent event, MotionEvent rawEvent,
+ int policyFlags) {
+ MotionEventInfo info = MotionEventInfo.obtain(event, rawEvent,
+ policyFlags);
if (mDelayedEventQueue == null) {
mDelayedEventQueue = info;
} else {
@@ -657,7 +661,8 @@
while (mDelayedEventQueue != null) {
MotionEventInfo info = mDelayedEventQueue;
mDelayedEventQueue = info.mNext;
- ScreenMagnifier.this.onMotionEvent(info.mEvent, info.mPolicyFlags);
+ ScreenMagnifier.this.onMotionEvent(info.mEvent, info.mRawEvent,
+ info.mPolicyFlags);
info.recycle();
}
}
@@ -738,9 +743,11 @@
private boolean mInPool;
public MotionEvent mEvent;
+ public MotionEvent mRawEvent;
public int mPolicyFlags;
- public static MotionEventInfo obtain(MotionEvent event, int policyFlags) {
+ public static MotionEventInfo obtain(MotionEvent event, MotionEvent rawEvent,
+ int policyFlags) {
synchronized (sLock) {
MotionEventInfo info;
if (sPoolSize > 0) {
@@ -752,13 +759,15 @@
} else {
info = new MotionEventInfo();
}
- info.initialize(event, policyFlags);
+ info.initialize(event, rawEvent, policyFlags);
return info;
}
}
- private void initialize(MotionEvent event, int policyFlags) {
+ private void initialize(MotionEvent event, MotionEvent rawEvent,
+ int policyFlags) {
mEvent = MotionEvent.obtain(event);
+ mRawEvent = MotionEvent.obtain(rawEvent);
mPolicyFlags = policyFlags;
}
@@ -780,6 +789,8 @@
private void clear() {
mEvent.recycle();
mEvent = null;
+ mRawEvent.recycle();
+ mRawEvent = null;
mPolicyFlags = 0;
}
}
diff --git a/services/java/com/android/server/accessibility/TouchExplorer.java b/services/java/com/android/server/accessibility/TouchExplorer.java
index 6e57d1f..c9f89b1 100644
--- a/services/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/java/com/android/server/accessibility/TouchExplorer.java
@@ -162,7 +162,7 @@
private EventStreamTransformation mNext;
// Helper to track gesture velocity.
- private VelocityTracker mVelocityTracker;
+ private final VelocityTracker mVelocityTracker = VelocityTracker.obtain();
// Helper class to track received pointers.
private final ReceivedPointerTracker mReceivedPointerTracker;
@@ -198,7 +198,7 @@
private GestureLibrary mGestureLibrary;
// The long pressing pointer id if coordinate remapping is needed.
- private int mLongPressingPointerId;
+ private int mLongPressingPointerId = -1;
// The long pressing pointer X if coordinate remapping is needed.
private int mLongPressingPointerDeltaX;
@@ -309,18 +309,18 @@
}
@Override
- public void onMotionEvent(MotionEvent event, int policyFlags) {
+ public void onMotionEvent(MotionEvent event, MotionEvent rawEvent, int policyFlags) {
if (DEBUG) {
Slog.d(LOG_TAG, "Received event: " + event + ", policyFlags=0x"
+ Integer.toHexString(policyFlags));
Slog.d(LOG_TAG, getStateSymbolicName(mCurrentState));
}
- mReceivedPointerTracker.onMotionEvent(event);
+ mReceivedPointerTracker.onMotionEvent(rawEvent);
switch(mCurrentState) {
case STATE_TOUCH_EXPLORING: {
- handleMotionEventStateTouchExploring(event, policyFlags);
+ handleMotionEventStateTouchExploring(event, rawEvent, policyFlags);
} break;
case STATE_DRAGGING: {
handleMotionEventStateDragging(event, policyFlags);
@@ -329,7 +329,7 @@
handleMotionEventStateDelegating(event, policyFlags);
} break;
case STATE_GESTURE_DETECTING: {
- handleMotionEventGestureDetecting(event, policyFlags);
+ handleMotionEventGestureDetecting(rawEvent, policyFlags);
} break;
default:
throw new IllegalStateException("Illegal state: " + mCurrentState);
@@ -382,16 +382,15 @@
* Handles a motion event in touch exploring state.
*
* @param event The event to be handled.
+ * @param rawEvent The raw (unmodified) motion event.
* @param policyFlags The policy flags associated with the event.
*/
- private void handleMotionEventStateTouchExploring(MotionEvent event, int policyFlags) {
+ private void handleMotionEventStateTouchExploring(MotionEvent event, MotionEvent rawEvent,
+ int policyFlags) {
ReceivedPointerTracker receivedTracker = mReceivedPointerTracker;
final int activePointerCount = receivedTracker.getActivePointerCount();
- if (mVelocityTracker == null) {
- mVelocityTracker = VelocityTracker.obtain();
- }
- mVelocityTracker.addMovement(event);
+ mVelocityTracker.addMovement(rawEvent);
mDoubleTapDetector.onMotionEvent(event, policyFlags);
@@ -410,7 +409,7 @@
// have a distance slop before getting into gesture detection
// mode and not using the points within this slop significantly
// decreases the quality of gesture recognition.
- handleMotionEventGestureDetecting(event, policyFlags);
+ handleMotionEventGestureDetecting(rawEvent, policyFlags);
//$FALL-THROUGH$
case MotionEvent.ACTION_POINTER_DOWN: {
switch (activePointerCount) {
@@ -471,12 +470,13 @@
// have a distance slop before getting into gesture detection
// mode and not using the points within this slop significantly
// decreases the quality of gesture recognition.
- handleMotionEventGestureDetecting(event, policyFlags);
-
+ handleMotionEventGestureDetecting(rawEvent, policyFlags);
+ // It is *important* to use the distance traveled by the pointers
+ // on the screen which may or may not be magnified.
final float deltaX = receivedTracker.getReceivedPointerDownX(pointerId)
- - event.getX(pointerIndex);
+ - rawEvent.getX(pointerIndex);
final float deltaY = receivedTracker.getReceivedPointerDownY(pointerId)
- - event.getY(pointerIndex);
+ - rawEvent.getY(pointerIndex);
final double moveDelta = Math.hypot(deltaX, deltaY);
// The user has moved enough for us to decide.
if (moveDelta > mDoubleTapSlop) {
@@ -491,6 +491,7 @@
// We have to perform gesture detection, so
// clear the current state and try to detect.
mCurrentState = STATE_GESTURE_DETECTING;
+ mVelocityTracker.clear();
mSendHoverEnterDelayed.remove();
mSendHoverExitDelayed.remove();
mPerformLongPressDelayed.remove();
@@ -535,10 +536,12 @@
// If the user is touch exploring the second pointer may be
// performing a double tap to activate an item without need
// for the user to lift his exploring finger.
+ // It is *important* to use the distance traveled by the pointers
+ // on the screen which may or may not be magnified.
final float deltaX = receivedTracker.getReceivedPointerDownX(pointerId)
- - event.getX(pointerIndex);
+ - rawEvent.getX(pointerIndex);
final float deltaY = receivedTracker.getReceivedPointerDownY(pointerId)
- - event.getY(pointerIndex);
+ - rawEvent.getY(pointerIndex);
final double moveDelta = Math.hypot(deltaX, deltaY);
if (moveDelta < mDoubleTapSlop) {
break;
@@ -565,6 +568,7 @@
mCurrentState = STATE_DELEGATING;
sendDownForAllActiveNotInjectedPointers(event, policyFlags);
}
+ mVelocityTracker.clear();
} break;
default: {
// More than one pointer so the user is not touch exploring
@@ -585,6 +589,7 @@
// More than two pointers are delegated to the view hierarchy.
mCurrentState = STATE_DELEGATING;
sendDownForAllActiveNotInjectedPointers(event, policyFlags);
+ mVelocityTracker.clear();
}
}
} break;
@@ -615,10 +620,7 @@
}
} break;
}
- if (mVelocityTracker != null) {
- mVelocityTracker.clear();
- mVelocityTracker = null;
- }
+ mVelocityTracker.clear();
} break;
case MotionEvent.ACTION_CANCEL: {
clear(event, policyFlags);
@@ -700,10 +702,24 @@
}
}
} break;
+ case MotionEvent.ACTION_POINTER_UP: {
+ final int pointerId = event.getPointerId(event.getActionIndex());
+ if (pointerId == mDraggingPointerId) {
+ mDraggingPointerId = INVALID_POINTER_ID;
+ // Send an event to the end of the drag gesture.
+ sendMotionEvent(event, MotionEvent.ACTION_UP, pointerIdBits, policyFlags);
+ }
+ } break;
case MotionEvent.ACTION_UP: {
// Announce the end of a new touch interaction.
sendAccessibilityEvent(
AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
+ final int pointerId = event.getPointerId(event.getActionIndex());
+ if (pointerId == mDraggingPointerId) {
+ mDraggingPointerId = INVALID_POINTER_ID;
+ // Send an event to the end of the drag gesture.
+ sendMotionEvent(event, MotionEvent.ACTION_UP, pointerIdBits, policyFlags);
+ }
mCurrentState = STATE_TOUCH_EXPLORING;
} break;
case MotionEvent.ACTION_CANCEL: {
@@ -1046,7 +1062,10 @@
// Make sure that the user will see the event.
policyFlags |= WindowManagerPolicy.FLAG_PASS_TO_USER;
if (mNext != null) {
- mNext.onMotionEvent(event, policyFlags);
+ // TODO: For now pass null for the raw event since the touch
+ // explorer is the last event transformation and it does
+ // not care about the raw event.
+ mNext.onMotionEvent(event, null, policyFlags);
}
mInjectedPointerTracker.onMotionEvent(event);
diff --git a/services/java/com/android/server/display/DisplayDeviceInfo.java b/services/java/com/android/server/display/DisplayDeviceInfo.java
index f0cd0f5..b4dab86 100644
--- a/services/java/com/android/server/display/DisplayDeviceInfo.java
+++ b/services/java/com/android/server/display/DisplayDeviceInfo.java
@@ -38,9 +38,15 @@
public static final int FLAG_SUPPORTS_ROTATION = 1 << 1;
/**
- * Flag: Indicates that this display device can show secure surfaces.
+ * Flag: Indicates that this display device has secure video output, such as HDCP.
*/
- public static final int FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT = 1 << 2;
+ public static final int FLAG_SECURE = 1 << 2;
+
+ /**
+ * Flag: Indicates that this display device supports compositing
+ * from gralloc protected buffers.
+ */
+ public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1 << 3;
/**
* Touch attachment: Display does not receive touch.
@@ -182,8 +188,11 @@
if ((flags & FLAG_SUPPORTS_ROTATION) != 0) {
msg.append(", FLAG_SUPPORTS_ROTATION");
}
- if ((flags & FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
- msg.append(", FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT");
+ if ((flags & FLAG_SECURE) != 0) {
+ msg.append(", FLAG_SECURE");
+ }
+ if ((flags & FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) {
+ msg.append(", FLAG_SUPPORTS_PROTECTED_BUFFERS");
}
return msg.toString();
}
diff --git a/services/java/com/android/server/display/HeadlessDisplayAdapter.java b/services/java/com/android/server/display/HeadlessDisplayAdapter.java
index f3bec1d..7ec537f 100644
--- a/services/java/com/android/server/display/HeadlessDisplayAdapter.java
+++ b/services/java/com/android/server/display/HeadlessDisplayAdapter.java
@@ -60,7 +60,8 @@
mInfo.xDpi = 160;
mInfo.yDpi = 160;
mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
- | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ | DisplayDeviceInfo.FLAG_SECURE
+ | DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS;
mInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
}
return mInfo;
diff --git a/services/java/com/android/server/display/LocalDisplayAdapter.java b/services/java/com/android/server/display/LocalDisplayAdapter.java
index 9c51463..679a67e 100644
--- a/services/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/java/com/android/server/display/LocalDisplayAdapter.java
@@ -124,11 +124,16 @@
mInfo.width = mPhys.width;
mInfo.height = mPhys.height;
mInfo.refreshRate = mPhys.refreshRate;
+
+ // Assume that all built-in displays have secure output (eg. HDCP) and
+ // support compositing from gralloc protected buffers.
+ mInfo.flags = DisplayDeviceInfo.FLAG_SECURE
+ | DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS;
+
if (mBuiltInDisplayId == Surface.BUILT_IN_DISPLAY_ID_MAIN) {
mInfo.name = getContext().getResources().getString(
com.android.internal.R.string.display_manager_built_in_display_name);
- mInfo.flags = DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
- | DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT
+ mInfo.flags |= DisplayDeviceInfo.FLAG_DEFAULT_DISPLAY
| DisplayDeviceInfo.FLAG_SUPPORTS_ROTATION;
mInfo.densityDpi = (int)(mPhys.density * 160 + 0.5f);
mInfo.xDpi = mPhys.xDpi;
@@ -137,7 +142,6 @@
} else {
mInfo.name = getContext().getResources().getString(
com.android.internal.R.string.display_manager_hdmi_display_name);
- mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
mInfo.touch = DisplayDeviceInfo.TOUCH_EXTERNAL;
mInfo.setAssumedDensityForExternalDisplay(mPhys.width, mPhys.height);
}
diff --git a/services/java/com/android/server/display/LogicalDisplay.java b/services/java/com/android/server/display/LogicalDisplay.java
index 3607de15..c4b749c 100644
--- a/services/java/com/android/server/display/LogicalDisplay.java
+++ b/services/java/com/android/server/display/LogicalDisplay.java
@@ -179,8 +179,8 @@
if (!Objects.equal(mPrimaryDisplayDeviceInfo, deviceInfo)) {
mBaseDisplayInfo.layerStack = mLayerStack;
mBaseDisplayInfo.flags = 0;
- if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT) != 0) {
- mBaseDisplayInfo.flags |= Display.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ if ((deviceInfo.flags & DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0) {
+ mBaseDisplayInfo.flags |= Display.FLAG_SUPPORTS_PROTECTED_BUFFERS;
}
mBaseDisplayInfo.name = deviceInfo.name;
mBaseDisplayInfo.appWidth = deviceInfo.width;
@@ -299,7 +299,9 @@
}
public void dumpLocked(PrintWriter pw) {
+ pw.println("mDisplayId=" + mDisplayId);
pw.println("mLayerStack=" + mLayerStack);
+ pw.println("mHasContent=" + mHasContent);
pw.println("mPrimaryDisplayDevice=" + (mPrimaryDisplayDevice != null ?
mPrimaryDisplayDevice.getNameLocked() : "null"));
pw.println("mBaseDisplayInfo=" + mBaseDisplayInfo);
diff --git a/services/java/com/android/server/display/OverlayDisplayAdapter.java b/services/java/com/android/server/display/OverlayDisplayAdapter.java
index 0767fc0..dfacf2a 100644
--- a/services/java/com/android/server/display/OverlayDisplayAdapter.java
+++ b/services/java/com/android/server/display/OverlayDisplayAdapter.java
@@ -19,14 +19,11 @@
import com.android.internal.util.DumpUtils;
import com.android.internal.util.IndentingPrintWriter;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.database.ContentObserver;
+import android.graphics.SurfaceTexture;
import android.os.Handler;
import android.os.IBinder;
-import android.os.UserHandle;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Slog;
@@ -192,28 +189,42 @@
private final int mDensityDpi;
private Surface mSurface;
+ private SurfaceTexture mSurfaceTexture;
private DisplayDeviceInfo mInfo;
public OverlayDisplayDevice(IBinder displayToken, String name,
int width, int height, float refreshRate, int densityDpi,
- Surface surface) {
+ SurfaceTexture surfaceTexture) {
super(OverlayDisplayAdapter.this, displayToken);
mName = name;
mWidth = width;
mHeight = height;
mRefreshRate = refreshRate;
mDensityDpi = densityDpi;
- mSurface = surface;
+ mSurfaceTexture = surfaceTexture;
}
- public void clearSurfaceLocked() {
- mSurface = null;
+ public void clearSurfaceTextureLocked() {
+ if (mSurfaceTexture != null) {
+ mSurfaceTexture = null;
+ }
sendTraversalRequestLocked();
}
@Override
public void performTraversalInTransactionLocked() {
- setSurfaceInTransactionLocked(mSurface);
+ if (mSurfaceTexture != null) {
+ if (mSurface == null) {
+ mSurface = new Surface(mSurfaceTexture);
+ }
+ setSurfaceInTransactionLocked(mSurface);
+ } else {
+ setSurfaceInTransactionLocked(null);
+ if (mSurface != null) {
+ mSurface.destroy();
+ mSurface = null;
+ }
+ }
}
@Override
@@ -227,7 +238,7 @@
mInfo.densityDpi = mDensityDpi;
mInfo.xDpi = mDensityDpi;
mInfo.yDpi = mDensityDpi;
- mInfo.flags = DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ mInfo.flags = 0;
mInfo.touch = DisplayDeviceInfo.TOUCH_NONE;
}
return mInfo;
@@ -268,11 +279,11 @@
// Called on the UI thread.
@Override
- public void onWindowCreated(Surface surface, float refreshRate) {
+ public void onWindowCreated(SurfaceTexture surfaceTexture, float refreshRate) {
synchronized (getSyncRoot()) {
IBinder displayToken = Surface.createDisplay(mName);
mDevice = new OverlayDisplayDevice(displayToken, mName,
- mWidth, mHeight, refreshRate, mDensityDpi, surface);
+ mWidth, mHeight, refreshRate, mDensityDpi, surfaceTexture);
sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_ADDED);
}
@@ -283,7 +294,7 @@
public void onWindowDestroyed() {
synchronized (getSyncRoot()) {
if (mDevice != null) {
- mDevice.clearSurfaceLocked();
+ mDevice.clearSurfaceTextureLocked();
sendDisplayDeviceEventLocked(mDevice, DISPLAY_DEVICE_EVENT_REMOVED);
}
}
diff --git a/services/java/com/android/server/display/OverlayDisplayWindow.java b/services/java/com/android/server/display/OverlayDisplayWindow.java
index d08f65f..a0edced 100644
--- a/services/java/com/android/server/display/OverlayDisplayWindow.java
+++ b/services/java/com/android/server/display/OverlayDisplayWindow.java
@@ -29,7 +29,6 @@
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
-import android.view.Surface;
import android.view.TextureView;
import android.view.View;
import android.view.WindowManager;
@@ -146,6 +145,7 @@
}
}
+ @Override
public void dump(PrintWriter pw) {
pw.println("mWindowVisible=" + mWindowVisible);
pw.println("mWindowX=" + mWindowX);
@@ -291,8 +291,7 @@
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture,
int width, int height) {
- mListener.onWindowCreated(new Surface(surfaceTexture),
- mDefaultDisplayInfo.refreshRate);
+ mListener.onWindowCreated(surfaceTexture, mDefaultDisplayInfo.refreshRate);
}
@Override
@@ -361,7 +360,7 @@
* Watches for significant changes in the overlay display window lifecycle.
*/
public interface Listener {
- public void onWindowCreated(Surface surface, float refreshRate);
+ public void onWindowCreated(SurfaceTexture surfaceTexture, float refreshRate);
public void onWindowDestroyed();
}
}
\ No newline at end of file
diff --git a/services/java/com/android/server/display/WifiDisplayAdapter.java b/services/java/com/android/server/display/WifiDisplayAdapter.java
index 4a89be7..b2beb5e 100644
--- a/services/java/com/android/server/display/WifiDisplayAdapter.java
+++ b/services/java/com/android/server/display/WifiDisplayAdapter.java
@@ -50,7 +50,8 @@
final class WifiDisplayAdapter extends DisplayAdapter {
private static final String TAG = "WifiDisplayAdapter";
- private PersistentDataStore mPersistentDataStore;
+ private final PersistentDataStore mPersistentDataStore;
+ private final boolean mSupportsProtectedBuffers;
private WifiDisplayController mDisplayController;
private WifiDisplayDevice mDisplayDevice;
@@ -70,6 +71,8 @@
PersistentDataStore persistentDataStore) {
super(syncRoot, context, handler, listener, TAG);
mPersistentDataStore = persistentDataStore;
+ mSupportsProtectedBuffers = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_wifiDisplaySupportsProtectedBuffers);
}
@Override
@@ -84,6 +87,7 @@
pw.println("mAvailableDisplays=" + Arrays.toString(mAvailableDisplays));
pw.println("mRememberedDisplays=" + Arrays.toString(mRememberedDisplays));
pw.println("mPendingStatusChangeBroadcast=" + mPendingStatusChangeBroadcast);
+ pw.println("mSupportsProtectedBuffers=" + mSupportsProtectedBuffers);
// Try to dump the controller state.
if (mDisplayController == null) {
@@ -217,7 +221,10 @@
int deviceFlags = 0;
if ((flags & RemoteDisplay.DISPLAY_FLAG_SECURE) != 0) {
- deviceFlags |= DisplayDeviceInfo.FLAG_SUPPORTS_SECURE_VIDEO_OUTPUT;
+ deviceFlags |= DisplayDeviceInfo.FLAG_SECURE;
+ }
+ if (mSupportsProtectedBuffers) {
+ deviceFlags |= DisplayDeviceInfo.FLAG_SUPPORTS_PROTECTED_BUFFERS;
}
float refreshRate = 60.0f; // TODO: get this for real
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 75bc265..08b9038 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -851,7 +851,8 @@
state.setVerifierResponse(Binder.getCallingUid(),
PackageManager.VERIFICATION_ALLOW_WITHOUT_SUFFICIENT);
broadcastPackageVerified(verificationId, args.packageURI,
- PackageManager.VERIFICATION_ALLOW);
+ PackageManager.VERIFICATION_ALLOW,
+ state.getInstallArgs().getUser());
try {
ret = args.copyApk(mContainerService, true);
} catch (RemoteException e) {
@@ -859,7 +860,8 @@
}
} else {
broadcastPackageVerified(verificationId, args.packageURI,
- PackageManager.VERIFICATION_REJECT);
+ PackageManager.VERIFICATION_REJECT,
+ state.getInstallArgs().getUser());
}
processPendingInstall(args, ret);
@@ -889,7 +891,7 @@
if (state.isInstallAllowed()) {
ret = PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
broadcastPackageVerified(verificationId, args.packageURI,
- response.code);
+ response.code, state.getInstallArgs().getUser());
try {
ret = args.copyApk(mContainerService, true);
} catch (RemoteException e) {
@@ -5741,14 +5743,15 @@
}
private void broadcastPackageVerified(int verificationId, Uri packageUri,
- int verificationCode) {
+ int verificationCode, UserHandle user) {
final Intent intent = new Intent(Intent.ACTION_PACKAGE_VERIFIED);
intent.setDataAndType(packageUri, PACKAGE_MIME_TYPE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(PackageManager.EXTRA_VERIFICATION_ID, verificationId);
intent.putExtra(PackageManager.EXTRA_VERIFICATION_RESULT, verificationCode);
- mContext.sendBroadcast(intent, android.Manifest.permission.PACKAGE_VERIFICATION_AGENT);
+ mContext.sendBroadcastAsUser(intent, user,
+ android.Manifest.permission.PACKAGE_VERIFICATION_AGENT);
}
private ComponentName matchComponentForVerifier(String packageName,
@@ -6477,7 +6480,7 @@
final Intent sufficientIntent = new Intent(verification);
sufficientIntent.setComponent(verifierComponent);
- mContext.sendBroadcast(sufficientIntent);
+ mContext.sendBroadcastAsUser(sufficientIntent, getUser());
}
}
}
@@ -6492,7 +6495,7 @@
* target BroadcastReceivers have run.
*/
verification.setComponent(requiredVerifierComponent);
- mContext.sendOrderedBroadcast(verification,
+ mContext.sendOrderedBroadcastAsUser(verification, getUser(),
android.Manifest.permission.PACKAGE_VERIFICATION_AGENT,
new BroadcastReceiver() {
@Override
@@ -6779,6 +6782,10 @@
protected boolean isFwdLocked() {
return (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;
}
+
+ UserHandle getUser() {
+ return user;
+ }
}
class FileInstallArgs extends InstallArgs {
@@ -9027,9 +9034,9 @@
mSystemReady = true;
// Read the compatibilty setting when the system is ready.
- boolean compatibilityModeEnabled = android.provider.Settings.System.getInt(
+ boolean compatibilityModeEnabled = android.provider.Settings.Global.getInt(
mContext.getContentResolver(),
- android.provider.Settings.System.COMPATIBILITY_MODE, 1) == 1;
+ android.provider.Settings.Global.COMPATIBILITY_MODE, 1) == 1;
PackageParser.setCompatibilityModeEnabled(compatibilityModeEnabled);
if (DEBUG_SETTINGS) {
Log.d(TAG, "compatibility mode:" + compatibilityModeEnabled);
diff --git a/services/java/com/android/server/pm/PackageSettingBase.java b/services/java/com/android/server/pm/PackageSettingBase.java
index 6a363a8..ae1b213 100644
--- a/services/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/java/com/android/server/pm/PackageSettingBase.java
@@ -65,8 +65,7 @@
boolean permissionsFixed;
boolean haveGids;
- private static final PackageUserState DEFAULT_USER_STATE = new PackageUserState(false);
- private static final PackageUserState DEFAULT_SYSTEM_USER_STATE = new PackageUserState(true);
+ private static final PackageUserState DEFAULT_USER_STATE = new PackageUserState();
// Whether this package is currently stopped, thus can not be
// started until explicitly launched by the user.
@@ -176,7 +175,7 @@
private PackageUserState modifyUserState(int userId) {
PackageUserState state = userState.get(userId);
if (state == null) {
- state = new PackageUserState((pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0);
+ state = new PackageUserState();
userState.put(userId, state);
}
return state;
@@ -187,8 +186,7 @@
if (state != null) {
return state;
}
- return ((pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0)
- ? DEFAULT_SYSTEM_USER_STATE : DEFAULT_USER_STATE;
+ return DEFAULT_USER_STATE;
}
void setEnabled(int state, int userId) {
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java
index 664125a..d1c24eb 100644
--- a/services/java/com/android/server/power/PowerManagerService.java
+++ b/services/java/com/android/server/power/PowerManagerService.java
@@ -130,11 +130,22 @@
private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;
private static final int MINIMUM_SCREEN_OFF_TIMEOUT = 10 * 1000;
- // The screen dim duration, in seconds.
+ // The screen dim duration, in milliseconds.
// This is subtracted from the end of the screen off timeout so the
// minimum screen off timeout should be longer than this.
private static final int SCREEN_DIM_DURATION = 7 * 1000;
+ // The maximum screen dim time expressed as a ratio relative to the screen
+ // off timeout. If the screen off timeout is very short then we want the
+ // dim timeout to also be quite short so that most of the time is spent on.
+ // Otherwise the user won't get much screen on time before dimming occurs.
+ private static final float MAXIMUM_SCREEN_DIM_RATIO = 0.2f;
+
+ // Upper bound on the battery charge percentage in order to consider turning
+ // the screen on when the device starts charging wirelessly.
+ // See point of use for more details.
+ private static final int WIRELESS_CHARGER_TURN_ON_BATTERY_LEVEL_LIMIT = 95;
+
private Context mContext;
private LightsService mLightsService;
private BatteryService mBatteryService;
@@ -218,6 +229,9 @@
// True if the device is plugged into a power source.
private boolean mIsPowered;
+ // The current plug type, such as BatteryManager.BATTERY_PLUGGED_WIRELESS.
+ private int mPlugType;
+
// True if the device should wake up when plugged or unplugged.
private boolean mWakeUpWhenPluggedOrUnpluggedConfig;
@@ -1013,10 +1027,19 @@
*/
private void updateIsPoweredLocked(int dirty) {
if ((dirty & DIRTY_BATTERY_STATE) != 0) {
- boolean wasPowered = mIsPowered;
- mIsPowered = mBatteryService.isPowered();
+ final boolean wasPowered = mIsPowered;
+ final int oldPlugType = mPlugType;
+ mIsPowered = mBatteryService.isPowered(BatteryManager.BATTERY_PLUGGED_ANY);
+ mPlugType = mBatteryService.getPlugType();
- if (wasPowered != mIsPowered) {
+ if (DEBUG) {
+ Slog.d(TAG, "updateIsPoweredLocked: wasPowered=" + wasPowered
+ + ", mIsPowered=" + mIsPowered
+ + ", oldPlugType=" + oldPlugType
+ + ", mPlugType=" + mPlugType);
+ }
+
+ if (wasPowered != mIsPowered || oldPlugType != mPlugType) {
mDirty |= DIRTY_IS_POWERED;
// Treat plugging and unplugging the devices as a user activity.
@@ -1025,7 +1048,7 @@
// Some devices also wake the device when plugged or unplugged because
// they don't have a charging LED.
final long now = SystemClock.uptimeMillis();
- if (mWakeUpWhenPluggedOrUnpluggedConfig) {
+ if (shouldWakeUpWhenPluggedOrUnpluggedLocked(wasPowered, oldPlugType)) {
wakeUpNoUpdateLocked(now);
}
userActivityNoUpdateLocked(
@@ -1034,6 +1057,44 @@
}
}
+ private boolean shouldWakeUpWhenPluggedOrUnpluggedLocked(boolean wasPowered, int oldPlugType) {
+ if (mWakeUpWhenPluggedOrUnpluggedConfig) {
+ // FIXME: Need more accurate detection of wireless chargers.
+ //
+ // We are unable to accurately detect whether the device is resting on the
+ // charger unless it is actually receiving power. This causes us some grief
+ // because the device might not appear to be plugged into the wireless charger
+ // unless it actually charging.
+ //
+ // To avoid spuriously waking the screen, we apply a special policy to
+ // wireless chargers.
+ //
+ // 1. Don't wake the device when unplugged from wireless charger because
+ // it might be that the device is still resting on the wireless charger
+ // but is not receiving power anymore because the battery is full.
+ //
+ // 2. Don't wake the device when plugged into a wireless charger if the
+ // battery already appears to be mostly full. This situation may indicate
+ // that the device was resting on the charger the whole time and simply
+ // wasn't receiving power because the battery was full. We can't tell
+ // whether the device was just placed on the charger or whether it has
+ // been there for half of the night slowly discharging until it hit
+ // the point where it needed to start charging again.
+ if (wasPowered && !mIsPowered
+ && oldPlugType == BatteryManager.BATTERY_PLUGGED_WIRELESS) {
+ return false;
+ }
+ if (!wasPowered && mIsPowered
+ && mPlugType == BatteryManager.BATTERY_PLUGGED_WIRELESS
+ && mBatteryService.getBatteryLevel() >=
+ WIRELESS_CHARGER_TURN_ON_BATTERY_LEVEL_LIMIT) {
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
/**
* Updates the value of mStayOn.
* Sets DIRTY_STAY_ON if a change occurred.
@@ -1113,7 +1174,7 @@
long nextTimeout = 0;
if (mWakefulness != WAKEFULNESS_ASLEEP) {
final int screenOffTimeout = getScreenOffTimeoutLocked();
- final int screenDimDuration = getScreenDimDurationLocked();
+ final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
mUserActivitySummary = 0;
if (mLastUserActivityTime >= mLastWakeTime) {
@@ -1187,8 +1248,9 @@
return Math.max(timeout, MINIMUM_SCREEN_OFF_TIMEOUT);
}
- private int getScreenDimDurationLocked() {
- return SCREEN_DIM_DURATION;
+ private int getScreenDimDurationLocked(int screenOffTimeout) {
+ return Math.min(SCREEN_DIM_DURATION,
+ (int)(screenOffTimeout * MAXIMUM_SCREEN_DIM_RATIO));
}
/**
@@ -1886,6 +1948,7 @@
pw.println(" mDirty=0x" + Integer.toHexString(mDirty));
pw.println(" mWakefulness=" + wakefulnessToString(mWakefulness));
pw.println(" mIsPowered=" + mIsPowered);
+ pw.println(" mPlugType=" + mPlugType);
pw.println(" mStayOn=" + mStayOn);
pw.println(" mBootCompleted=" + mBootCompleted);
pw.println(" mSystemReady=" + mSystemReady);
@@ -1931,6 +1994,12 @@
pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum);
pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault);
+ final int screenOffTimeout = getScreenOffTimeoutLocked();
+ final int screenDimDuration = getScreenDimDurationLocked(screenOffTimeout);
+ pw.println();
+ pw.println("Screen off timeout: " + screenOffTimeout + " ms");
+ pw.println("Screen dim duration: " + screenDimDuration + " ms");
+
pw.println();
pw.println("Wake Locks: size=" + mWakeLocks.size());
for (WakeLock wl : mWakeLocks) {
diff --git a/services/java/com/android/server/usb/UsbDeviceManager.java b/services/java/com/android/server/usb/UsbDeviceManager.java
index 10011aa..95797ef 100644
--- a/services/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/java/com/android/server/usb/UsbDeviceManager.java
@@ -16,9 +16,9 @@
package com.android.server.usb;
-import android.app.PendingIntent;
import android.app.Notification;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -30,23 +30,19 @@
import android.database.ContentObserver;
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbManager;
-import android.net.Uri;
-import android.os.Binder;
-import android.os.Bundle;
import android.os.FileUtils;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
-import android.os.Parcelable;
import android.os.ParcelFileDescriptor;
import android.os.Process;
-import android.os.UserHandle;
-import android.os.storage.StorageManager;
-import android.os.storage.StorageVolume;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UEventObserver;
+import android.os.UserHandle;
+import android.os.storage.StorageManager;
+import android.os.storage.StorageVolume;
import android.provider.Settings;
import android.util.Pair;
import android.util.Slog;
@@ -56,10 +52,9 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
-import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
@@ -106,9 +101,12 @@
private UsbHandler mHandler;
private boolean mBootCompleted;
+ private final Object mLock = new Object();
+
private final Context mContext;
private final ContentResolver mContentResolver;
- private final UsbSettingsManager mSettingsManager;
+ // @GuardedBy("mLock")
+ private UsbSettingsManager mCurrentSettings;
private NotificationManager mNotificationManager;
private final boolean mHasUsbAccessory;
private boolean mUseUsbNotification;
@@ -149,10 +147,9 @@
}
};
- public UsbDeviceManager(Context context, UsbSettingsManager settingsManager) {
+ public UsbDeviceManager(Context context) {
mContext = context;
mContentResolver = context.getContentResolver();
- mSettingsManager = settingsManager;
PackageManager pm = mContext.getPackageManager();
mHasUsbAccessory = pm.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
initRndisAddress();
@@ -175,6 +172,18 @@
}
}
+ public void setCurrentSettings(UsbSettingsManager settings) {
+ synchronized (mLock) {
+ mCurrentSettings = settings;
+ }
+ }
+
+ private UsbSettingsManager getCurrentSettings() {
+ synchronized (mLock) {
+ return mCurrentSettings;
+ }
+ }
+
public void systemReady() {
if (DEBUG) Slog.d(TAG, "systemReady");
@@ -516,7 +525,7 @@
Slog.d(TAG, "entering USB accessory mode: " + mCurrentAccessory);
// defer accessoryAttached if system is not ready
if (mBootCompleted) {
- mSettingsManager.accessoryAttached(mCurrentAccessory);
+ getCurrentSettings().accessoryAttached(mCurrentAccessory);
} // else handle in mBootCompletedReceiver
} else {
Slog.e(TAG, "nativeGetAccessoryStrings failed");
@@ -529,7 +538,7 @@
if (mCurrentAccessory != null) {
if (mBootCompleted) {
- mSettingsManager.accessoryDetached(mCurrentAccessory);
+ getCurrentSettings().accessoryDetached(mCurrentAccessory);
}
mCurrentAccessory = null;
mAccessoryStrings = null;
@@ -618,7 +627,7 @@
case MSG_BOOT_COMPLETED:
mBootCompleted = true;
if (mCurrentAccessory != null) {
- mSettingsManager.accessoryAttached(mCurrentAccessory);
+ getCurrentSettings().accessoryAttached(mCurrentAccessory);
}
if (mDebuggingManager != null) {
mDebuggingManager.setAdbEnabled(mAdbEnabled);
@@ -774,7 +783,7 @@
+ currentAccessory;
throw new IllegalArgumentException(error);
}
- mSettingsManager.checkPermission(accessory);
+ getCurrentSettings().checkPermission(accessory);
return nativeOpenAccessory();
}
diff --git a/services/java/com/android/server/usb/UsbHostManager.java b/services/java/com/android/server/usb/UsbHostManager.java
index 0a0ff59..175ae6f 100644
--- a/services/java/com/android/server/usb/UsbHostManager.java
+++ b/services/java/com/android/server/usb/UsbHostManager.java
@@ -16,35 +16,19 @@
package com.android.server.usb;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.hardware.usb.IUsbManager;
import android.hardware.usb.UsbConstants;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbEndpoint;
import android.hardware.usb.UsbInterface;
-import android.hardware.usb.UsbManager;
-import android.net.Uri;
-import android.os.Binder;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Parcelable;
import android.os.ParcelFileDescriptor;
-import android.os.UEventObserver;
-import android.provider.Settings;
+import android.os.Parcelable;
import android.util.Slog;
-import java.io.File;
import java.io.FileDescriptor;
-import java.io.FileReader;
import java.io.PrintWriter;
import java.util.HashMap;
-import java.util.List;
/**
* UsbHostManager manages USB state in host mode.
@@ -54,22 +38,35 @@
private static final boolean LOG = false;
// contains all connected USB devices
- private final HashMap<String,UsbDevice> mDevices = new HashMap<String,UsbDevice>();
+ private final HashMap<String, UsbDevice> mDevices = new HashMap<String, UsbDevice>();
// USB busses to exclude from USB host support
private final String[] mHostBlacklist;
private final Context mContext;
private final Object mLock = new Object();
- private final UsbSettingsManager mSettingsManager;
- public UsbHostManager(Context context, UsbSettingsManager settingsManager) {
+ // @GuardedBy("mLock")
+ private UsbSettingsManager mCurrentSettings;
+
+ public UsbHostManager(Context context) {
mContext = context;
- mSettingsManager = settingsManager;
mHostBlacklist = context.getResources().getStringArray(
com.android.internal.R.array.config_usbHostBlacklist);
}
+ public void setCurrentSettings(UsbSettingsManager settings) {
+ synchronized (mLock) {
+ mCurrentSettings = settings;
+ }
+ }
+
+ private UsbSettingsManager getCurrentSettings() {
+ synchronized (mLock) {
+ return mCurrentSettings;
+ }
+ }
+
private boolean isBlackListed(String deviceName) {
int count = mHostBlacklist.length;
for (int i = 0; i < count; i++) {
@@ -154,7 +151,7 @@
UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
deviceClass, deviceSubclass, deviceProtocol, interfaces);
mDevices.put(deviceName, device);
- mSettingsManager.deviceAttached(device);
+ getCurrentSettings().deviceAttached(device);
}
}
@@ -163,7 +160,7 @@
synchronized (mLock) {
UsbDevice device = mDevices.remove(deviceName);
if (device != null) {
- mSettingsManager.deviceDetached(device);
+ getCurrentSettings().deviceDetached(device);
}
}
}
@@ -202,7 +199,7 @@
throw new IllegalArgumentException(
"device " + deviceName + " does not exist or is restricted");
}
- mSettingsManager.checkPermission(device);
+ getCurrentSettings().checkPermission(device);
return nativeOpenDevice(deviceName);
}
}
diff --git a/services/java/com/android/server/usb/UsbService.java b/services/java/com/android/server/usb/UsbService.java
index bebcd56..629f5fa 100644
--- a/services/java/com/android/server/usb/UsbService.java
+++ b/services/java/com/android/server/usb/UsbService.java
@@ -17,15 +17,20 @@
package com.android.server.usb;
import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.hardware.usb.IUsbManager;
import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbDevice;
-import android.net.Uri;
-import android.os.Binder;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
+import android.os.UserHandle;
+import android.util.SparseArray;
+
+import com.android.internal.util.IndentingPrintWriter;
import java.io.File;
import java.io.FileDescriptor;
@@ -37,21 +42,72 @@
* support is delegated to UsbDeviceManager.
*/
public class UsbService extends IUsbManager.Stub {
+ private static final String TAG = "UsbService";
+
private final Context mContext;
+
private UsbDeviceManager mDeviceManager;
private UsbHostManager mHostManager;
- private final UsbSettingsManager mSettingsManager;
+ private final Object mLock = new Object();
+
+ /** Map from {@link UserHandle} to {@link UsbSettingsManager} */
+ // @GuardedBy("mLock")
+ private final SparseArray<UsbSettingsManager>
+ mSettingsByUser = new SparseArray<UsbSettingsManager>();
+
+ private UsbSettingsManager getSettingsForUser(int userId) {
+ synchronized (mLock) {
+ UsbSettingsManager settings = mSettingsByUser.get(userId);
+ if (settings == null) {
+ settings = new UsbSettingsManager(mContext, new UserHandle(userId));
+ mSettingsByUser.put(userId, settings);
+ }
+ return settings;
+ }
+ }
public UsbService(Context context) {
mContext = context;
- mSettingsManager = new UsbSettingsManager(context);
- PackageManager pm = mContext.getPackageManager();
+
+ final PackageManager pm = mContext.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_USB_HOST)) {
- mHostManager = new UsbHostManager(context, mSettingsManager);
+ mHostManager = new UsbHostManager(context);
}
if (new File("/sys/class/android_usb").exists()) {
- mDeviceManager = new UsbDeviceManager(context, mSettingsManager);
+ mDeviceManager = new UsbDeviceManager(context);
+ }
+
+ setCurrentUser(UserHandle.USER_OWNER);
+
+ final IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(Intent.ACTION_USER_SWITCHED);
+ userFilter.addAction(Intent.ACTION_USER_STOPPED);
+ mContext.registerReceiver(mUserReceiver, userFilter, null, null);
+ }
+
+ private BroadcastReceiver mUserReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+ final String action = intent.getAction();
+ if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+ setCurrentUser(userId);
+ } else if (Intent.ACTION_USER_STOPPED.equals(action)) {
+ synchronized (mLock) {
+ mSettingsByUser.remove(userId);
+ }
+ }
+ }
+ };
+
+ private void setCurrentUser(int userId) {
+ final UsbSettingsManager userSettings = getSettingsForUser(userId);
+ if (mHostManager != null) {
+ mHostManager.setCurrentSettings(userSettings);
+ }
+ if (mDeviceManager != null) {
+ mDeviceManager.setCurrentSettings(userSettings);
}
}
@@ -65,6 +121,7 @@
}
/* Returns a list of all currently attached USB devices (host mdoe) */
+ @Override
public void getDeviceList(Bundle devices) {
if (mHostManager != null) {
mHostManager.getDeviceList(devices);
@@ -72,6 +129,7 @@
}
/* Opens the specified USB device (host mode) */
+ @Override
public ParcelFileDescriptor openDevice(String deviceName) {
if (mHostManager != null) {
return mHostManager.openDevice(deviceName);
@@ -81,6 +139,7 @@
}
/* returns the currently attached USB accessory (device mode) */
+ @Override
public UsbAccessory getCurrentAccessory() {
if (mDeviceManager != null) {
return mDeviceManager.getCurrentAccessory();
@@ -90,6 +149,7 @@
}
/* opens the currently attached USB accessory (device mode) */
+ @Override
public ParcelFileDescriptor openAccessory(UsbAccessory accessory) {
if (mDeviceManager != null) {
return mDeviceManager.openAccessory(accessory);
@@ -98,54 +158,70 @@
}
}
- public void setDevicePackage(UsbDevice device, String packageName) {
+ @Override
+ public void setDevicePackage(UsbDevice device, String packageName, int userId) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mSettingsManager.setDevicePackage(device, packageName);
+ getSettingsForUser(userId).setDevicePackage(device, packageName);
}
- public void setAccessoryPackage(UsbAccessory accessory, String packageName) {
+ @Override
+ public void setAccessoryPackage(UsbAccessory accessory, String packageName, int userId) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mSettingsManager.setAccessoryPackage(accessory, packageName);
+ getSettingsForUser(userId).setAccessoryPackage(accessory, packageName);
}
+ @Override
public boolean hasDevicePermission(UsbDevice device) {
- return mSettingsManager.hasPermission(device);
+ final int userId = UserHandle.getCallingUserId();
+ return getSettingsForUser(userId).hasPermission(device);
}
+ @Override
public boolean hasAccessoryPermission(UsbAccessory accessory) {
- return mSettingsManager.hasPermission(accessory);
+ final int userId = UserHandle.getCallingUserId();
+ return getSettingsForUser(userId).hasPermission(accessory);
}
- public void requestDevicePermission(UsbDevice device, String packageName,
- PendingIntent pi) {
- mSettingsManager.requestPermission(device, packageName, pi);
+ @Override
+ public void requestDevicePermission(UsbDevice device, String packageName, PendingIntent pi) {
+ final int userId = UserHandle.getCallingUserId();
+ getSettingsForUser(userId).requestPermission(device, packageName, pi);
}
- public void requestAccessoryPermission(UsbAccessory accessory, String packageName,
- PendingIntent pi) {
- mSettingsManager.requestPermission(accessory, packageName, pi);
+ @Override
+ public void requestAccessoryPermission(
+ UsbAccessory accessory, String packageName, PendingIntent pi) {
+ final int userId = UserHandle.getCallingUserId();
+ getSettingsForUser(userId).requestPermission(accessory, packageName, pi);
}
+ @Override
public void grantDevicePermission(UsbDevice device, int uid) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mSettingsManager.grantDevicePermission(device, uid);
+ final int userId = UserHandle.getUserId(uid);
+ getSettingsForUser(userId).grantDevicePermission(device, uid);
}
+ @Override
public void grantAccessoryPermission(UsbAccessory accessory, int uid) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mSettingsManager.grantAccessoryPermission(accessory, uid);
+ final int userId = UserHandle.getUserId(uid);
+ getSettingsForUser(userId).grantAccessoryPermission(accessory, uid);
}
- public boolean hasDefaults(String packageName) {
+ @Override
+ public boolean hasDefaults(String packageName, int userId) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- return mSettingsManager.hasDefaults(packageName);
+ return getSettingsForUser(userId).hasDefaults(packageName);
}
- public void clearDefaults(String packageName) {
+ @Override
+ public void clearDefaults(String packageName, int userId) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
- mSettingsManager.clearDefaults(packageName);
+ getSettingsForUser(userId).clearDefaults(packageName);
}
+ @Override
public void setCurrentFunction(String function, boolean makeDefault) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
if (mDeviceManager != null) {
@@ -155,6 +231,7 @@
}
}
+ @Override
public void setMassStorageBackingFile(String path) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
if (mDeviceManager != null) {
@@ -164,34 +241,41 @@
}
}
+ @Override
public void allowUsbDebugging(boolean alwaysAllow, String publicKey) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
mDeviceManager.allowUsbDebugging(alwaysAllow, publicKey);
}
+ @Override
public void denyUsbDebugging() {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USB, null);
mDeviceManager.denyUsbDebugging();
}
@Override
- public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump UsbManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid());
- return;
- }
+ public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG);
+ final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
pw.println("USB Manager State:");
-
if (mDeviceManager != null) {
mDeviceManager.dump(fd, pw);
}
if (mHostManager != null) {
mHostManager.dump(fd, pw);
}
- mSettingsManager.dump(fd, pw);
+
+ synchronized (mLock) {
+ for (int i = 0; i < mSettingsByUser.size(); i++) {
+ final int userId = mSettingsByUser.keyAt(i);
+ final UsbSettingsManager settings = mSettingsByUser.valueAt(i);
+ pw.increaseIndent();
+ pw.println("Settings for user " + userId + ":");
+ settings.dump(fd, pw);
+ pw.decreaseIndent();
+ }
+ }
+ pw.decreaseIndent();
}
}
diff --git a/services/java/com/android/server/usb/UsbSettingsManager.java b/services/java/com/android/server/usb/UsbSettingsManager.java
index a8453d3..4b2bbfe 100644
--- a/services/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/java/com/android/server/usb/UsbSettingsManager.java
@@ -33,9 +33,10 @@
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Binder;
-import android.os.FileUtils;
-import android.os.Process;
+import android.os.Environment;
import android.os.UserHandle;
+import android.util.AtomicFile;
+import android.util.Log;
import android.util.Slog;
import android.util.SparseBooleanArray;
import android.util.Xml;
@@ -48,7 +49,6 @@
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
-import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
@@ -60,13 +60,21 @@
import java.util.HashMap;
import java.util.List;
-class UsbSettingsManager {
+import libcore.io.IoUtils;
+class UsbSettingsManager {
private static final String TAG = "UsbSettingsManager";
private static final boolean DEBUG = false;
- private static final File sSettingsFile = new File("/data/system/usb_device_manager.xml");
+
+ /** Legacy settings file, before multi-user */
+ private static final File sSingleUserSettingsFile = new File(
+ "/data/system/usb_device_manager.xml");
+
+ private final UserHandle mUser;
+ private final AtomicFile mSettingsFile;
private final Context mContext;
+ private final Context mUserContext;
private final PackageManager mPackageManager;
// Temporary mapping USB device name to list of UIDs with permissions for the device
@@ -350,28 +358,49 @@
}
private class MyPackageMonitor extends PackageMonitor {
-
+ @Override
public void onPackageAdded(String packageName, int uid) {
handlePackageUpdate(packageName);
}
+ @Override
public void onPackageChanged(String packageName, int uid, String[] components) {
handlePackageUpdate(packageName);
}
+ @Override
public void onPackageRemoved(String packageName, int uid) {
clearDefaults(packageName);
}
}
+
MyPackageMonitor mPackageMonitor = new MyPackageMonitor();
- public UsbSettingsManager(Context context) {
+ public UsbSettingsManager(Context context, UserHandle user) {
+ if (DEBUG) Slog.v(TAG, "Creating settings for " + user);
+
+ try {
+ mUserContext = context.createPackageContextAsUser("android", 0, user);
+ } catch (NameNotFoundException e) {
+ throw new RuntimeException("Missing android package");
+ }
+
mContext = context;
- mPackageManager = context.getPackageManager();
+ mPackageManager = mUserContext.getPackageManager();
+
+ mUser = user;
+ mSettingsFile = new AtomicFile(new File(
+ Environment.getUserSystemDirectory(user.getIdentifier()),
+ "usb_device_manager.xml"));
+
synchronized (mLock) {
+ if (UserHandle.OWNER.equals(user)) {
+ upgradeSingleUserLocked();
+ }
readSettingsLocked();
}
- mPackageMonitor.register(context, null, true);
+
+ mPackageMonitor.register(mUserContext, null, true);
}
private void readPreference(XmlPullParser parser)
@@ -395,10 +424,54 @@
XmlUtils.nextElement(parser);
}
+ /**
+ * Upgrade any single-user settings from {@link #sSingleUserSettingsFile}.
+ * Should only by called by owner.
+ */
+ private void upgradeSingleUserLocked() {
+ if (sSingleUserSettingsFile.exists()) {
+ mDevicePreferenceMap.clear();
+ mAccessoryPreferenceMap.clear();
+
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(sSingleUserSettingsFile);
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(fis, null);
+
+ XmlUtils.nextElement(parser);
+ while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
+ final String tagName = parser.getName();
+ if ("preference".equals(tagName)) {
+ readPreference(parser);
+ } else {
+ XmlUtils.nextElement(parser);
+ }
+ }
+ } catch (IOException e) {
+ Log.wtf(TAG, "Failed to read single-user settings", e);
+ } catch (XmlPullParserException e) {
+ Log.wtf(TAG, "Failed to read single-user settings", e);
+ } finally {
+ IoUtils.closeQuietly(fis);
+ }
+
+ writeSettingsLocked();
+
+ // Success or failure, we delete single-user file
+ sSingleUserSettingsFile.delete();
+ }
+ }
+
private void readSettingsLocked() {
+ if (DEBUG) Slog.v(TAG, "readSettingsLocked()");
+
+ mDevicePreferenceMap.clear();
+ mAccessoryPreferenceMap.clear();
+
FileInputStream stream = null;
try {
- stream = new FileInputStream(sSettingsFile);
+ stream = mSettingsFile.openRead();
XmlPullParser parser = Xml.newPullParser();
parser.setInput(stream, null);
@@ -407,7 +480,7 @@
String tagName = parser.getName();
if ("preference".equals(tagName)) {
readPreference(parser);
- } else {
+ } else {
XmlUtils.nextElement(parser);
}
}
@@ -415,25 +488,21 @@
if (DEBUG) Slog.d(TAG, "settings file not found");
} catch (Exception e) {
Slog.e(TAG, "error reading settings file, deleting to start fresh", e);
- sSettingsFile.delete();
+ mSettingsFile.delete();
} finally {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- }
- }
+ IoUtils.closeQuietly(stream);
}
}
private void writeSettingsLocked() {
+ if (DEBUG) Slog.v(TAG, "writeSettingsLocked()");
+
FileOutputStream fos = null;
try {
- FileOutputStream fstr = new FileOutputStream(sSettingsFile);
- if (DEBUG) Slog.d(TAG, "writing settings to " + fstr);
- BufferedOutputStream str = new BufferedOutputStream(fstr);
+ fos = mSettingsFile.startWrite();
+
FastXmlSerializer serializer = new FastXmlSerializer();
- serializer.setOutput(str, "utf-8");
+ serializer.setOutput(fos, "utf-8");
serializer.startDocument(null, true);
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
serializer.startTag(null, "settings");
@@ -455,12 +524,12 @@
serializer.endTag(null, "settings");
serializer.endDocument();
- str.flush();
- FileUtils.sync(fstr);
- str.close();
- } catch (Exception e) {
- Slog.e(TAG, "error writing settings file, deleting to start fresh", e);
- sSettingsFile.delete();
+ mSettingsFile.finishWrite(fos);
+ } catch (IOException e) {
+ Slog.e(TAG, "Failed to write settings", e);
+ if (fos != null) {
+ mSettingsFile.failWrite(fos);
+ }
}
}
@@ -547,7 +616,7 @@
}
// Send broadcast to running activity with registered intent
- mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ mUserContext.sendBroadcast(intent);
// Start activity with registered intent
resolveActivity(intent, matches, defaultPackage, device, null);
@@ -608,7 +677,7 @@
dialogIntent.putExtra(UsbManager.EXTRA_ACCESSORY, accessory);
dialogIntent.putExtra("uri", uri);
try {
- mContext.startActivity(dialogIntent);
+ mUserContext.startActivityAsUser(dialogIntent, mUser);
} catch (ActivityNotFoundException e) {
Slog.e(TAG, "unable to start UsbAccessoryUriActivity");
}
@@ -656,7 +725,7 @@
intent.setComponent(
new ComponentName(defaultRI.activityInfo.packageName,
defaultRI.activityInfo.name));
- mContext.startActivity(intent);
+ mUserContext.startActivityAsUser(intent, mUser);
} catch (ActivityNotFoundException e) {
Slog.e(TAG, "startActivity failed", e);
}
@@ -683,7 +752,7 @@
resolverIntent.putExtra(Intent.EXTRA_INTENT, intent);
}
try {
- mContext.startActivity(resolverIntent);
+ mUserContext.startActivityAsUser(resolverIntent, mUser);
} catch (ActivityNotFoundException e) {
Slog.e(TAG, "unable to start activity " + resolverIntent);
}
@@ -814,7 +883,7 @@
}
private void requestPermissionDialog(Intent intent, String packageName, PendingIntent pi) {
- int uid = Binder.getCallingUid();
+ final int uid = Binder.getCallingUid();
// compare uid with packageName to foil apps pretending to be someone else
try {
@@ -833,9 +902,9 @@
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_INTENT, pi);
intent.putExtra("package", packageName);
- intent.putExtra("uid", uid);
+ intent.putExtra(Intent.EXTRA_UID, uid);
try {
- mContext.startActivity(intent);
+ mUserContext.startActivityAsUser(intent, mUser);
} catch (ActivityNotFoundException e) {
Slog.e(TAG, "unable to start UsbPermissionActivity");
} finally {
@@ -851,7 +920,7 @@
intent.putExtra(UsbManager.EXTRA_DEVICE, device);
intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true);
try {
- pi.send(mContext, 0, intent);
+ pi.send(mUserContext, 0, intent);
} catch (PendingIntent.CanceledException e) {
if (DEBUG) Slog.d(TAG, "requestPermission PendingIntent was cancelled");
}
@@ -864,14 +933,14 @@
}
public void requestPermission(UsbAccessory accessory, String packageName, PendingIntent pi) {
- Intent intent = new Intent();
+ Intent intent = new Intent();
// respond immediately if permission has already been granted
if (hasPermission(accessory)) {
intent.putExtra(UsbManager.EXTRA_ACCESSORY, accessory);
intent.putExtra(UsbManager.EXTRA_PERMISSION_GRANTED, true);
- try {
- pi.send(mContext, 0, intent);
+ try {
+ pi.send(mUserContext, 0, intent);
} catch (PendingIntent.CanceledException e) {
if (DEBUG) Slog.d(TAG, "requestPermission PendingIntent was cancelled");
}
diff --git a/services/java/com/android/server/wm/DimAnimator.java b/services/java/com/android/server/wm/DimAnimator.java
index 9bca834..5874202 100644
--- a/services/java/com/android/server/wm/DimAnimator.java
+++ b/services/java/com/android/server/wm/DimAnimator.java
@@ -30,37 +30,37 @@
* all state used for dim animation.
*/
class DimAnimator {
+ static final String TAG = "DimAnimator";
+
Surface mDimSurface;
boolean mDimShown = false;
float mDimCurrentAlpha;
float mDimTargetAlpha;
float mDimDeltaPerMs;
long mLastDimAnimTime;
-
+
int mLastDimWidth, mLastDimHeight;
DimAnimator (SurfaceSession session, final int layerStack) {
- if (mDimSurface == null) {
- try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
- mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
- "DimAnimator",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- } else {
- mDimSurface = new Surface(session, "DimAnimator",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- }
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
- " DIM " + mDimSurface + ": CREATE");
- mDimSurface.setLayerStack(layerStack);
- mDimSurface.setAlpha(0.0f);
- mDimSurface.show();
- } catch (Exception e) {
- Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
+ try {
+ if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
+ "DimAnimator",
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
+ } else {
+ mDimSurface = new Surface(session, "DimAnimator",
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
}
+ if (WindowManagerService.SHOW_TRANSACTIONS ||
+ WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
+ " DIM " + mDimSurface + ": CREATE");
+ mDimSurface.setLayerStack(layerStack);
+ mDimSurface.setAlpha(0.0f);
+ mDimSurface.show();
+ } catch (Exception e) {
+ Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
}
}
@@ -69,6 +69,11 @@
* {@link #updateSurface} after all windows are examined.
*/
void updateParameters(final Resources res, final Parameters params, final long currentTime) {
+ if (mDimSurface == null) {
+ Slog.e(TAG, "updateParameters: no Surface");
+ return;
+ }
+
// Multiply by 1.5 so that rotating a frozen surface that includes this does not expose a
// corner.
final int dw = (int) (params.mDimWidth * 1.5);
@@ -133,6 +138,11 @@
* false when the animation is finished and the dim surface is hidden.
*/
boolean updateSurface(boolean dimming, long currentTime, boolean displayFrozen) {
+ if (mDimSurface == null) {
+ Slog.e(TAG, "updateSurface: no Surface");
+ return false;
+ }
+
if (!dimming) {
if (mDimTargetAlpha != 0) {
mLastDimAnimTime = currentTime;
@@ -187,6 +197,13 @@
return animating;
}
+ public void kill() {
+ if (mDimSurface != null) {
+ mDimSurface.destroy();
+ mDimSurface = null;
+ }
+ }
+
public void printTo(String prefix, PrintWriter pw) {
pw.print(prefix);
pw.print("mDimSurface="); pw.print(mDimSurface);
diff --git a/services/java/com/android/server/wm/DimSurface.java b/services/java/com/android/server/wm/DimSurface.java
index ddbd70d..4225868 100644
--- a/services/java/com/android/server/wm/DimSurface.java
+++ b/services/java/com/android/server/wm/DimSurface.java
@@ -24,6 +24,8 @@
import java.io.PrintWriter;
class DimSurface {
+ static final String TAG = "DimSurface";
+
Surface mDimSurface;
boolean mDimShown = false;
int mDimColor = 0;
@@ -31,27 +33,25 @@
int mLastDimWidth, mLastDimHeight;
DimSurface(SurfaceSession session, final int layerStack) {
- if (mDimSurface == null) {
- try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
- mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
- "DimSurface",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- } else {
- mDimSurface = new Surface(session, "DimSurface",
- 16, 16, PixelFormat.OPAQUE,
- Surface.FX_SURFACE_DIM | Surface.HIDDEN);
- }
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
- " DIM " + mDimSurface + ": CREATE");
- mDimSurface.setLayerStack(layerStack);
- mDimSurface.setAlpha(0.0f);
- mDimSurface.show();
- } catch (Exception e) {
- Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
+ try {
+ if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ mDimSurface = new WindowStateAnimator.SurfaceTrace(session,
+ "DimSurface",
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
+ } else {
+ mDimSurface = new Surface(session, "DimSurface",
+ 16, 16, PixelFormat.OPAQUE,
+ Surface.FX_SURFACE_DIM | Surface.HIDDEN);
}
+ if (WindowManagerService.SHOW_TRANSACTIONS ||
+ WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
+ " DIM " + mDimSurface + ": CREATE");
+ mDimSurface.setLayerStack(layerStack);
+ mDimSurface.setAlpha(0.0f);
+ mDimSurface.show();
+ } catch (Exception e) {
+ Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
}
}
@@ -59,6 +59,11 @@
* Show the dim surface.
*/
void show(int dw, int dh, int layer, int color) {
+ if (mDimSurface == null) {
+ Slog.e(TAG, "show: no Surface");
+ return;
+ }
+
if (!mDimShown) {
if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" +
dw + "x" + dh + " layer=" + layer + ")");
@@ -88,6 +93,11 @@
}
void hide() {
+ if (mDimSurface == null) {
+ Slog.e(TAG, "hide: no Surface");
+ return;
+ }
+
if (mDimShown) {
mDimShown = false;
try {
@@ -99,6 +109,13 @@
}
}
+ void kill() {
+ if (mDimSurface != null) {
+ mDimSurface.destroy();
+ mDimSurface = null;
+ }
+ }
+
public void printTo(String prefix, PrintWriter pw) {
pw.print(prefix); pw.print("mDimSurface="); pw.println(mDimSurface);
pw.print(prefix); pw.print("mDimShown="); pw.print(mDimShown);
diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java
index 377e89c..b67fb51 100644
--- a/services/java/com/android/server/wm/WindowAnimator.java
+++ b/services/java/com/android/server/wm/WindowAnimator.java
@@ -147,6 +147,22 @@
}
void removeDisplayLocked(final int displayId) {
+ final DisplayContentsAnimator displayAnimator = mDisplayContentsAnimators.get(displayId);
+ if (displayAnimator != null) {
+ if (displayAnimator.mWindowAnimationBackgroundSurface != null) {
+ displayAnimator.mWindowAnimationBackgroundSurface.kill();
+ displayAnimator.mWindowAnimationBackgroundSurface = null;
+ }
+ if (displayAnimator.mScreenRotationAnimation != null) {
+ displayAnimator.mScreenRotationAnimation.kill();
+ displayAnimator.mScreenRotationAnimation = null;
+ }
+ if (displayAnimator.mDimAnimator != null) {
+ displayAnimator.mDimAnimator.kill();
+ displayAnimator.mDimAnimator = null;
+ }
+ }
+
mDisplayContentsAnimators.delete(displayId);
}
@@ -527,11 +543,15 @@
}
}
- windowAnimationBackgroundSurface.show(mDw, mDh,
- animLayer - WindowManagerService.LAYER_OFFSET_DIM,
- windowAnimationBackgroundColor);
+ if (windowAnimationBackgroundSurface != null) {
+ windowAnimationBackgroundSurface.show(mDw, mDh,
+ animLayer - WindowManagerService.LAYER_OFFSET_DIM,
+ windowAnimationBackgroundColor);
+ }
} else {
- windowAnimationBackgroundSurface.hide();
+ if (windowAnimationBackgroundSurface != null) {
+ windowAnimationBackgroundSurface.hide();
+ }
}
}
@@ -643,9 +663,8 @@
final DimAnimator.Parameters dimParams = displayAnimator.mDimParams;
final DimAnimator dimAnimator = displayAnimator.mDimAnimator;
- if (dimParams != null) {
- dimAnimator.updateParameters(
- mContext.getResources(), dimParams, mCurrentTime);
+ if (dimAnimator != null && dimParams != null) {
+ dimAnimator.updateParameters(mContext.getResources(), dimParams, mCurrentTime);
}
if (dimAnimator != null && dimAnimator.mDimShown) {
mAnimating |= dimAnimator.updateSurface(isDimmingLocked(displayId),
@@ -801,9 +820,9 @@
private class DisplayContentsAnimator {
WinAnimatorList mWinAnimators = new WinAnimatorList();
- final DimAnimator mDimAnimator;
+ DimAnimator mDimAnimator = null;
DimAnimator.Parameters mDimParams = null;
- final DimSurface mWindowAnimationBackgroundSurface;
+ DimSurface mWindowAnimationBackgroundSurface = null;
ScreenRotationAnimation mScreenRotationAnimation = null;
public DisplayContentsAnimator(int displayId) {
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 3f7b67b..180579d 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -811,12 +811,12 @@
mBatteryStats = BatteryStatsService.getService();
// Get persisted window scale setting
- mWindowAnimationScale = Settings.System.getFloat(context.getContentResolver(),
- Settings.System.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
- mTransitionAnimationScale = Settings.System.getFloat(context.getContentResolver(),
- Settings.System.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
- setAnimatorDurationScale(Settings.System.getFloat(context.getContentResolver(),
- Settings.System.ANIMATOR_DURATION_SCALE, mTransitionAnimationScale));
+ mWindowAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
+ mTransitionAnimationScale = Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
+ setAnimatorDurationScale(Settings.Global.getFloat(context.getContentResolver(),
+ Settings.Global.ANIMATOR_DURATION_SCALE, mTransitionAnimationScale));
// Track changes to DevicePolicyManager state so we can enable/disable keyguard.
IntentFilter filter = new IntentFilter();
@@ -3639,8 +3639,6 @@
if (wtoken != null) {
boolean delayed = false;
if (!wtoken.hidden) {
- wtoken.hidden = true;
-
final int N = wtoken.windows.size();
boolean changed = false;
@@ -3661,6 +3659,8 @@
}
}
+ wtoken.hidden = true;
+
if (changed) {
performLayoutAndPlaceSurfacesLocked();
updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL,
@@ -7480,12 +7480,12 @@
}
case PERSIST_ANIMATION_SCALE: {
- Settings.System.putFloat(mContext.getContentResolver(),
- Settings.System.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
- Settings.System.putFloat(mContext.getContentResolver(),
- Settings.System.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
- Settings.System.putFloat(mContext.getContentResolver(),
- Settings.System.ANIMATOR_DURATION_SCALE, mAnimatorDurationScale);
+ Settings.Global.putFloat(mContext.getContentResolver(),
+ Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScale);
+ Settings.Global.putFloat(mContext.getContentResolver(),
+ Settings.Global.TRANSITION_ANIMATION_SCALE, mTransitionAnimationScale);
+ Settings.Global.putFloat(mContext.getContentResolver(),
+ Settings.Global.ANIMATOR_DURATION_SCALE, mAnimatorDurationScale);
break;
}
@@ -10870,8 +10870,8 @@
final DisplayContent displayContent = getDisplayContentLocked(displayId);
mDisplayContents.delete(displayId);
WindowList windows = displayContent.getWindowList();
- for (int i = windows.size() - 1; i >= 0; --i) {
- final WindowState win = windows.get(i);
+ while (!windows.isEmpty()) {
+ final WindowState win = windows.get(windows.size() - 1);
removeWindowLocked(win.mSession, win);
}
mAnimator.removeDisplayLocked(displayId);