diff --git a/Android.mk b/Android.mk index 0663e858e1b..8b6532cabdf 100644 --- a/Android.mk +++ b/Android.mk @@ -6,10 +6,13 @@ LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13 jsr305 LOCAL_MODULE_TAGS := optional -LOCAL_SRC_FILES := $(call all-java-files-under, src) +LOCAL_SRC_FILES := \ + $(call all-java-files-under, src) \ + src/com/android/settings/EventLogTags.logtags LOCAL_PACKAGE_NAME := Settings LOCAL_CERTIFICATE := platform +LOCAL_PRIVILEGED_MODULE := true LOCAL_PROGUARD_FLAG_FILES := proguard.flags diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b489a896bc1..b730ba72efb 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -15,6 +15,7 @@ + @@ -64,11 +65,13 @@ + + @@ -169,7 +172,7 @@ @@ -512,7 +515,7 @@ @@ -522,7 +525,7 @@ + android:value="com.android.settings.inputmethod.UserDictionaryList" /> - + + android:excludeFromRecents="true" + android:enabled="false"> @@ -813,8 +817,9 @@ android:resource="@id/application_settings" /> --> - + - + android:value="com.android.settings.location.LocationSettings" /> @@ -851,6 +855,35 @@ android:resource="@id/security_settings" /> + + + + + + + + + + + + + + + + + + + + + android:value="com.android.settings.accessibility.AccessibilitySettings" /> + + + + + + + + + + @@ -988,7 +1036,6 @@ - @@ -1004,6 +1051,11 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1610,5 +1728,14 @@ + + + diff --git a/proguard.flags b/proguard.flags index 8a6c2cbd939..211a5a4033a 100644 --- a/proguard.flags +++ b/proguard.flags @@ -13,6 +13,7 @@ -keep class com.android.settings.fuelgauge.* -keep class com.android.settings.users.* -keep class com.android.settings.NotificationStation +-keep class com.android.settings.nfc.* # Keep click responders -keepclassmembers class com.android.settings.inputmethod.UserDictionaryAddWordActivity { diff --git a/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png index 470f5c03897..de40bd08503 100644 Binary files a/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png and b/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png differ diff --git a/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png index e3aa8db1a37..73ebdb888ab 100644 Binary files a/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png and b/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png differ diff --git a/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png index 9e27d2fdc79..e1d6138e9ae 100644 Binary files a/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png and b/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png differ diff --git a/res/drawable-hdpi/appwidget_item_bg_pressed.9.png b/res/drawable-hdpi/appwidget_item_bg_pressed.9.png index 0da4a1d3462..785dbaad9f1 100644 Binary files a/res/drawable-hdpi/appwidget_item_bg_pressed.9.png and b/res/drawable-hdpi/appwidget_item_bg_pressed.9.png differ diff --git a/res/drawable-hdpi/ic_appwidget_settings_gps_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_gps_off_holo.png deleted file mode 100644 index cd3c61e2f6e..00000000000 Binary files a/res/drawable-hdpi/ic_appwidget_settings_gps_off_holo.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_appwidget_settings_gps_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_gps_on_holo.png deleted file mode 100644 index 5138b70a175..00000000000 Binary files a/res/drawable-hdpi/ic_appwidget_settings_gps_on_holo.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png new file mode 100644 index 00000000000..831c87ab287 Binary files /dev/null and b/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png differ diff --git a/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png new file mode 100644 index 00000000000..5ece2310d9b Binary files /dev/null and b/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png differ diff --git a/res/drawable-hdpi/ic_grayedout_printer.png b/res/drawable-hdpi/ic_grayedout_printer.png new file mode 100644 index 00000000000..5e54970d6b3 Binary files /dev/null and b/res/drawable-hdpi/ic_grayedout_printer.png differ diff --git a/res/drawable-hdpi/ic_menu_add.png b/res/drawable-hdpi/ic_menu_add.png deleted file mode 100644 index 4b68f52ad0a..00000000000 Binary files a/res/drawable-hdpi/ic_menu_add.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_menu_add_dark.png b/res/drawable-hdpi/ic_menu_add_dark.png new file mode 100644 index 00000000000..b45001e55a6 Binary files /dev/null and b/res/drawable-hdpi/ic_menu_add_dark.png differ diff --git a/res/drawable-hdpi/ic_menu_add_light.png b/res/drawable-hdpi/ic_menu_add_light.png new file mode 100644 index 00000000000..91b035402ac Binary files /dev/null and b/res/drawable-hdpi/ic_menu_add_light.png differ diff --git a/res/drawable-hdpi/ic_settings_home.png b/res/drawable-hdpi/ic_settings_home.png new file mode 100644 index 00000000000..ce1a06c9a90 Binary files /dev/null and b/res/drawable-hdpi/ic_settings_home.png differ diff --git a/res/drawable-hdpi/ic_settings_location.png b/res/drawable-hdpi/ic_settings_location.png index dcd0f4eaaa8..22d2deaf0c7 100644 Binary files a/res/drawable-hdpi/ic_settings_location.png and b/res/drawable-hdpi/ic_settings_location.png differ diff --git a/res/drawable-hdpi/ic_settings_nfc_payment.png b/res/drawable-hdpi/ic_settings_nfc_payment.png new file mode 100644 index 00000000000..7b63e536d8d Binary files /dev/null and b/res/drawable-hdpi/ic_settings_nfc_payment.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_1.png b/res/drawable-hdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index 60857b3b7ac..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_1_dark.png b/res/drawable-hdpi/ic_wifi_lock_signal_1_dark.png new file mode 100644 index 00000000000..2ec38ae5a87 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_1_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_1_light.png b/res/drawable-hdpi/ic_wifi_lock_signal_1_light.png new file mode 100644 index 00000000000..8b0009b1446 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_1_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_2.png b/res/drawable-hdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index 5e1f118a5b8..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_2_dark.png b/res/drawable-hdpi/ic_wifi_lock_signal_2_dark.png new file mode 100644 index 00000000000..a3383a84bc8 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_2_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_2_light.png b/res/drawable-hdpi/ic_wifi_lock_signal_2_light.png new file mode 100644 index 00000000000..b79d3e5e726 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_2_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_3.png b/res/drawable-hdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index 490bd584dc9..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_3_dark.png b/res/drawable-hdpi/ic_wifi_lock_signal_3_dark.png new file mode 100644 index 00000000000..e2cb17ecdc3 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_3_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_3_light.png b/res/drawable-hdpi/ic_wifi_lock_signal_3_light.png new file mode 100644 index 00000000000..053c7afc419 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_3_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_4.png b/res/drawable-hdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index e5fa8d1c0b0..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_4_dark.png b/res/drawable-hdpi/ic_wifi_lock_signal_4_dark.png new file mode 100644 index 00000000000..65b02dde1ba Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_4_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_4_light.png b/res/drawable-hdpi/ic_wifi_lock_signal_4_light.png new file mode 100644 index 00000000000..0516bd46e41 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_lock_signal_4_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_1.png b/res/drawable-hdpi/ic_wifi_signal_1.png deleted file mode 100644 index de9162ba567..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_signal_1.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_signal_1_dark.png b/res/drawable-hdpi/ic_wifi_signal_1_dark.png new file mode 100644 index 00000000000..f3f020843e4 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_1_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_1_light.png b/res/drawable-hdpi/ic_wifi_signal_1_light.png new file mode 100644 index 00000000000..d9968b93f79 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_1_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_2.png b/res/drawable-hdpi/ic_wifi_signal_2.png deleted file mode 100644 index 4c7559c3df8..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_signal_2.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_signal_2_dark.png b/res/drawable-hdpi/ic_wifi_signal_2_dark.png new file mode 100644 index 00000000000..9541c38da13 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_2_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_2_light.png b/res/drawable-hdpi/ic_wifi_signal_2_light.png new file mode 100644 index 00000000000..d3065dead40 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_2_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_3.png b/res/drawable-hdpi/ic_wifi_signal_3.png deleted file mode 100644 index 2d763246b8f..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_signal_3.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_signal_3_dark.png b/res/drawable-hdpi/ic_wifi_signal_3_dark.png new file mode 100644 index 00000000000..be1ba376132 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_3_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_3_light.png b/res/drawable-hdpi/ic_wifi_signal_3_light.png new file mode 100644 index 00000000000..4a6407fd67b Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_3_light.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_4.png b/res/drawable-hdpi/ic_wifi_signal_4.png deleted file mode 100644 index bd50fd7d14f..00000000000 Binary files a/res/drawable-hdpi/ic_wifi_signal_4.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wifi_signal_4_dark.png b/res/drawable-hdpi/ic_wifi_signal_4_dark.png new file mode 100644 index 00000000000..3fed8e63803 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_4_dark.png differ diff --git a/res/drawable-hdpi/ic_wifi_signal_4_light.png b/res/drawable-hdpi/ic_wifi_signal_4_light.png new file mode 100644 index 00000000000..e52acd6f446 Binary files /dev/null and b/res/drawable-hdpi/ic_wifi_signal_4_light.png differ diff --git a/res/drawable-hdpi/ic_wps.png b/res/drawable-hdpi/ic_wps.png deleted file mode 100644 index 36c2a327f57..00000000000 Binary files a/res/drawable-hdpi/ic_wps.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_wps_dark.png b/res/drawable-hdpi/ic_wps_dark.png new file mode 100644 index 00000000000..918b0cc48bc Binary files /dev/null and b/res/drawable-hdpi/ic_wps_dark.png differ diff --git a/res/drawable-hdpi/ic_wps_light.png b/res/drawable-hdpi/ic_wps_light.png new file mode 100644 index 00000000000..5ad9f3eaeaf Binary files /dev/null and b/res/drawable-hdpi/ic_wps_light.png differ diff --git a/res/drawable-hdpi/nfc_payment_empty_state.png b/res/drawable-hdpi/nfc_payment_empty_state.png new file mode 100644 index 00000000000..300a053ed09 Binary files /dev/null and b/res/drawable-hdpi/nfc_payment_empty_state.png differ diff --git a/res/drawable-hdpi/transparency.png b/res/drawable-hdpi/transparency.png new file mode 100644 index 00000000000..990c411b8be Binary files /dev/null and b/res/drawable-hdpi/transparency.png differ diff --git a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_1.png b/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index 5806c4f7925..00000000000 Binary files a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_2.png b/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index c3a1d91aace..00000000000 Binary files a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_3.png b/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index 36ea00156f6..00000000000 Binary files a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_4.png b/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index 6c4f25254d4..00000000000 Binary files a/res/drawable-ldrtl-hdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_1.png b/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index 3f635f8b3ac..00000000000 Binary files a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_2.png b/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index 04aae2d3849..00000000000 Binary files a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_3.png b/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index 17609df4708..00000000000 Binary files a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_4.png b/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index 90a8e27d92d..00000000000 Binary files a/res/drawable-ldrtl-mdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_1.png b/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index 0e124bd6746..00000000000 Binary files a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_2.png b/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index d97d5d43d2b..00000000000 Binary files a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_3.png b/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index 99a8384fbfc..00000000000 Binary files a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_4.png b/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index 40307f82fea..00000000000 Binary files a/res/drawable-ldrtl-xhdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png index aa80a7c70e7..79636c069da 100644 Binary files a/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png and b/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png differ diff --git a/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png index e49e8a9b89d..ac2c80a09fa 100644 Binary files a/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png and b/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png differ diff --git a/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png index a54ecd0da36..87e21cc0105 100644 Binary files a/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png and b/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png differ diff --git a/res/drawable-mdpi/appwidget_item_bg_pressed.9.png b/res/drawable-mdpi/appwidget_item_bg_pressed.9.png index 9a5001b45ef..df1be8d22af 100644 Binary files a/res/drawable-mdpi/appwidget_item_bg_pressed.9.png and b/res/drawable-mdpi/appwidget_item_bg_pressed.9.png differ diff --git a/res/drawable-mdpi/ic_appwidget_settings_gps_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_gps_off_holo.png deleted file mode 100644 index 64427202405..00000000000 Binary files a/res/drawable-mdpi/ic_appwidget_settings_gps_off_holo.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_appwidget_settings_gps_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_gps_on_holo.png deleted file mode 100644 index 9e98ad9eda9..00000000000 Binary files a/res/drawable-mdpi/ic_appwidget_settings_gps_on_holo.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png new file mode 100644 index 00000000000..c5906111c08 Binary files /dev/null and b/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png differ diff --git a/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png new file mode 100644 index 00000000000..dbdb9ebd727 Binary files /dev/null and b/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png differ diff --git a/res/drawable-mdpi/ic_grayedout_printer.png b/res/drawable-mdpi/ic_grayedout_printer.png new file mode 100644 index 00000000000..5e54970d6b3 Binary files /dev/null and b/res/drawable-mdpi/ic_grayedout_printer.png differ diff --git a/res/drawable-mdpi/ic_menu_add.png b/res/drawable-mdpi/ic_menu_add.png deleted file mode 100644 index 15ffadd3606..00000000000 Binary files a/res/drawable-mdpi/ic_menu_add.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_menu_add_dark.png b/res/drawable-mdpi/ic_menu_add_dark.png new file mode 100644 index 00000000000..e6add2b291e Binary files /dev/null and b/res/drawable-mdpi/ic_menu_add_dark.png differ diff --git a/res/drawable-mdpi/ic_menu_add_light.png b/res/drawable-mdpi/ic_menu_add_light.png new file mode 100644 index 00000000000..8b558100eea Binary files /dev/null and b/res/drawable-mdpi/ic_menu_add_light.png differ diff --git a/res/drawable-mdpi/ic_settings_home.png b/res/drawable-mdpi/ic_settings_home.png new file mode 100644 index 00000000000..05b5e4d2ecf Binary files /dev/null and b/res/drawable-mdpi/ic_settings_home.png differ diff --git a/res/drawable-mdpi/ic_settings_location.png b/res/drawable-mdpi/ic_settings_location.png index 07b9f27a99a..3e1603353a7 100644 Binary files a/res/drawable-mdpi/ic_settings_location.png and b/res/drawable-mdpi/ic_settings_location.png differ diff --git a/res/drawable-mdpi/ic_settings_nfc_payment.png b/res/drawable-mdpi/ic_settings_nfc_payment.png new file mode 100644 index 00000000000..c3101bc6168 Binary files /dev/null and b/res/drawable-mdpi/ic_settings_nfc_payment.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_1.png b/res/drawable-mdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index e8ac823bfa6..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_1_dark.png b/res/drawable-mdpi/ic_wifi_lock_signal_1_dark.png new file mode 100644 index 00000000000..d6868aa2874 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_1_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_1_light.png b/res/drawable-mdpi/ic_wifi_lock_signal_1_light.png new file mode 100644 index 00000000000..eb41a107b6f Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_1_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_2.png b/res/drawable-mdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index 6034a89b6fc..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_2_dark.png b/res/drawable-mdpi/ic_wifi_lock_signal_2_dark.png new file mode 100644 index 00000000000..ada9739f54a Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_2_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_2_light.png b/res/drawable-mdpi/ic_wifi_lock_signal_2_light.png new file mode 100644 index 00000000000..ff041c42caa Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_2_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_3.png b/res/drawable-mdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index 0089a55d0c3..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_3_dark.png b/res/drawable-mdpi/ic_wifi_lock_signal_3_dark.png new file mode 100644 index 00000000000..0a294ff2d51 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_3_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_3_light.png b/res/drawable-mdpi/ic_wifi_lock_signal_3_light.png new file mode 100644 index 00000000000..98cf1ff8d79 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_3_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_4.png b/res/drawable-mdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index ae02f2428a8..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_4_dark.png b/res/drawable-mdpi/ic_wifi_lock_signal_4_dark.png new file mode 100644 index 00000000000..ccda2c7726c Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_4_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_4_light.png b/res/drawable-mdpi/ic_wifi_lock_signal_4_light.png new file mode 100644 index 00000000000..83af4de0677 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_lock_signal_4_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_1.png b/res/drawable-mdpi/ic_wifi_signal_1.png deleted file mode 100644 index e99a47d250e..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_signal_1.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_signal_1_dark.png b/res/drawable-mdpi/ic_wifi_signal_1_dark.png new file mode 100644 index 00000000000..6715c5d89d1 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_1_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_1_light.png b/res/drawable-mdpi/ic_wifi_signal_1_light.png new file mode 100644 index 00000000000..eec60c0a92d Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_1_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_2.png b/res/drawable-mdpi/ic_wifi_signal_2.png deleted file mode 100644 index 79516ea196f..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_signal_2.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_signal_2_dark.png b/res/drawable-mdpi/ic_wifi_signal_2_dark.png new file mode 100644 index 00000000000..e31d19f0489 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_2_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_2_light.png b/res/drawable-mdpi/ic_wifi_signal_2_light.png new file mode 100644 index 00000000000..7caa144d09a Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_2_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_3.png b/res/drawable-mdpi/ic_wifi_signal_3.png deleted file mode 100644 index f2af11d382e..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_signal_3.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_signal_3_dark.png b/res/drawable-mdpi/ic_wifi_signal_3_dark.png new file mode 100644 index 00000000000..bd6a1e8c039 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_3_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_3_light.png b/res/drawable-mdpi/ic_wifi_signal_3_light.png new file mode 100644 index 00000000000..7be25151736 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_3_light.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_4.png b/res/drawable-mdpi/ic_wifi_signal_4.png deleted file mode 100644 index 3d4288ea2c8..00000000000 Binary files a/res/drawable-mdpi/ic_wifi_signal_4.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wifi_signal_4_dark.png b/res/drawable-mdpi/ic_wifi_signal_4_dark.png new file mode 100644 index 00000000000..af125c2465b Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_4_dark.png differ diff --git a/res/drawable-mdpi/ic_wifi_signal_4_light.png b/res/drawable-mdpi/ic_wifi_signal_4_light.png new file mode 100644 index 00000000000..658761a41a6 Binary files /dev/null and b/res/drawable-mdpi/ic_wifi_signal_4_light.png differ diff --git a/res/drawable-mdpi/ic_wps.png b/res/drawable-mdpi/ic_wps.png deleted file mode 100644 index e522e9774a6..00000000000 Binary files a/res/drawable-mdpi/ic_wps.png and /dev/null differ diff --git a/res/drawable-mdpi/ic_wps_dark.png b/res/drawable-mdpi/ic_wps_dark.png new file mode 100644 index 00000000000..77d73a808cd Binary files /dev/null and b/res/drawable-mdpi/ic_wps_dark.png differ diff --git a/res/drawable-mdpi/ic_wps_light.png b/res/drawable-mdpi/ic_wps_light.png new file mode 100644 index 00000000000..ef560fa5c39 Binary files /dev/null and b/res/drawable-mdpi/ic_wps_light.png differ diff --git a/res/drawable-mdpi/nfc_payment_empty_state.png b/res/drawable-mdpi/nfc_payment_empty_state.png new file mode 100644 index 00000000000..28a1e31c962 Binary files /dev/null and b/res/drawable-mdpi/nfc_payment_empty_state.png differ diff --git a/res/drawable-mdpi/transparency.png b/res/drawable-mdpi/transparency.png new file mode 100644 index 00000000000..a915df31f23 Binary files /dev/null and b/res/drawable-mdpi/transparency.png differ diff --git a/res/drawable-nodpi/caption_background.jpg b/res/drawable-nodpi/caption_background.jpg new file mode 100644 index 00000000000..0c5503a0006 Binary files /dev/null and b/res/drawable-nodpi/caption_background.jpg differ diff --git a/res/drawable-nodpi/preview.png b/res/drawable-nodpi/preview.png index 10a7c9023cc..d06adc1988e 100644 Binary files a/res/drawable-nodpi/preview.png and b/res/drawable-nodpi/preview.png differ diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png index defdbb9c00b..45d93010dff 100644 Binary files a/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png and b/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png differ diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png index 582d0e19738..35ae2c86e3c 100644 Binary files a/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png and b/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png differ diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png index 9732dd7c556..06419a1d33a 100644 Binary files a/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png and b/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png differ diff --git a/res/drawable-xhdpi/appwidget_item_bg_pressed.9.png b/res/drawable-xhdpi/appwidget_item_bg_pressed.9.png index 3160e858c0f..80d9bfbee16 100644 Binary files a/res/drawable-xhdpi/appwidget_item_bg_pressed.9.png and b/res/drawable-xhdpi/appwidget_item_bg_pressed.9.png differ diff --git a/res/drawable-xhdpi/ic_appwidget_settings_gps_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_gps_off_holo.png deleted file mode 100644 index 0548274008f..00000000000 Binary files a/res/drawable-xhdpi/ic_appwidget_settings_gps_off_holo.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_appwidget_settings_gps_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_gps_on_holo.png deleted file mode 100644 index d1d97685d63..00000000000 Binary files a/res/drawable-xhdpi/ic_appwidget_settings_gps_on_holo.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png new file mode 100644 index 00000000000..dfaa6c30071 Binary files /dev/null and b/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png differ diff --git a/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png new file mode 100644 index 00000000000..bb00da6bf44 Binary files /dev/null and b/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png differ diff --git a/res/drawable-xhdpi/ic_grayedout_printer.png b/res/drawable-xhdpi/ic_grayedout_printer.png new file mode 100644 index 00000000000..5e54970d6b3 Binary files /dev/null and b/res/drawable-xhdpi/ic_grayedout_printer.png differ diff --git a/res/drawable-xhdpi/ic_menu_add.png b/res/drawable-xhdpi/ic_menu_add.png deleted file mode 100644 index 420510e935c..00000000000 Binary files a/res/drawable-xhdpi/ic_menu_add.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_menu_add_dark.png b/res/drawable-xhdpi/ic_menu_add_dark.png new file mode 100644 index 00000000000..6e2e18a04b9 Binary files /dev/null and b/res/drawable-xhdpi/ic_menu_add_dark.png differ diff --git a/res/drawable-xhdpi/ic_menu_add_light.png b/res/drawable-xhdpi/ic_menu_add_light.png new file mode 100644 index 00000000000..4109b2ca666 Binary files /dev/null and b/res/drawable-xhdpi/ic_menu_add_light.png differ diff --git a/res/drawable-xhdpi/ic_settings_home.png b/res/drawable-xhdpi/ic_settings_home.png new file mode 100644 index 00000000000..6a4d84a6826 Binary files /dev/null and b/res/drawable-xhdpi/ic_settings_home.png differ diff --git a/res/drawable-xhdpi/ic_settings_location.png b/res/drawable-xhdpi/ic_settings_location.png index 29ed43cd8a3..a3912a37553 100644 Binary files a/res/drawable-xhdpi/ic_settings_location.png and b/res/drawable-xhdpi/ic_settings_location.png differ diff --git a/res/drawable-xhdpi/ic_settings_nfc_payment.png b/res/drawable-xhdpi/ic_settings_nfc_payment.png new file mode 100644 index 00000000000..e4d81735451 Binary files /dev/null and b/res/drawable-xhdpi/ic_settings_nfc_payment.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_1.png b/res/drawable-xhdpi/ic_wifi_lock_signal_1.png deleted file mode 100644 index 8b8cb03d34e..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_lock_signal_1.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_1_dark.png b/res/drawable-xhdpi/ic_wifi_lock_signal_1_dark.png new file mode 100644 index 00000000000..c2be32fc681 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_1_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_1_light.png b/res/drawable-xhdpi/ic_wifi_lock_signal_1_light.png new file mode 100644 index 00000000000..57c8fb29c44 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_1_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_2.png b/res/drawable-xhdpi/ic_wifi_lock_signal_2.png deleted file mode 100644 index 411269c53b2..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_lock_signal_2.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_2_dark.png b/res/drawable-xhdpi/ic_wifi_lock_signal_2_dark.png new file mode 100644 index 00000000000..9e65730d0ab Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_2_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_2_light.png b/res/drawable-xhdpi/ic_wifi_lock_signal_2_light.png new file mode 100644 index 00000000000..db783f81c16 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_2_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_3.png b/res/drawable-xhdpi/ic_wifi_lock_signal_3.png deleted file mode 100644 index f0d92a05572..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_lock_signal_3.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_3_dark.png b/res/drawable-xhdpi/ic_wifi_lock_signal_3_dark.png new file mode 100644 index 00000000000..5a12175f5ab Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_3_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_3_light.png b/res/drawable-xhdpi/ic_wifi_lock_signal_3_light.png new file mode 100644 index 00000000000..8b7df74d8be Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_3_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_4.png b/res/drawable-xhdpi/ic_wifi_lock_signal_4.png deleted file mode 100644 index d26694d7af2..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_lock_signal_4.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_4_dark.png b/res/drawable-xhdpi/ic_wifi_lock_signal_4_dark.png new file mode 100644 index 00000000000..4d2942c69b3 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_4_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_4_light.png b/res/drawable-xhdpi/ic_wifi_lock_signal_4_light.png new file mode 100644 index 00000000000..bf26501a1b4 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_lock_signal_4_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_1.png b/res/drawable-xhdpi/ic_wifi_signal_1.png deleted file mode 100644 index 3fded085f44..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_signal_1.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_1_dark.png b/res/drawable-xhdpi/ic_wifi_signal_1_dark.png new file mode 100644 index 00000000000..bf1634cd122 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_1_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_1_light.png b/res/drawable-xhdpi/ic_wifi_signal_1_light.png new file mode 100644 index 00000000000..0f58f3d5f20 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_1_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_2.png b/res/drawable-xhdpi/ic_wifi_signal_2.png deleted file mode 100644 index 3a32026d33c..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_signal_2.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_2_dark.png b/res/drawable-xhdpi/ic_wifi_signal_2_dark.png new file mode 100644 index 00000000000..5345ff30b4d Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_2_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_2_light.png b/res/drawable-xhdpi/ic_wifi_signal_2_light.png new file mode 100644 index 00000000000..c5bcc7e6a93 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_2_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_3.png b/res/drawable-xhdpi/ic_wifi_signal_3.png deleted file mode 100644 index 161694093c2..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_signal_3.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_3_dark.png b/res/drawable-xhdpi/ic_wifi_signal_3_dark.png new file mode 100644 index 00000000000..8cc3a6ea1bb Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_3_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_3_light.png b/res/drawable-xhdpi/ic_wifi_signal_3_light.png new file mode 100644 index 00000000000..1cdacc5af08 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_3_light.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_4.png b/res/drawable-xhdpi/ic_wifi_signal_4.png deleted file mode 100644 index 8b256c32526..00000000000 Binary files a/res/drawable-xhdpi/ic_wifi_signal_4.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_4_dark.png b/res/drawable-xhdpi/ic_wifi_signal_4_dark.png new file mode 100644 index 00000000000..c9aa4e58110 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_4_dark.png differ diff --git a/res/drawable-xhdpi/ic_wifi_signal_4_light.png b/res/drawable-xhdpi/ic_wifi_signal_4_light.png new file mode 100644 index 00000000000..3cf1c8da2a7 Binary files /dev/null and b/res/drawable-xhdpi/ic_wifi_signal_4_light.png differ diff --git a/res/drawable-xhdpi/ic_wps.png b/res/drawable-xhdpi/ic_wps.png deleted file mode 100644 index 71308f213f9..00000000000 Binary files a/res/drawable-xhdpi/ic_wps.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_wps_dark.png b/res/drawable-xhdpi/ic_wps_dark.png new file mode 100644 index 00000000000..3ea4a3b6bcb Binary files /dev/null and b/res/drawable-xhdpi/ic_wps_dark.png differ diff --git a/res/drawable-xhdpi/ic_wps_light.png b/res/drawable-xhdpi/ic_wps_light.png new file mode 100644 index 00000000000..f913d2c00ea Binary files /dev/null and b/res/drawable-xhdpi/ic_wps_light.png differ diff --git a/res/drawable-xhdpi/nfc_payment_empty_state.png b/res/drawable-xhdpi/nfc_payment_empty_state.png new file mode 100644 index 00000000000..e66409084b3 Binary files /dev/null and b/res/drawable-xhdpi/nfc_payment_empty_state.png differ diff --git a/res/drawable-xhdpi/transparency.png b/res/drawable-xhdpi/transparency.png new file mode 100644 index 00000000000..0808625aeb1 Binary files /dev/null and b/res/drawable-xhdpi/transparency.png differ diff --git a/res/drawable-xxhdpi/appwidget_item_bg_pressed.9.png b/res/drawable-xxhdpi/appwidget_item_bg_pressed.9.png new file mode 100644 index 00000000000..a3427e85add Binary files /dev/null and b/res/drawable-xxhdpi/appwidget_item_bg_pressed.9.png differ diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png new file mode 100644 index 00000000000..d2fc839b137 Binary files /dev/null and b/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png differ diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png new file mode 100644 index 00000000000..893eb82a0e3 Binary files /dev/null and b/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png differ diff --git a/res/drawable-xxhdpi/ic_menu_add_dark.png b/res/drawable-xxhdpi/ic_menu_add_dark.png new file mode 100644 index 00000000000..5b4923fdabb Binary files /dev/null and b/res/drawable-xxhdpi/ic_menu_add_dark.png differ diff --git a/res/drawable-xxhdpi/ic_menu_add_light.png b/res/drawable-xxhdpi/ic_menu_add_light.png new file mode 100644 index 00000000000..767b8080127 Binary files /dev/null and b/res/drawable-xxhdpi/ic_menu_add_light.png differ diff --git a/res/drawable-xxhdpi/ic_settings_about.png b/res/drawable-xxhdpi/ic_settings_about.png new file mode 100644 index 00000000000..924d96264c1 Binary files /dev/null and b/res/drawable-xxhdpi/ic_settings_about.png differ diff --git a/res/drawable-xxhdpi/ic_settings_home.png b/res/drawable-xxhdpi/ic_settings_home.png new file mode 100644 index 00000000000..aac8773fda5 Binary files /dev/null and b/res/drawable-xxhdpi/ic_settings_home.png differ diff --git a/res/drawable-xxhdpi/ic_settings_location.png b/res/drawable-xxhdpi/ic_settings_location.png new file mode 100644 index 00000000000..72499efd316 Binary files /dev/null and b/res/drawable-xxhdpi/ic_settings_location.png differ diff --git a/res/drawable-xxhdpi/ic_settings_nfc_payment.png b/res/drawable-xxhdpi/ic_settings_nfc_payment.png new file mode 100644 index 00000000000..cdb495e8e86 Binary files /dev/null and b/res/drawable-xxhdpi/ic_settings_nfc_payment.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_dark.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_dark.png new file mode 100644 index 00000000000..20739fab9f8 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_light.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_light.png new file mode 100644 index 00000000000..c13edffdb1c Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_dark.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_dark.png new file mode 100644 index 00000000000..9cd652a4d4a Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_light.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_light.png new file mode 100644 index 00000000000..cb7f0c254c0 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_dark.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_dark.png new file mode 100644 index 00000000000..99097df39f2 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_light.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_light.png new file mode 100644 index 00000000000..a0961f4c6a9 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_dark.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_dark.png new file mode 100644 index 00000000000..6c00a9c9c15 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_light.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_light.png new file mode 100644 index 00000000000..74e1a40116f Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_1_dark.png b/res/drawable-xxhdpi/ic_wifi_signal_1_dark.png new file mode 100644 index 00000000000..b50fda532ae Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_1_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_1_light.png b/res/drawable-xxhdpi/ic_wifi_signal_1_light.png new file mode 100644 index 00000000000..f6fad9d94b1 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_1_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_2_dark.png b/res/drawable-xxhdpi/ic_wifi_signal_2_dark.png new file mode 100644 index 00000000000..f90602321b0 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_2_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_2_light.png b/res/drawable-xxhdpi/ic_wifi_signal_2_light.png new file mode 100644 index 00000000000..7f5859b40d0 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_2_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_3_dark.png b/res/drawable-xxhdpi/ic_wifi_signal_3_dark.png new file mode 100644 index 00000000000..ef40952905c Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_3_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_3_light.png b/res/drawable-xxhdpi/ic_wifi_signal_3_light.png new file mode 100644 index 00000000000..e3151b33f8b Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_3_light.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_4_dark.png b/res/drawable-xxhdpi/ic_wifi_signal_4_dark.png new file mode 100644 index 00000000000..13f94251153 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_4_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wifi_signal_4_light.png b/res/drawable-xxhdpi/ic_wifi_signal_4_light.png new file mode 100644 index 00000000000..96e25e5f5cf Binary files /dev/null and b/res/drawable-xxhdpi/ic_wifi_signal_4_light.png differ diff --git a/res/drawable-xxhdpi/ic_wps_dark.png b/res/drawable-xxhdpi/ic_wps_dark.png new file mode 100644 index 00000000000..8b38db86f79 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wps_dark.png differ diff --git a/res/drawable-xxhdpi/ic_wps_light.png b/res/drawable-xxhdpi/ic_wps_light.png new file mode 100644 index 00000000000..00841755b76 Binary files /dev/null and b/res/drawable-xxhdpi/ic_wps_light.png differ diff --git a/res/drawable-xxhdpi/nfc_payment_empty_state.png b/res/drawable-xxhdpi/nfc_payment_empty_state.png new file mode 100644 index 00000000000..a861b790f94 Binary files /dev/null and b/res/drawable-xxhdpi/nfc_payment_empty_state.png differ diff --git a/res/drawable-xxhdpi/transparency.png b/res/drawable-xxhdpi/transparency.png new file mode 100644 index 00000000000..5b61bac079f Binary files /dev/null and b/res/drawable-xxhdpi/transparency.png differ diff --git a/res/drawable/transparency_tileable.xml b/res/drawable/transparency_tileable.xml new file mode 100644 index 00000000000..0f676b11a1f --- /dev/null +++ b/res/drawable/transparency_tileable.xml @@ -0,0 +1,21 @@ + + + + diff --git a/res/drawable/wifi_signal.xml b/res/drawable/wifi_signal_dark.xml similarity index 93% rename from res/drawable/wifi_signal.xml rename to res/drawable/wifi_signal_dark.xml index 86c1ab09916..b578f47761b 100644 --- a/res/drawable/wifi_signal.xml +++ b/res/drawable/wifi_signal_dark.xml @@ -16,7 +16,7 @@ - - + + diff --git a/res/drawable/wifi_signal_light.xml b/res/drawable/wifi_signal_light.xml new file mode 100644 index 00000000000..f1f74e3105a --- /dev/null +++ b/res/drawable/wifi_signal_light.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/res/drawable/wifi_signal_lock_dark.xml b/res/drawable/wifi_signal_lock_dark.xml new file mode 100644 index 00000000000..37226a808aa --- /dev/null +++ b/res/drawable/wifi_signal_lock_dark.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/res/drawable/wifi_signal_lock_light.xml b/res/drawable/wifi_signal_lock_light.xml new file mode 100644 index 00000000000..bf2d3604c83 --- /dev/null +++ b/res/drawable/wifi_signal_lock_light.xml @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/res/drawable/wifi_signal_lock.xml b/res/drawable/wifi_signal_open_dark.xml similarity index 92% rename from res/drawable/wifi_signal_lock.xml rename to res/drawable/wifi_signal_open_dark.xml index 2ad6d91d260..d696983dc21 100644 --- a/res/drawable/wifi_signal_lock.xml +++ b/res/drawable/wifi_signal_open_dark.xml @@ -15,9 +15,9 @@ --> - - - - + + + + diff --git a/res/drawable/wifi_signal_open.xml b/res/drawable/wifi_signal_open_light.xml similarity index 92% rename from res/drawable/wifi_signal_open.xml rename to res/drawable/wifi_signal_open_light.xml index b506dd3349e..c54e9e93d78 100644 --- a/res/drawable/wifi_signal_open.xml +++ b/res/drawable/wifi_signal_open_light.xml @@ -15,9 +15,9 @@ --> - - - - + + + + diff --git a/res/layout-sw720dp/tab_widget.xml b/res/layout-sw720dp/tab_widget.xml index f591f38a855..80910c7be8d 100644 --- a/res/layout-sw720dp/tab_widget.xml +++ b/res/layout-sw720dp/tab_widget.xml @@ -25,8 +25,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:paddingStart="@*android:dimen/preference_fragment_padding_side" - android:paddingEnd="@*android:dimen/preference_fragment_padding_side" - style="?android:attr/tabWidgetStyle" /> - + style="?android:attr/tabWidgetStyle" + android:paddingStart="@dimen/settings_side_margin" + android:paddingEnd="@dimen/settings_side_margin" + /> diff --git a/res/layout/account_sync_screen.xml b/res/layout/account_sync_screen.xml index 4c1bf7ef50d..64697793e51 100644 --- a/res/layout/account_sync_screen.xml +++ b/res/layout/account_sync_screen.xml @@ -27,8 +27,8 @@ @@ -38,7 +38,7 @@ android:layout_height="0dip" android:layout_weight="1" android:clipToPadding="false" - android:scrollbarStyle="@*android:integer/preference_fragment_scrollbarStyle" /> + android:scrollbarStyle="outsideOverlay" /> + android:scrollbarStyle="@integer/preference_scrollbar_style"> - - - - - - - - - - - - - diff --git a/res/layout/captioning_preview.xml b/res/layout/captioning_preview.xml new file mode 100644 index 00000000000..00d94a0d8b6 --- /dev/null +++ b/res/layout/captioning_preview.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + diff --git a/res/layout/color_picker_item.xml b/res/layout/color_picker_item.xml new file mode 100644 index 00000000000..5599eb4796d --- /dev/null +++ b/res/layout/color_picker_item.xml @@ -0,0 +1,39 @@ + + + + + + + + + + diff --git a/res/layout/data_usage_summary.xml b/res/layout/data_usage_summary.xml index b754d0ca6c2..1cad64837b0 100644 --- a/res/layout/data_usage_summary.xml +++ b/res/layout/data_usage_summary.xml @@ -29,16 +29,17 @@ diff --git a/res/layout/empty_print_state.xml b/res/layout/empty_print_state.xml new file mode 100644 index 00000000000..6a82703162b --- /dev/null +++ b/res/layout/empty_print_state.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + diff --git a/res/layout/empty_printers_list_service_enabled.xml b/res/layout/empty_printers_list_service_enabled.xml new file mode 100644 index 00000000000..78c8b43ec5f --- /dev/null +++ b/res/layout/empty_printers_list_service_enabled.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/grid_picker_dialog.xml b/res/layout/grid_picker_dialog.xml new file mode 100644 index 00000000000..a52f0791ea6 --- /dev/null +++ b/res/layout/grid_picker_dialog.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/res/layout/installed_app_details.xml b/res/layout/installed_app_details.xml index b7f8f15b143..347c12b838f 100644 --- a/res/layout/installed_app_details.xml +++ b/res/layout/installed_app_details.xml @@ -21,7 +21,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" - android:scrollbarStyle="@*android:integer/preference_fragment_scrollbarStyle"> + android:scrollbarStyle="@integer/preference_scrollbar_style"> + + + + + + + + + + + + + diff --git a/res/layout/manage_accounts_screen.xml b/res/layout/manage_accounts_screen.xml index 3a2aa6a4614..12158b9c13c 100644 --- a/res/layout/manage_accounts_screen.xml +++ b/res/layout/manage_accounts_screen.xml @@ -28,7 +28,7 @@ android:layout_height="0dip" android:layout_weight="1" android:clipToPadding="false" - android:scrollbarStyle="@*android:integer/preference_fragment_scrollbarStyle" /> + android:scrollbarStyle="@integer/preference_scrollbar_style" /> + android:scrollbarStyle="@integer/preference_scrollbar_style" /> + + android:layoutDirection="ltr"> @@ -77,7 +81,7 @@ android:layout_width="0px" android:layout_height="wrap_content" android:layout_weight="1" - android:gravity="end" + android:gravity="right" android:textAppearance="?android:attr/textAppearanceSmallInverse" android:textColor="#000" android:singleLine="true" /> @@ -88,8 +92,6 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginStart="@*android:dimen/preference_fragment_padding_side" - android:layout_marginEnd="@*android:dimen/preference_fragment_padding_side" android:visibility="gone" android:gravity="center"> diff --git a/res/layout/manage_applications_content.xml b/res/layout/manage_applications_content.xml index 9e415a9dbdc..90b2cbab69b 100644 --- a/res/layout/manage_applications_content.xml +++ b/res/layout/manage_applications_content.xml @@ -35,8 +35,7 @@ android:layout_height="wrap_content" android:layout_gravity="top" android:textAppearance="@style/TextAppearance.PagerTabs" - android:paddingLeft="@dimen/pager_tabs_padding" - android:paddingRight="@dimen/pager_tabs_padding"> + android:padding="0dp"> diff --git a/res/layout/manage_applications_running.xml b/res/layout/manage_applications_running.xml index 0bc69fbc88c..352ce442e2e 100644 --- a/res/layout/manage_applications_running.xml +++ b/res/layout/manage_applications_running.xml @@ -27,8 +27,6 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_marginStart="@*android:dimen/preference_fragment_padding_side" - android:layout_marginEnd="@*android:dimen/preference_fragment_padding_side" android:visibility="gone" android:gravity="center"> diff --git a/res/layout/nfc_payment.xml b/res/layout/nfc_payment.xml new file mode 100644 index 00000000000..d6f9fa44f99 --- /dev/null +++ b/res/layout/nfc_payment.xml @@ -0,0 +1,45 @@ + + + + + + + + + diff --git a/res/layout/nfc_payment_option.xml b/res/layout/nfc_payment_option.xml new file mode 100644 index 00000000000..04fdc076c35 --- /dev/null +++ b/res/layout/nfc_payment_option.xml @@ -0,0 +1,51 @@ + + + + + + + + diff --git a/res/layout/power_usage_detail_item_text.xml b/res/layout/power_usage_detail_item_text.xml index fb8c705ce7f..9c9c72c0958 100644 --- a/res/layout/power_usage_detail_item_text.xml +++ b/res/layout/power_usage_detail_item_text.xml @@ -26,10 +26,13 @@ android:textAppearance="?android:attr/textAppearanceMedium" android:textStyle="bold" android:singleLine="true" + android:ellipsize="middle" android:layout_alignParentStart="true" + android:layout_toStartOf="@+id/value" android:layout_marginBottom="4dip" android:layout_marginTop="4dip" - android:layout_marginStart="4dip" /> + android:layout_marginStart="4dip" + android:layout_marginEnd="4dip"/> + android:scrollbarStyle="@integer/preference_scrollbar_style"> + android:paddingStart="@*android:dimen/preference_item_padding_side"> diff --git a/res/layout/preference_color.xml b/res/layout/preference_color.xml new file mode 100644 index 00000000000..de4b832e13b --- /dev/null +++ b/res/layout/preference_color.xml @@ -0,0 +1,22 @@ + + + + diff --git a/res/layout/preference_dialog_ringervolume.xml b/res/layout/preference_dialog_ringervolume.xml index 1643cabe082..2af1ba9f99e 100644 --- a/res/layout/preference_dialog_ringervolume.xml +++ b/res/layout/preference_dialog_ringervolume.xml @@ -51,26 +51,34 @@ + android:orientation="vertical"> - + android:paddingStart="8dip" + android:orientation="horizontal" + android:gravity="center_vertical"> + + + + + - @@ -159,36 +167,45 @@ - - + android:orientation="vertical"> - - + + + + android:paddingStart="8dip" + android:orientation="horizontal" + android:gravity="center_vertical"> + + + + + diff --git a/res/layout/preference_empty_list.xml b/res/layout/preference_empty_list.xml index 1c721ac9c2c..9faffe3224c 100644 --- a/res/layout/preference_empty_list.xml +++ b/res/layout/preference_empty_list.xml @@ -24,7 +24,6 @@ android:id="@+android:id/title" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="@*android:dimen/preference_fragment_padding_side" android:gravity="center" /> diff --git a/res/layout/preference_header_button_item.xml b/res/layout/preference_header_button_item.xml new file mode 100644 index 00000000000..ecbd14b024d --- /dev/null +++ b/res/layout/preference_header_button_item.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/preference_home_app.xml b/res/layout/preference_home_app.xml new file mode 100644 index 00000000000..841816171ef --- /dev/null +++ b/res/layout/preference_home_app.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + diff --git a/res/layout/preference_linearcolor.xml b/res/layout/preference_linearcolor.xml new file mode 100644 index 00000000000..d3a2603f241 --- /dev/null +++ b/res/layout/preference_linearcolor.xml @@ -0,0 +1,34 @@ + + + + + + + \ No newline at end of file diff --git a/res/layout/preference_widget_radiobutton.xml b/res/layout/preference_widget_radiobutton.xml new file mode 100644 index 00000000000..7f4ee958eb7 --- /dev/null +++ b/res/layout/preference_widget_radiobutton.xml @@ -0,0 +1,25 @@ + + + + + diff --git a/res/layout/preference_widget_wifi_signal.xml b/res/layout/preference_widget_wifi_signal.xml index 6df203c3abf..c2541a5f694 100644 --- a/res/layout/preference_widget_wifi_signal.xml +++ b/res/layout/preference_widget_wifi_signal.xml @@ -15,8 +15,8 @@ --> diff --git a/res/layout/preset_picker_item.xml b/res/layout/preset_picker_item.xml new file mode 100644 index 00000000000..0cafd347b65 --- /dev/null +++ b/res/layout/preset_picker_item.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + diff --git a/res/layout/print_job_summary.xml b/res/layout/print_job_summary.xml new file mode 100644 index 00000000000..d755de217fd --- /dev/null +++ b/res/layout/print_job_summary.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + diff --git a/res/layout/printer_dropdown_item.xml b/res/layout/printer_dropdown_item.xml new file mode 100644 index 00000000000..ad393b8e5fc --- /dev/null +++ b/res/layout/printer_dropdown_item.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/process_stats_details.xml b/res/layout/process_stats_details.xml new file mode 100644 index 00000000000..0de105418f8 --- /dev/null +++ b/res/layout/process_stats_details.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/layout/regulatory_info.xml b/res/layout/regulatory_info.xml index 478eaab09e7..8cd41571098 100755 --- a/res/layout/regulatory_info.xml +++ b/res/layout/regulatory_info.xml @@ -17,6 +17,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> @@ -38,8 +37,14 @@ android:text="@string/no_running_services" android:textAppearance="?android:attr/textAppearanceLarge" /> + + android:layoutDirection="ltr"> @@ -79,7 +83,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:focusable="true" - android:gravity="end|bottom" + android:gravity="right|bottom" android:textAppearance="?android:attr/textAppearanceSmallInverse" android:textColor="#000" android:singleLine="true" /> diff --git a/res/layout/running_service_details.xml b/res/layout/running_service_details.xml index 92ce07be9f7..f618bddb65d 100644 --- a/res/layout/running_service_details.xml +++ b/res/layout/running_service_details.xml @@ -21,7 +21,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" - android:scrollbarStyle="@*android:integer/preference_fragment_scrollbarStyle"> + android:scrollbarStyle="@integer/preference_scrollbar_style"> @@ -124,7 +123,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:src="@drawable/ic_menu_add" /> + android:src="?attr/ic_menu_add" /> + + + + + diff --git a/res/layout/title.xml b/res/layout/title.xml index 46b21150cc6..63030affd06 100644 --- a/res/layout/title.xml +++ b/res/layout/title.xml @@ -23,8 +23,8 @@ android:id="@+id/title_area" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="@*android:dimen/preference_fragment_padding_side" - android:layout_marginEnd="@*android:dimen/preference_fragment_padding_side" + android:layout_marginStart="@dimen/settings_side_margin" + android:layout_marginEnd="@dimen/settings_side_margin" android:minHeight="?android:attr/listPreferredItemHeight" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" diff --git a/res/layout/user_dictionary_add_word_fullscreen.xml b/res/layout/user_dictionary_add_word_fullscreen.xml index b72886f459b..42bd197f41b 100644 --- a/res/layout/user_dictionary_add_word_fullscreen.xml +++ b/res/layout/user_dictionary_add_word_fullscreen.xml @@ -14,63 +14,54 @@ limitations under the License. --> + android:id="@+id/user_dict_settings_add_dialog_top" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" > - + - + + + + + + + - - - - - - - + android:maxLength="@integer/maximum_user_dictionary_word_length" /> + diff --git a/res/layout/user_info_header.xml b/res/layout/user_info_header.xml index c698eaf5e3a..aeecc58eb9d 100644 --- a/res/layout/user_info_header.xml +++ b/res/layout/user_info_header.xml @@ -22,8 +22,8 @@ android:orientation="vertical" android:focusable="true" android:clickable="true" - android:paddingStart="@*android:dimen/preference_fragment_padding_side" - android:paddingEnd="@*android:dimen/preference_fragment_padding_side" > + android:paddingStart="@dimen/settings_side_margin" + android:paddingEnd="@dimen/settings_side_margin" > + android:maxLength="63" + android:imeOptions="flagForceAscii" /> + android:src="?attr/ic_wps" /> + + + + + + + + + + diff --git a/res/menu/vpn.xml b/res/menu/vpn.xml index dd8f64cbe0c..3e0a7880464 100644 --- a/res/menu/vpn.xml +++ b/res/menu/vpn.xml @@ -18,7 +18,7 @@ "Ligging" "Persoonlik" "Boodskappe" - "Toestel" + "Media" + "Toestel" "growwe ligging" @@ -267,6 +268,17 @@ "speel oudio" "lees knipbord" "verander knipbord" + "mediaknoppies" + "klankfokus" + "meestervolume" + "stemvolume" + "lui-volume" + "mediavolume" + "wekkervolume" + "kennisgewingvolume" + "bluetoothvolume" + "hou wakker" + "monitor ligging" "Ligging" @@ -300,12 +312,33 @@ "Speel oudio" "Lees knipbord" "Verander knipbord" + "Mediaknoppies" + "Oudiofokus" + "Meestervolume" + "Stemvolume" + "Luivolume" + "Mediavolume" + "Wekkervolume" + "Kennisgewingvolume" + "Bluetoothvolume" + "Hou wakker" + "Ligging" "Kort" "Medium" "Lank" + + "Dalvik" + "ART" + "ART (ontfout)" + + + "Gebruik Dalvik" + "Gebruik ART" + "Gebruik ART-ontfoutbou" + "Kontroleer nooit" "Kontroleer net vir DRM-inhoud" @@ -367,6 +400,11 @@ "Op skerm as reëls" "In adb-dop dumpsys gfxinfo" + + "Af" + "Wys oortrekareas" + "Wys oortrektoonbank" + "Standaardlimiet" "Geen agtergrondprosesse" diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 4c0c3d713fd..9b75efc09c3 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -275,8 +275,8 @@ "Jy het dataverbinding verloor omdat jy wegbeweeg het van jou tuisnetwerk af sonder om dataswerwing weer aan te skakel." "Skakel dit aan" "As jy dataswerwing toelaat, kan dit moontlik heelwat swerfkoste veroorsaak!" - "As jy dataswerwing toelaat, kan hoë swerwingskoste jou in die gesig staar! "\n\n"Hierdie instelling beïnvloed alle gebruikers op hierdie tablet." - "As jy dataswerwing toelaat, kan hoë swerwingskoste jou in die gesig staar! "\n\n"Hierdie instelling beïnvloed alle gebruikers op hierdie foon." + "As jy dataswerwing toelaat, kan hoë swerwingskoste jou in die gesig staar! \n\nHierdie instelling beïnvloed alle gebruikers op hierdie tablet." + "As jy dataswerwing toelaat, kan hoë swerwingskoste jou in die gesig staar! \n\nHierdie instelling beïnvloed alle gebruikers op hierdie foon." "Laat dataswerwing toe?" "Operateurkeuse" "Kies \'n netwerkoperateur" @@ -322,8 +322,8 @@ "Vereis \'n numeriese PIN of wagwoord om jou tablet te dekripteer elke keer as jy dit aanskakel" "Vereis \'n numeriese PIN of wagwoord om jou foon te dekripteer elke keer as jy dit aanskakel" "Geënkripteer" - "Jy kan jou rekeninge, instellings, afgelaaide programme en hul data, media, en ander lêers enkripteer. Sodra jy jou tablet geënkripteer het, moet jy elke keer \'n numeriese PIN of wagwoord invoer om dit te dekripteer wanneer jy dit aanskakel. Jy kan nie jou tablet dekripteer nie, behalwe deur \'n fabrieksterugstelling uit te voer, wat al jou data sal uitvee."\n\n"Enkripsie neem \'n uur of langer. Jy moet begin met \'n volgelaaide battery en jou tablet ingeprop hou tot enkripsie klaar is. As jy die enkripsieproses onderbreek, sal jy sommige van of al jou data verloor." - "Jy kan jou rekeninge, instellings, afgelaaide programme en hul data, media, en ander lêers enkripteer. Sodra jy jou foon geënkripteer het, moet jy elke keer \'n numeriese PIN of wagwoord invoer om dit te dekripteer wanneer jy dit aanskakel. Jy kan nie jou foon dekripteer nie, behalwe deur \'n fabrieksterugstelling uit te voer, wat al jou data sal uitvee."\n\n"Enkripsie neem \'n uur of langer. Jy moet begin met \'n volgelaaide battery en jou foon ingeprop hou tot enkripsie klaar is. As jy die enkripsieproses onderbreek, sal jy sommige van of al jou data verloor." + "Jy kan jou rekeninge, instellings, afgelaaide programme en hul data, media, en ander lêers enkripteer. Sodra jy jou tablet geënkripteer het, moet jy elke keer \'n numeriese PIN of wagwoord invoer om dit te dekripteer wanneer jy dit aanskakel. Jy kan nie jou tablet dekripteer nie, behalwe deur \'n fabrieksterugstelling uit te voer, wat al jou data sal uitvee.\n\nEnkripsie neem \'n uur of langer. Jy moet begin met \'n volgelaaide battery en jou tablet ingeprop hou tot enkripsie klaar is. As jy die enkripsieproses onderbreek, sal jy sommige van of al jou data verloor." + "Jy kan jou rekeninge, instellings, afgelaaide programme en hul data, media, en ander lêers enkripteer. Sodra jy jou foon geënkripteer het, moet jy elke keer \'n numeriese PIN of wagwoord invoer om dit te dekripteer wanneer jy dit aanskakel. Jy kan nie jou foon dekripteer nie, behalwe deur \'n fabrieksterugstelling uit te voer, wat al jou data sal uitvee.\n\nEnkripsie neem \'n uur of langer. Jy moet begin met \'n volgelaaide battery en jou foon ingeprop hou tot enkripsie klaar is. As jy die enkripsieproses onderbreek, sal jy sommige van of al jou data verloor." "Enkripteer tablet" "Enkripteer foon" "Laai jou battery en probeer weer." @@ -339,8 +339,8 @@ "Probeer weer oor ^1 sekondes." "Voer jou wagwoord in" "Enkripsie onsuksesvol" - "Enkripsie is onderbreek en kan nie voltooi word nie. Gevolglik is die data op jou tablet nie langer toeganklik nie. "\n\n" Om gebruik van jou tablet te hervat, moet jy \'n fabriekterugstelling doen. As jy jou tablet opstel na die terugstelling, sal jy \'n geleentheid kry om enige inligting te herstel wat na jou Google-rekening gerugsteun was." - "Enkripsie is onderbreek en kan nie voltooi word nie. Gevolglik is die data op jou selfoon nie langer toeganklik nie. "\n\n"Om gebruik van jou selfoon te hervat, moet jy \'n fabriekterugstelling doen. As jy jou foon na die terugstelling weer opstel, sal jy \'n geleentheid kry om enige inligting te herstel wat na jou Google-rekening gerugsteun was." + "Enkripsie is onderbreek en kan nie voltooi word nie. Gevolglik is die data op jou tablet nie langer toeganklik nie. \n\n Om gebruik van jou tablet te hervat, moet jy \'n fabriekterugstelling doen. As jy jou tablet opstel na die terugstelling, sal jy \'n geleentheid kry om enige inligting te herstel wat na jou Google-rekening gerugsteun was." + "Enkripsie is onderbreek en kan nie voltooi word nie. Gevolglik is die data op jou selfoon nie langer toeganklik nie. \n\nOm gebruik van jou selfoon te hervat, moet jy \'n fabriekterugstelling doen. As jy jou foon na die terugstelling weer opstel, sal jy \'n geleentheid kry om enige inligting te herstel wat na jou Google-rekening gerugsteun was." "Wissel invoermetode" "Kies skermslot" "Kies rugsteunslot" @@ -514,6 +514,7 @@ "Koppel tans" "Gekoppel" "Beskikbaar" + "In gebruik" "Vertooninstellings" "Ontkoppel?" "Dit sal jou verbinding met:<br><b>%1$s</b> beëindig." @@ -532,7 +533,7 @@ "Af" "Onbeskikbaar omdat NFC afgeskakel is" "Android Beam" - "Wanneer hierdie funksie aangeskakel is, kan jy programinhoud na \'n ander NFC-toestel oorsein deur die toestelle naby aan mekaar te hou. Jy kan byvoorbeeld blaaierbladsye, YouTube-video\'s, Mense-kontakte en meer oorsein. "\n" "\n"Bring bloot die toestelle bymekaar (gewoonlik rug teen rug) en raak dan aan jou skerm. Die program bepaal wat oorgesein word." + "Wanneer hierdie funksie aangeskakel is, kan jy programinhoud na \'n ander NFC-toestel oorsein deur die toestelle naby aan mekaar te hou. Jy kan byvoorbeeld blaaierbladsye, YouTube-video\'s, Mense-kontakte en meer oorsein. \n \nBring bloot die toestelle bymekaar (gewoonlik rug teen rug) en raak dan aan jou skerm. Die program bepaal wat oorgesein word." "Netwerkdiens-ontdekking" "Laat programme op ander toestelle toe om programme op hierdie toestel te ontdek" "Wi-Fi" @@ -620,7 +621,7 @@ "Beveilig met %1$s" ", beveilig met %1$s" "Geen" - "Om liggingsakkuraatheid te verbeter en vir ander doele, wil %1$s netwerkskandering aanskakel, selfs wanneer Wi-Fi af is."\n\n" Laat dit toe vir alle programme wat wil skandeer?" + "Om liggingsakkuraatheid te verbeter en vir ander doele, wil %1$s netwerkskandering aanskakel, selfs wanneer Wi-Fi af is.\n\n Laat dit toe vir alle programme wat wil skandeer?" "Laat toe" "Weier" "Koppel" @@ -632,8 +633,8 @@ "Kanselleer" "Slaan in elk geval oor" "Moenie oorslaan nie" - "LET WEL: Jy kan moontlik ekstra diensverskaffer-datakoste aangaan."\n\n"Tablet-opstelling kan beduidende netwerkaktiwiteit vereis." - "LET WEL: Jy kan moontlik ekstra diensverskaffer-datakoste aangaan."\n\n"Foon-opstelling kan beduidende netwerkaktiwiteit vereis." + "LET WEL: Jy kan moontlik ekstra diensverskaffer-datakoste aangaan.\n\nTablet-opstelling kan beduidende netwerkaktiwiteit vereis." + "LET WEL: Jy kan moontlik ekstra diensverskaffer-datakoste aangaan.\n\nFoon-opstelling kan beduidende netwerkaktiwiteit vereis." "LET WEL: Die tablet sal nie kan verifieer of jou sagteware op datum is totdat jy \'n internetverbinding het nie." "LET WEL: Die foon sal nie kan verifieer of jou sagteware op datum is todat jy \'n internetverbinding het nie." "Die tablet kon nie aan hierdie Wi-Fi-netwerk koppel nie." @@ -773,9 +774,9 @@ "SIM PIN" "Verkeerde PIN" "PIN\'e stem nie ooreen nie" - "Kan nie PIN verander nie."\n"Moontlik verkeerde PIN." + "Kan nie PIN verander nie.\nMoontlik verkeerde PIN." "SIM-PIN is suksesvol verander" - "Kan nie SIM-kaart se sluitstatus verander nie."\n"Moontlik \'n verkeerde PIN." + "Kan nie SIM-kaart se sluitstatus verander nie.\nMoontlik \'n verkeerde PIN." "OK" "Kanselleer" "Tabletstatus" @@ -918,9 +919,9 @@ "Fabrieksterugstelling" "Vee alle data op tablet uit" "Vee al die data op foon uit" - "Dit sal al die data uit jou tablet se ""interne geheue"" uitvee, insluitend: "\n\n
  • "jou Google-rekening"
  • \n" "
  • "stelsel- en programdata-instellings"
  • \n
  • "afgelaaide programme"
  • - "Dit sal al die data uit jou tablet se ""interne geheue"" uitvee, insluitend: "\n\n
  • "jou Google-rekening"
  • \n" "
  • "stelsel- en programdata-instellings"
  • \n
  • "afgelaaide programme"
  • - \n\n"Jy is tans aangemeld by die volgende rekeninge:"\n + "Dit sal al die data uit jou tablet se ""interne geheue"" uitvee, insluitend: \n\n"
  • "jou Google-rekening"
  • \n" "
  • "stelsel- en programdata-instellings"
  • \n
  • "afgelaaide programme"
  • + "Dit sal al die data uit jou tablet se ""interne geheue"" uitvee, insluitend: \n\n"
  • "jou Google-rekening"
  • \n" "
  • "stelsel- en programdata-instellings"
  • \n
  • "afgelaaide programme"
  • + \n\n"Jy is tans aangemeld by die volgende rekeninge:\n"
  • "Musiek"
  • \n
  • "Foto\'s"
  • \n
  • "Ander gebruikerdata"
  • \n\n"Om musiek, prente en ander gebruikersdata uit te vee, moet die ""USB-berging"" uitgevee word." \n\n"Om musiek, prente en ander gebruikersdata uit te vee, moet die ""SD-kaart"" uitgevee word." @@ -1105,7 +1106,7 @@ "Wys gekaste prosesse" "Stel programvoorkeure terug" "Stel programvoorkeure terug?" - "Dit sal alle voorkeure terugstel vir:"\n\n
  • "Gedeaktiveerde programme"
  • \n" "
  • "Gedeaktiveerde programkennisgewings"
  • \n" "
  • "Verstek programme vir aksies"
  • \n" "
  • "Agtergronddata-beperkings vir programme"
  • \n" "\n" Jy sal nie enige programdata verloor nie."
    + "Dit sal alle voorkeure terugstel vir:\n\n"
  • "Gedeaktiveerde programme"
  • \n" "
  • "Gedeaktiveerde programkennisgewings"
  • \n" "
  • "Verstek programme vir aksies"
  • \n" "
  • "Agtergronddata-beperkings vir programme"
  • \n" \n Jy sal nie enige programdata verloor nie."
    "Stel programme terug" "Bestuur spasie" "Filter" @@ -1240,9 +1241,7 @@ "Om te wissel, druk Control-spasiebalk" "Verstek" "Sleutelborduitlegte" - "Gebruikerwoordeboek" - "Persoonlike woordeboek" - "Persoonlike woordeboeke" + "Persoonlike woordeboek" "Voeg by" "Voeg by woordeboek" @@ -1303,6 +1302,11 @@ "Sluit opsie in die kragkieslys in vir die neem van \'n foutverslag" "Bly wakker" "Skerm sal nooit slaap terwyl laai nie" + "Aktiveer Bluetooth HCI-loerloglêer" + "Vang alle Bluetooth HCI-pakette in \'n lêer vas" + "Kies looptyd" + "Kies looptyd" + "Herlaai om looptyd van %1$s na %2$s te verander?" "Laat skynliggings toe" "Laat skynliggings toe" "Laat USB-ontfouting toe?" @@ -1315,11 +1319,13 @@ "Beskerm USB-berging" "Programme moet toestemming versoek om USB-berging te lees" "Beskerm USB-berging?" - "Wanneer USB-geheue beskerm word, moet programme toestemming versoek om data vanuit eksterne berging te lees."\n\n" Sommige programme werk dalk nie totdat dit deur hul ontwikkelaars opgedateer word.berging" + "Wanneer USB-geheue beskerm word, moet programme toestemming versoek om data vanuit eksterne berging te lees.\n\n Sommige programme werk dalk nie totdat dit deur hul ontwikkelaars opgedateer word.berging" "Beskerm SD-kaart" "Programme moet toestemming versoek om SD-kaart te lees" "Beskerm SD-kaart?" - "Wanneer die SD-kaart beskerm word, moet programme toestemming versoek om data vanuit eksterne berging te lees."\n\n"Sommige programme werk dalk nie totdat dit deur hul ontwikkelaars opgedateer word." + "Wanneer die SD-kaart beskerm word, moet programme toestemming versoek om data vanuit eksterne berging te lees.\n\nSommige programme werk dalk nie totdat dit deur hul ontwikkelaars opgedateer word." + "Plaaslike terminaal" + "Aktiveer terminaalprogram wat plaaslike skermtoegang bied" "Kies apparaat" "Kies legstuk" "Skep legstuk en laat toegang toe?" @@ -1340,11 +1346,11 @@ "Dienste" "Stelsel" "Vergrotingsgebare" - "Wanneer hierdie funksie aangeskakel is, kan jy in- en uitzoem deur die skerm te trippeltik."\n" "\n"Terwyl jy ingezoem is, kan jy:"\n
    • "Swenk: Sleep twee of meer vingers oor die skerm."
    • \n
    • "Verstel zoemvlak: Knyp twee of meer vingers saam of versprei hulle uitmekaar."
    \n\n"Jy kan ook dit wat onder jou vinger is tydelik vergroot deur die skerm te trippeltik-en-hou. In daardie vergroting kan jy jou vinger sleep om verskillende dele van die skerm te verken. Lig jou vinger om terug te keer na die vorige vergroting."\n\n"Let wel: trippeltik vir vergroting werk oral behalwe op die sleutelbord en navigasiebalk."
    + "Wanneer hierdie funksie aangeskakel is, kan jy in- en uitzoem deur die skerm te trippeltik.\n \nTerwyl jy ingezoem is, kan jy:\n"
    • "Swenk: Sleep twee of meer vingers oor die skerm."
    • \n
    • "Verstel zoemvlak: Knyp twee of meer vingers saam of versprei hulle uitmekaar."
    \n\n"Jy kan ook dit wat onder jou vinger is tydelik vergroot deur die skerm te trippeltik-en-hou. In daardie vergroting kan jy jou vinger sleep om verskillende dele van die skerm te verken. Lig jou vinger om terug te keer na die vorige vergroting.\n\nLet wel: trippeltik vir vergroting werk oral behalwe op die sleutelbord en navigasiebalk."
    "Toeganklikheid-kortpad" "Aan" "Af" - "Wanneer hierdie kenmerk aangeskakel is, kan jy toeganklikheidskenmerke vinnig met twee stappe aktiveer:"\n\n"Stap 1: Druk en hou die kragknoppie totdat jy \'n geluid hoor of \'n vibrasie voel."\n\n"Stap 2: Raak en hou met twee vingers totdat jy oudiobevestiging hoor."\n\n"As die toestel verskeie gebruikers het, sal hierdie kortpad op die sluitskerm tydelik toegang bied totdat die toestel ontsluit is." + "Wanneer hierdie kenmerk aangeskakel is, kan jy toeganklikheidskenmerke vinnig met twee stappe aktiveer:\n\nStap 1: Druk en hou die kragknoppie totdat jy \'n geluid hoor of \'n vibrasie voel.\n\nStap 2: Raak en hou met twee vingers totdat jy oudiobevestiging hoor.\n\nAs die toestel verskeie gebruikers het, sal hierdie kortpad op die sluitskerm tydelik toegang bied totdat die toestel ontsluit is." "Groot teks" "Skermvergroting" "Dateer outomaties skermvergroting op" @@ -1366,6 +1372,16 @@ "TalkBack bied gesproke terugvoer om blindes en gebruikers met swak sig te help. Wil jy dit gratis vanaf Android Market installeer?" "Geen beskrywing verskaf nie." "Instellings" + "Druk" + "Druk-instellings" + "Dienste" + "Gebruik %1$s?" + "%1$s kan dokumente ontvang wat jy druk. Sulke dokumente kan sensitiewe inligting bevat." + "Geen dienste geïnstalleer nie" + "Instellings" + "Voeg drukkers by" + "Aan" + "Af" "Battery" "Wat het die battery gebruik" "Batterygebruikdata is nie beskikbaar nie." @@ -1405,8 +1421,10 @@ "Wi-Fi aan" "Tablet" "Foon" - "Data gestuur" - "Data ontvang" + "Mobiele data gestuur" + "Mobiele data ontvang" + "Wi‑Fi-data gestuur" + "Wi‑Fi-data ontvang" "Oudio" "Video" "Tyd aan" @@ -1460,6 +1478,7 @@ "Toonhoogte" "Affekteer die klank van die gesproke teks" "Taal" + "Taal nie gekies nie" "Stel die taalspesifieke stem vir gesproke teks" "Luister na \'n voorbeeld" "Speel \'n kort demonstrasie van spraaksintese" @@ -1594,7 +1613,7 @@ "EAP word nie ondersteun nie" "Jy kan nie \'n EAP-Wi-Fi-verbinding tydens opstelling konfigureer nie. Na opstelling kan jy dit doen in Instellings, onder Wi-Fi en netwerke." "Verbinding kan \'n paar minute neem..." - "Raak ""Volgende"" om voort te gaan met opstelling."\n\n"Raak ""Terug"" om aan \'n ander Wi‑Fi-netwerk te koppel." + "Raak ""Volgende"" om voort te gaan met opstelling.\n\nRaak ""Terug"" om aan \'n ander Wi‑Fi-netwerk te koppel." "Sinkronisasie geaktiveer" "Sinkronisasie gedeaktiveer" "Sinkroniseerfout." @@ -1622,7 +1641,7 @@ "Gmail" "Kalender" "Kontakte" - "Welkom by Google Sync!"" "\n"\'n Google-benadering om data te sinchroniseer vir toegang tot al jou kontakte, afsprake en meer, ongeag waar jy is." + "Welkom by Google Sync!"" \n\'n Google-benadering om data te sinchroniseer vir toegang tot al jou kontakte, afsprake en meer, ongeag waar jy is." "Programsinkronisering-instellings" "Data en sinkronisering" "Verander wagwoord" @@ -1676,8 +1695,7 @@ "Flits aansigte binne die vensters wanneer dit met die GPU geskets is" "Wys hardewarelae se opdaterings" "Laat hardewarelae groen flits wanneer hulle opgedateer word" - "Wys GPU-oortrekking" - "Van die beste na die slegste: blou, groen, ligrooi, rooi" + "Ontfout GPU-oortrek" "Deaktiveer HW-oorleggers" "Gebruik altyd GPU vir skermsamestelling" "Aktiveer OpenGL-spore" @@ -1738,11 +1756,11 @@ "Deaktiveer agtergronddata op mobiele netwerke. Niesellulêre netwerke sal gebruik word, indien beskikbaar." "Om agtergronddata vir hierdie program te beperk, moet jy eers \'n mobieldatalimiet stel." "Beperk agtergronddata?" - "Hierdie funksie kan veroorsaak dat \'n program wat afhanklik is van agtergronddata, ophou werk wanneer slegs mobiele netwerke beskikbaar is."\n\n"Jy kan meer geskikte datagebruik-kontroles vind in die instellings wat in die program self beskikbaar is." + "Hierdie funksie kan veroorsaak dat \'n program wat afhanklik is van agtergronddata, ophou werk wanneer slegs mobiele netwerke beskikbaar is.\n\nJy kan meer geskikte datagebruik-kontroles vind in die instellings wat in die program self beskikbaar is." "Beperking van agtergronddata is moontlik slegs as jy \'n mobieldatalimiet gestel het." "Moet die outomatiese sinkronisering van data aangeskakel word?" - "Enige veranderings wat jy aan jou rekeninge op die web maak, sal outomaties na jou tablet gekopieer word."\n\n"Sommige rekeninge kan ook moontlik outomaties enige veranderinge wat jy op die tablet maak, na die web kopieer. \'n Google-rekening werk so."\n\n"Om te kies watter soort inligting binne elke rekening gesinkroniseer moet word, gaan na Instellings en Rekeninge." - "Enige veranderings wat jy aan jou rekeninge op die web maak, sal outomaties na jou foon gekopieer word."\n\n"Sommige rekeninge kan ook moontlik outomaties enige veranderinge wat jy op die foon maak, na die web kopieer. \'n Google-rekening werk so."\n\n"Om te kies watter soort inligting binne elke rekening gesinkroniseer moet word, gaan na Instellings en Rekeninge." + "Enige veranderings wat jy aan jou rekeninge op die web maak, sal outomaties na jou tablet gekopieer word.\n\nSommige rekeninge kan ook moontlik outomaties enige veranderinge wat jy op die tablet maak, na die web kopieer. \'n Google-rekening werk so.\n\nOm te kies watter soort inligting binne elke rekening gesinkroniseer moet word, gaan na Instellings en Rekeninge." + "Enige veranderings wat jy aan jou rekeninge op die web maak, sal outomaties na jou foon gekopieer word.\n\nSommige rekeninge kan ook moontlik outomaties enige veranderinge wat jy op die foon maak, na die web kopieer. \'n Google-rekening werk so.\n\nOm te kies watter soort inligting binne elke rekening gesinkroniseer moet word, gaan na Instellings en Rekeninge." "Moet die outomatiese sinkronisering van data afgeskakel word?" "Dit sal data- en batteryverbruik bespaar, maar jy sal elke rekening self moet sinkroniseer om onlangse inligting in te samel. En jy sal geen kennisgewings ontvang wanneer opdaterings plaasvind nie." "Gebruiksiklus-terugsteldatum" @@ -1751,12 +1769,12 @@ "Stel dataverbruik-waarskuwing" "Stel dataverbruik-limiet" "Beperk datagebruik" - "Jou mobiele dataverbinding sal gedeaktiveer word wanneer die gespesifiseerde limiet bereik word."\n\n"Aangesien die datagebruik deur jou tablet gemeet word en jou diensverskaffer dit dalk anders bereken, oorweeg dit maar om \'n konserwatiewe limiet te gebruik." - "Jou mobiele dataverbinding sal gedeaktiveer word wanneer die gespesifiseerde limiet bereik word."\n\n"Aangesien datagebruik deur jou foon gemeet word en jou diensverskaffer gebruik dalk anders bereken, oorweeg dit maar om \'n konserwatiewe limiet te gebruik." + "Jou mobiele dataverbinding sal gedeaktiveer word wanneer die gespesifiseerde limiet bereik word.\n\nAangesien die datagebruik deur jou tablet gemeet word en jou diensverskaffer dit dalk anders bereken, oorweeg dit maar om \'n konserwatiewe limiet te gebruik." + "Jou mobiele dataverbinding sal gedeaktiveer word wanneer die gespesifiseerde limiet bereik word.\n\nAangesien datagebruik deur jou foon gemeet word en jou diensverskaffer gebruik dalk anders bereken, oorweeg dit maar om \'n konserwatiewe limiet te gebruik." "Beperk agtergronddata?" "As jy mobiele data in die agtergrond beperk, sal sommige programme en dienste nie werk tensy jy aan \'n Wi-Fi-netwerk gekoppel is nie." - "As jy mobiele data in die agtergrond beperk, sal sommige programme en dienste nie werk tensy jy aan \'n Wi-Fi-netwerk gekoppel is nie."\n\n"Hierdie instelling beïnvloed alle gebruikers op hierdie tablet." - "As jy mobiele data in die agtergrond beperk, sal sommige programme en dienste nie werk tensy jy aan \'n Wi-Fi-netwerk gekoppel is nie."\n\n"Hierdie instelling beïnvloed alle gebruikers op hierdie foon." + "As jy mobiele data in die agtergrond beperk, sal sommige programme en dienste nie werk tensy jy aan \'n Wi-Fi-netwerk gekoppel is nie.\n\nHierdie instelling beïnvloed alle gebruikers op hierdie tablet." + "As jy mobiele data in die agtergrond beperk, sal sommige programme en dienste nie werk tensy jy aan \'n Wi-Fi-netwerk gekoppel is nie.\n\nHierdie instelling beïnvloed alle gebruikers op hierdie foon." "^1"" ""^2"\n"waarsku" "^1"" ""^2"\n"limiet" "Verwyderde programme" @@ -1843,8 +1861,8 @@ "Gebruiker" "Beperkte profiel" "Voeg nuwe gebruiker by" - "Jy kan hierdie toestel met ander mense deel deur bykomende gebruikers te skep. Elke gebruiker het sy eie ruimte, wat hulle met hul eie programme, muurpapier, ensovoorts kan pasmaak. Gebruikers kan ook tabletinstellings verstel wat almal affekteer, soos Wi-Fi."\n\n"Nadat jy \'n nuwe gebruiker geskep het, moet daardie persoon deur \'n opstelproses gaan."\n\n"Enige gebruiker kan opgedateerde programtoestemmings namens al die ander gebruikers aanvaar." - "Nadat jy \'n nuwe gebruiker geskep het, moet daardie persoon deur \'n opstelproses gaan."\n\n"Enige gebruiker kan opgedateerde programtoestemmings namens al die ander gebruikers aanvaar." + "Jy kan hierdie toestel met ander mense deel deur bykomende gebruikers te skep. Elke gebruiker het sy eie ruimte, wat hulle met hul eie programme, muurpapier, ensovoorts kan pasmaak. Gebruikers kan ook tabletinstellings verstel wat almal affekteer, soos Wi-Fi.\n\nNadat jy \'n nuwe gebruiker geskep het, moet daardie persoon deur \'n opstelproses gaan.\n\nEnige gebruiker kan opgedateerde programtoestemmings namens al die ander gebruikers aanvaar." + "Nadat jy \'n nuwe gebruiker geskep het, moet daardie persoon deur \'n opstelproses gaan.\n\nEnige gebruiker kan opgedateerde programtoestemmings namens al die ander gebruikers aanvaar." "Moet die gebruiker nou opgestel word?" "Maak seker dat die persoon beskikbaar is om die tablet te vat en hulle area op te stel" "Stel profiel nou op?" @@ -1875,6 +1893,9 @@ "Hierdie instelling beïnvloed alle gebruikers op hierdie foon." "Verander taal" "Verander lettergrootte" + "Beperkings" + "Verwyder beperkings" + "Verander PIN" "Wys kennisgewings" "Hulp" "Rekening vir die inhoud" diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml index 443bad2b1af..485369ff8b9 100644 --- a/res/values-am/arrays.xml +++ b/res/values-am/arrays.xml @@ -233,7 +233,8 @@ "መገኛ ስፍራ" "የግል" "መልዕክት መላኪያ" - "መሣሪያ" + "ማህደረ መረጃ" + "መሣሪያ"
    "ግምታዊ አካባቢ" @@ -267,6 +268,17 @@ "ድምጽ አጫውት" "ቅንጥብ መለያ አንብብ" "ቅንጥብ መለያ ቀይር" + "የሚዲያ አዝራሮች" + "የድምጽ ትኩረት" + "ዋናው ድምጽ መቆጣጠሪያ" + "የድምጽ መጠን" + "የደወል ድምጽ መጠን" + "የማህደረ መረጃ መጠን" + "የማንቂያ ድምፅ መጠን" + "የማሳወቂያ ድምጽ መጠን" + "የብሉቱዝ ድምፅ መጠን" + "እንደነቃ አቆይ" + "አካባቢን ይቆጣጠሩ" "አካባቢ" @@ -300,12 +312,33 @@ "ድምጽ አጫውት" "ቅንጥብ ሰሌዳ አንብብ" "ቅንጥብ መለያ ቀይር" + "የሚዲያ አዝራሮች" + "የድምጽ ትኩረት" + "ዋናው የድምጽ መቆጣጠሪያ" + "የድምጽ መጠን" + "የደወል ድምጽ መጠን" + "የማህደረ መረጃ ክፍልፍል" + "የማንቂያ ድምፅ መጠን" + "የማሳወቂያ ድምጽ መጠን" + "የብሉቱዝ ድምፅ መጠን" + "እንደነቃ አቆይ" + "አካባቢ" "አጭር" "መካከለኛ" "ረጅም" + + "Dalvik" + "ART" + "ART (ስህተት አርም)" + + + "Dalvik ይጠቀሙ" + "ART ይጠቀሙ" + "ART ስህተት የማረም ግንባታ ይጠቀሙ" + "በፍፁም አትመልከት" "የDRM ይዘት ብቻ ተመልከት" @@ -367,6 +400,11 @@ "ማያ ገጽ ላይ እንደ መስመሮች" "በ adb shell dumpsys gfxinfo ውስጥ" + + "ጠፍቷል" + "ስዕሉ አልፎ የፈሰሰባቸው አካባቢዎችን አሳይ" + "የአልፎ ፍሰት ቆጣሪውን አሳይ" + "መደበኛ ወሰኖች" "ምንም የዳራ ሂደቶች የሉም" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 90a7122c4cd..ab9afbbda03 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -275,8 +275,8 @@ "የውሂብዎ ተያያዥነት ጠፍቷል ምክንያቱም የቤትዎን አውታረመረብ በእንቅስቃሴ ላይ አጥፋተው በመተዎ ነው።" "አብራው" "የውሂብ ዝውውር በምትፈቅድበት ጊዜ፤ ላቅ ያለ የዝውውር ክፍያዎች ልትከፍልትችላለህ!" - "የውሂብ ዝውውር ሲፈቅዱ ጉልህ የሆኑ የውሂብ ዝውውር ክፍያዎች ሊደርስብዎት ይችላል!"\n\n"ይህ ቅንብር እዚህ ጡባዊ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" - "የውሂብ ዝውውር ሲፈቅዱ ጉልህ የሆኑ የውሂብ ዝውውር ክፍያዎች ሊደርስብዎት ይችላል!"\n\n"ይህ ቅንብር እዚህ ስልክ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" + "የውሂብ ዝውውር ሲፈቅዱ ጉልህ የሆኑ የውሂብ ዝውውር ክፍያዎች ሊደርስብዎት ይችላል!\n\nይህ ቅንብር እዚህ ጡባዊ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" + "የውሂብ ዝውውር ሲፈቅዱ ጉልህ የሆኑ የውሂብ ዝውውር ክፍያዎች ሊደርስብዎት ይችላል!\n\nይህ ቅንብር እዚህ ስልክ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" "የውሂብ ዝውውር ፍቀድ?" "የከዋኝ ምርጫ" "የአውታረ መረብ ከዋኝ ምረጥ" @@ -322,8 +322,8 @@ "ጡባዊዎን ባበሩ ቁጥር ለመፍታት የቁጥር PIN ወይም ይለፍ ቃል ጠይቅ" "ስልክዎን ባበሩ ቁጥር ለመፍታት የቁጥር PIN ወይም ይለፍ ቃል ጠይቅ" "ተመሳጥሯል" - "መለያዎችን፣ ቅንብሮች ፣የወረዱ መተግበሪያዎች እና የነሱን ውሂብ፣ማህደረ መረጃ ፣እና ሌላ ፋይሎች ማመሳጠር ይችላሉ። ጡባዊ ተኮዎን ምስጠራ አፈታት አንዴ ካደረጉ በኋላ፣በእያንዳንዱ ጊዜ ሲያበሩት ላለማመሳጠር የቁጥር ፒን ወይም የይለፍ ቃል መተየብ ያስፈልግዎታል፡- የፋብሪካው ውሂብ ዳግም አስጀምር በመተግበር በስተቀር ጡባዊ ተኮዎን አለማመሳጠር አይችሉም፤ሁሉንም ውሂብ በማጥፋት።"\n\n" ምስጠራ አንድ ሰዓት ወይም ከዛ በላይ ሊፈጅ ይችላል። በተሞላ ባትሪ መጀመር አለብዎ እና ምስጠራ እስኪጠናቀቅ ጡባዊ ተኮዎ እንደተሰካ ይሁን።የምስጠራውን ሂደት ካቋረጡ፣ውሂብዎን አንዳንዱን ወይም ሁሉንም ያጣሉ።" - "መለያዎችን፣ ቅንብሮች ፣የወረዱ መተግበሪያዎች እና የነሱን ውሂብ፣ማህደረ መረጃ ፣እና ሌላ ፋይሎች ማመሳጠር ትችላለህ። ስልክህን ምስጠራ አፈታት አንዴ ካደረክ በኋላ፣በእያንዳንዱ ጊዜ ስታበራው ላለማመሳጠር የቁጥር ፕን ወይም የይለፍ ቃል መተየብ ያስፈልግሃል። የፋብሪካው ውሂብ ዳግም አስጀምር በመተግበር በስተቀር ስልክህን አለማመሳጠር አትችልም፤ሁሉንም ውሂብ በማጥፋት።"\n\n" ምስጠራ አንድ ሰዓት ወይም ከዛ በላይ ሊፈጅ ይችላል። በተሞላ ባትሪ መጀመር አለብህ እና ምስጠራ እስኪጠናቀቅ ስልክህ እንደተሰካ ይሁን።የምስጠራውን ሂደት ካቋረጥክ፣ውሂብህን አንዳንዱን ወይም ሁሉንም ታጣለህ።" + "መለያዎችን፣ ቅንብሮች ፣የወረዱ መተግበሪያዎች እና የነሱን ውሂብ፣ማህደረ መረጃ ፣እና ሌላ ፋይሎች ማመሳጠር ይችላሉ። ጡባዊ ተኮዎን ምስጠራ አፈታት አንዴ ካደረጉ በኋላ፣በእያንዳንዱ ጊዜ ሲያበሩት ላለማመሳጠር የቁጥር ፒን ወይም የይለፍ ቃል መተየብ ያስፈልግዎታል፡- የፋብሪካው ውሂብ ዳግም አስጀምር በመተግበር በስተቀር ጡባዊ ተኮዎን አለማመሳጠር አይችሉም፤ሁሉንም ውሂብ በማጥፋት።\n\n ምስጠራ አንድ ሰዓት ወይም ከዛ በላይ ሊፈጅ ይችላል። በተሞላ ባትሪ መጀመር አለብዎ እና ምስጠራ እስኪጠናቀቅ ጡባዊ ተኮዎ እንደተሰካ ይሁን።የምስጠራውን ሂደት ካቋረጡ፣ውሂብዎን አንዳንዱን ወይም ሁሉንም ያጣሉ።" + "መለያዎችን፣ ቅንብሮች ፣የወረዱ መተግበሪያዎች እና የነሱን ውሂብ፣ማህደረ መረጃ ፣እና ሌላ ፋይሎች ማመሳጠር ትችላለህ። ስልክህን ምስጠራ አፈታት አንዴ ካደረክ በኋላ፣በእያንዳንዱ ጊዜ ስታበራው ላለማመሳጠር የቁጥር ፕን ወይም የይለፍ ቃል መተየብ ያስፈልግሃል። የፋብሪካው ውሂብ ዳግም አስጀምር በመተግበር በስተቀር ስልክህን አለማመሳጠር አትችልም፤ሁሉንም ውሂብ በማጥፋት።\n\n ምስጠራ አንድ ሰዓት ወይም ከዛ በላይ ሊፈጅ ይችላል። በተሞላ ባትሪ መጀመር አለብህ እና ምስጠራ እስኪጠናቀቅ ስልክህ እንደተሰካ ይሁን።የምስጠራውን ሂደት ካቋረጥክ፣ውሂብህን አንዳንዱን ወይም ሁሉንም ታጣለህ።" "ጡባዊ አመስጥር" "ስልክ አመስጥር" "እባክዎ ባትሪዎን ኃይል ይሙላ እና እንደገና ይሞክሩ።" @@ -339,8 +339,8 @@ "በ ^1ሰከንዶች ውስጥ እንደገና ሞክር።" "የይለፍቃልህን ተይብ" "ምስጠራ ስኬታማ አልነበረም" - "ማመስጠር ተቆራርጧል እና መጨረስ አይችልም። በመሆኑም፣ በጡባዊዎ ላይ ያለውን ውሂብ እስከነጭራሹ መድረስ አይቻልም። "\n\n" ጡባዊህን በመጠቀም ለመቀጠል፣ የፋብሪካ ዳግም አስጀምር ማከናወን አለብህ። ጡባዊህን ዳግም ካስጀመርክ በኋላ ስታዘጋጅ፣ ወደ Google መለያህ አስጠብቀህ የነበረውን ውሂብ እነበረበት ለመመለስ እድሉን ታገኛለህ።" - "ማመስጠር ተቆራርጧል እና መጨረስ አይችልም። በመሆኑም፣ በስልክህ ላይ ያለውን ውሂብ እስከነጭራሹ መድረስ አይቻልም። "\n\n" ስልክህን በመጠቀም ለመቀጠል፣ የፋብሪካ ዳግም አስጀምር ማከናወን አለብህ። ስልክህን ዳግም ካስጀመርክ በኋላ ስታዘጋጅ፣ ወደ Google መለያህ አስጠብቀህ የነበረውን ውሂብ እነበረበት ለመመለስ እድሉን ታገኛለህ።" + "ማመስጠር ተቆራርጧል እና መጨረስ አይችልም። በመሆኑም፣ በጡባዊዎ ላይ ያለውን ውሂብ እስከነጭራሹ መድረስ አይቻልም። \n\n ጡባዊህን በመጠቀም ለመቀጠል፣ የፋብሪካ ዳግም አስጀምር ማከናወን አለብህ። ጡባዊህን ዳግም ካስጀመርክ በኋላ ስታዘጋጅ፣ ወደ Google መለያህ አስጠብቀህ የነበረውን ውሂብ እነበረበት ለመመለስ እድሉን ታገኛለህ።" + "ማመስጠር ተቆራርጧል እና መጨረስ አይችልም። በመሆኑም፣ በስልክህ ላይ ያለውን ውሂብ እስከነጭራሹ መድረስ አይቻልም። \n\n ስልክህን በመጠቀም ለመቀጠል፣ የፋብሪካ ዳግም አስጀምር ማከናወን አለብህ። ስልክህን ዳግም ካስጀመርክ በኋላ ስታዘጋጅ፣ ወደ Google መለያህ አስጠብቀህ የነበረውን ውሂብ እነበረበት ለመመለስ እድሉን ታገኛለህ።" "የግቤት ስልት ቀይር" "ማሳያ ቆልፍ ምረጥ" "ምትኬ ቆላፊ ምረጥ" @@ -514,6 +514,7 @@ "በመገናኘት ላይ" "ተገናኝቷል" "የሚገኙ" + "በስራ ላይ ያሉ" "የማሳያ ቅንብሮች" "ግንኙነቱ ይቋረጥ?" "ይሄ ከዚህ ጋር ያለዎትን ግንኙነት ያስቆመዋል፦<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "ጠፍቷል" "NFC ስለጠፋ ማግኘት አይቻልም" "Android Beam" - "ይህ ባህሪ ሲበራ፣ የመተግበሪያ ይዘት ወደ ሌላ NFC-የሚችል መሳሪያ መሳሪያዎቹን አንድ ላይ አቀራርቦ በመያዝ ማብራት ትችላለህ፡፡ ለምሳሌ፣ የአሳሽ ገጾችን፣ YouTube ቪዲዮዎችን፣ የሰዎች ዕውቂያዎችን፣ እና በተጨማሪ"\n\n" ማብራት ትችላለህ፡፡ መሳሪያዎቹን ብቻ አንድ ላይ አቀራርበህ አምጣቸው (በተለምዶ ጀርባ ለጀርባ) እናም በመቀጠል ማያህን ንካ፡፡ መተግበሪያው ምን መብራት እንዳለበት ራሱ ይወስናል፡፡" + "ይህ ባህሪ ሲበራ፣ የመተግበሪያ ይዘት ወደ ሌላ NFC-የሚችል መሳሪያ መሳሪያዎቹን አንድ ላይ አቀራርቦ በመያዝ ማብራት ትችላለህ፡፡ ለምሳሌ፣ የአሳሽ ገጾችን፣ YouTube ቪዲዮዎችን፣ የሰዎች ዕውቂያዎችን፣ እና በተጨማሪ\n\n ማብራት ትችላለህ፡፡ መሳሪያዎቹን ብቻ አንድ ላይ አቀራርበህ አምጣቸው (በተለምዶ ጀርባ ለጀርባ) እናም በመቀጠል ማያህን ንካ፡፡ መተግበሪያው ምን መብራት እንዳለበት ራሱ ይወስናል፡፡" "የአውታረ መረብ ማግኘት" "ሌሎች መሣሪያዎች ላይ ያሉ መተግበሪያዎች በዚህ መሣሪያ ላይ ያሉ መተግበሪያዎች እንዲያገኙ ይፈቅድላቸዋል" "Wi‑Fi" @@ -620,7 +621,7 @@ "በ %1$s የተጠበቀ" "፣ በ%1$s የተጠበቀ" "የለም" - "%1$s የአካባቢ ትክክለኛነትን ለማሻሻል እና ለሌሎች ዓላማዎች የአውታረ መረብ መቃኘትን ማብራት ይፈልጋል፣ Wi-Fi ጠፍቶ ቢሆንም እንኳ።"\n\n"ይሄ ለሁሉም መቃኘት ለሚፈልጉ መተግበሪያዎች ይፈቀድ?" + "%1$s የአካባቢ ትክክለኛነትን ለማሻሻል እና ለሌሎች ዓላማዎች የአውታረ መረብ መቃኘትን ማብራት ይፈልጋል፣ Wi-Fi ጠፍቶ ቢሆንም እንኳ።\n\nይሄ ለሁሉም መቃኘት ለሚፈልጉ መተግበሪያዎች ይፈቀድ?" "ፍቀድ" "ከልክል" "አያይዝ" @@ -632,8 +633,8 @@ "ይቅር" "ለማንኛውም ዝለለ" "አትዝለል" - "ማስጠንቀቂያ፦ ተጨማሪ የድምጸ ሞደም ተያያዥ ውሂብ ክፍያዎች ሊከሰትብዎ ይችላል።"\n\n"ጡባዊን ማዋቀር ጉልህ የሆነ የአውታረ መረብ እንቅስቃሴ ሊያስፈልገው ይችላል።" - "ማስጠንቀቂያ፦ ተጨማሪ የድምጸ ሞደም ተያያዥ ውሂብ ክፍያዎች ሊከሰትብዎ ይችላል።"\n\n"ስልክን ማዋቀር ጉልህ የሆነ የአውታረ መረብ እንቅስቃሴ ሊያስፈልገው ይችላል።" + "ማስጠንቀቂያ፦ ተጨማሪ የድምጸ ሞደም ተያያዥ ውሂብ ክፍያዎች ሊከሰትብዎ ይችላል።\n\nጡባዊን ማዋቀር ጉልህ የሆነ የአውታረ መረብ እንቅስቃሴ ሊያስፈልገው ይችላል።" + "ማስጠንቀቂያ፦ ተጨማሪ የድምጸ ሞደም ተያያዥ ውሂብ ክፍያዎች ሊከሰትብዎ ይችላል።\n\nስልክን ማዋቀር ጉልህ የሆነ የአውታረ መረብ እንቅስቃሴ ሊያስፈልገው ይችላል።" "ማስጠንቀቂያ: የበይነመረብ ግንኙነት እስኪኖርዎት ድረስ ሶፍትዌርዎ የዘመነ መሆኑን ታብሌቱ ማረጋገጥ አይችልም።" "ማስጠንቀቂያ: የበይነመረብ ግንኙነት እስኪኖርዎት ድረስ ሶፍትዌርዎ የዘመነ መሆኑን ስልኩ ማረጋገጥ አይችልም።" "ጡባዊው ከዚህ የWi-Fi አውታረ መረብ ጋር መገናኘት አልቻለም።" @@ -773,9 +774,9 @@ "SIM PIN" "የተሳሳተ ፒን!" "ፒኖቹ አይዛመዱም" - "ፒን መለወጥ አይቻልም::"\n" ምናልባት ልክ ያልኾነ ፒን ሊሆን ይችላል::" + "ፒን መለወጥ አይቻልም::\n ምናልባት ልክ ያልኾነ ፒን ሊሆን ይችላል::" "SIM PIN በተሳካ ተለውጧል" - "የሲም ካርድን ቆልፍ ሁኔታ ለመለወጥ አይቻልም። "\n" የተሳሳተ ፒን ሊሆን ይችላል።" + "የሲም ካርድን ቆልፍ ሁኔታ ለመለወጥ አይቻልም። \n የተሳሳተ ፒን ሊሆን ይችላል።" "እሺ" "ይቅር" "የጡባዊ ኹነታ" @@ -918,11 +919,11 @@ "የፋብሪካ ውሂብ ዳግም አስጀምር" "በስልኩ ላይ ያለ ውሂብ ሁሉ ያጠፋል" "በስልኩ ላይ ያለውን ውሂብ ሁሉ አጥፋ" - "ይህ ከእርስዎ ጡባዊ ""ውስጣዊ ማከማቻ"" የሚከተሉትን ጨምሮ:"\n\n
  • "የእርስዎ Google መለያ"
  • \n
  • "ሥርዓት እና መተግበሪያ ውሂብ እና ቅንብሮች"
  • \n
  • "የወረዱ መተግበሪያዎች"
  • " ላይ ያሉ ሁሉንም ውሂብ ይሰርዛል።"
    - "ይህ ከእርስዎ ጡባዊ ""ውስጣዊ ማከማቻ"" የሚከተሉትን ጨምሮ:"\n\n
  • "የእርስዎ Google መለያ"
  • \n
  • "ሥርዓት እና መተግበሪያ ውሂብ እና ቅንብሮች"
  • \n
  • "የወረዱ መተግበሪያዎች"
  • " ላይ ያሉ ሁሉንም ውሂብ ይሰርዛል።"
    - \n\n" እርስዎ በአሁን ጊዜ የሚከተለው መለያዎች ውስጥ ገብተዋል፡"\n + "ይህ ከእርስዎ ጡባዊ ""ውስጣዊ ማከማቻ"" የሚከተሉትን ጨምሮ:\n\n"
  • "የእርስዎ Google መለያ"
  • \n
  • "ሥርዓት እና መተግበሪያ ውሂብ እና ቅንብሮች"
  • \n
  • "የወረዱ መተግበሪያዎች"
  • " ላይ ያሉ ሁሉንም ውሂብ ይሰርዛል።"
    + "ይህ ከእርስዎ ጡባዊ ""ውስጣዊ ማከማቻ"" የሚከተሉትን ጨምሮ:\n\n"
  • "የእርስዎ Google መለያ"
  • \n
  • "ሥርዓት እና መተግበሪያ ውሂብ እና ቅንብሮች"
  • \n
  • "የወረዱ መተግበሪያዎች"
  • " ላይ ያሉ ሁሉንም ውሂብ ይሰርዛል።"
    + \n\n" እርስዎ በአሁን ጊዜ የሚከተለው መለያዎች ውስጥ ገብተዋል፡\n"
  • "ሙዚቃ"
  • \n
  • "ፎቶዎች"
  • \n
  • "ሌላ የተጠቃሚ ውሂብ"
  • - "ሙዚቃ፣ ምስሎች፣ እና ሌላ ተጠቃሚ ውሂብ "\n\n"ለማጥራት፣""USBማከማቻ"" መጥፋት ያስፈልገዋል።" + "ሙዚቃ፣ ምስሎች፣ እና ሌላ ተጠቃሚ ውሂብ \n\nለማጥራት፣""USBማከማቻ"" መጥፋት ያስፈልገዋል።" \n\n" ሙዚቃ፣ ምስሎች፣ እና ሌላ ተጠቃሚ ውሂብ ለማጥራት፣"" የSD ካርድ ""መጥፋት ያስፈልገዋል።" "USB ማከማቻ አጥፋ" "የSD ካርድ አጥፋ" @@ -1105,7 +1106,7 @@ "የተሸጎጡ ሂደቶችን አሳይ" "የመተግበሪያዎች ምርጫዎችን ዳግም አስጀምር" "የመተግበሪያዎች ምርጫዎች ዳግም ይጀመሩ?" - "ይሄ የእነዚህን ሁሉ ምርጫዎች ዳግም ያስጀምራል፦"\n\n" "
  • "የተሰናከሉ መተግበሪያዎች"
  • \n" "
  • "የተሰናከሉ የመተግበሪያዎች ማሳወቂያዎች"
  • \n" "
  • "የእርምጃዎች ነባሪ መተግበሪያዎች"
  • \n" "
  • "የመተግበሪያዎች የጀርባ ውሂብ ገደቦች"
  • \n\n" ምንም የመተግበሪያ ውሂብ አታጣም።"
    + "ይሄ የእነዚህን ሁሉ ምርጫዎች ዳግም ያስጀምራል፦\n\n "
  • "የተሰናከሉ መተግበሪያዎች"
  • \n" "
  • "የተሰናከሉ የመተግበሪያዎች ማሳወቂያዎች"
  • \n" "
  • "የእርምጃዎች ነባሪ መተግበሪያዎች"
  • \n" "
  • "የመተግበሪያዎች የጀርባ ውሂብ ገደቦች"
  • \n\n" ምንም የመተግበሪያ ውሂብ አታጣም።"
    "መተግበሪያዎችን ዳግም አስጀምር" "ባዶ ቦታ አደራጅ" "አጣራ" @@ -1240,9 +1241,7 @@ "ለመቀየር፣ Control-Spacebar ተጫን" "ነባሪ" "የቁልፍ ሰሌዳ አቀማመጥ" - "የተጠቃሚ መዝገበ ቃላት" - "የግል መዝገበ ቃላት" - "የግል መዝገበ ቃላቶች" + "የግል መዝገበ-ቃላት" "አክል" "ወደ መዝገበ ቃላት አክል" @@ -1303,6 +1302,11 @@ "የሳንካ ሪፖርት ለመውሰድ የኃይል ምናሌ ውስጥ አማራጩን ያካትቱ" "ነቅተህ ቆይ" "ማያኃይል በመሙላት ላይበፍፁም አይተኛም" + "የብሉቱዝ HCI ስለላ ምዝግብ ማስታወሻን ያንቁ" + "በአንድ ፋይል ውስጥ ያሉትን የብሉቱዝ HCI እሽጎች ይቅረጹ" + "የሚፈጀውን ጊዜ ይምረጡ" + "የሚፈጀውን ጊዜ ይምረጡ" + "የሚፈጀውን ጊዜ ከ%1$s ወደ %2$s ለመለወጥ ዳግም ይጀምር?" "አስቂኝ ሥፍራዎችን ፍቀድ" "አስቂኝ ሥፍራዎችን ፍቀድ" "የUSB ማረሚያ ይፈቀድ?" @@ -1315,11 +1319,13 @@ "የUSB ማከማቻ ጠብቅ" "መተግበሪያዎች የUSB ማከማቻ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው" "የUSB ማከማቻ ይጠበቅ?" - "የUSB ማከማቻ የተጠበቀ ሲሆን መተግበሪያዎች ከውጫዊ ማከማቻ ውሂብ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው።"\n\n"አንዳንድ መተግበሪያዎች በገንቢዎቻቸው እስኪዘመኑ ድረስ ላይሰሩ ይችላሉ።" + "የUSB ማከማቻ የተጠበቀ ሲሆን መተግበሪያዎች ከውጫዊ ማከማቻ ውሂብ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው።\n\nአንዳንድ መተግበሪያዎች በገንቢዎቻቸው እስኪዘመኑ ድረስ ላይሰሩ ይችላሉ።" "የSD ካርድ ጠብቅ" "መተግበሪያዎች የSD ካርድ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው" "የSD ካርድ ይጠበቅ?" - "የSD ካርድ የተጠበቀ ሲሆን መተግበሪያዎች ከውጫዊ ማከማቻ ውሂብ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው።"\n\n"አንዳንድ መተግበሪያዎች በገንቢዎቻቸው እስኪዘመኑ ድረስ ላይሰሩ ይችላሉ።" + "የSD ካርድ የተጠበቀ ሲሆን መተግበሪያዎች ከውጫዊ ማከማቻ ውሂብ እንዲያነቡ ፍቃድ መጠየቅ አለባቸው።\n\nአንዳንድ መተግበሪያዎች በገንቢዎቻቸው እስኪዘመኑ ድረስ ላይሰሩ ይችላሉ።" + "አካባቢያዊ ተርሚናል" + "የአካባቢያዊ ሼል መዳረሻ የሚያቀርብ የተርሚናል መተግበሪያ አንቃ" "መሣሪያ ምረጥ" "ፍርግም ምረጥ" "አዲስ ምግብር ፍጠር አና መዳረሻ ፍቀድለት?" @@ -1340,11 +1346,11 @@ "አገልግሎቶች" "ስርዓት" "የማጉላት ምልክቶች" - "ይሄ ባህሪ ሲበራ ማያ ገጹን ሶስቴ መታ በማድረግ ማጉላት እና ማሳነስ ይችላሉ።"\n\n"አጉልተው ሳሉ እነኚህን ማድረግ ይችላሉ፦"\n
    • "ማንፏቀቅ፦ በማያ ገጹ ላይ ሁለት ወይም ተጨማሪ ጣቶችን ይጎትቱ።"
    • \n
    • "የአጉላ ደረጃን ማስተካከል፦ በሁለት ወይም ተጨማሪ ጣቶች ይቆንጥጡ ወይም ጣቶችዎን ይበትኗቸው።"
    \n\n"እንዲሁም ሶስቴ መታ በማድረግና በመያዝ ከጣትዎ ስር ያለውን በጊዜያዊነት ማጉላት ይችላሉ። በዚህ የማጉላት ሁኔታ ላይ የማያ ገጹ የተለያዩ ክፍሎችን ለማሰስ ጣትዎን መጎተት ይችላሉ። ወደ ቀዳሚ ሁኔታዎን ለመመለስ ጣትዎን ያንሱ።"\n\n"ማስታወሻ፦ ከቁልፍ ሰሌዳው እና የአሰሳ አሞሌው በስተቀር ለማጉላት ሶስቴ መታ ማድረግ በሁሉም ቦታ ላይ ይሰራል።"
    + "ይሄ ባህሪ ሲበራ ማያ ገጹን ሶስቴ መታ በማድረግ ማጉላት እና ማሳነስ ይችላሉ።\n\nአጉልተው ሳሉ እነኚህን ማድረግ ይችላሉ፦\n"
    • "ማንፏቀቅ፦ በማያ ገጹ ላይ ሁለት ወይም ተጨማሪ ጣቶችን ይጎትቱ።"
    • \n
    • "የአጉላ ደረጃን ማስተካከል፦ በሁለት ወይም ተጨማሪ ጣቶች ይቆንጥጡ ወይም ጣቶችዎን ይበትኗቸው።"
    \n\n"እንዲሁም ሶስቴ መታ በማድረግና በመያዝ ከጣትዎ ስር ያለውን በጊዜያዊነት ማጉላት ይችላሉ። በዚህ የማጉላት ሁኔታ ላይ የማያ ገጹ የተለያዩ ክፍሎችን ለማሰስ ጣትዎን መጎተት ይችላሉ። ወደ ቀዳሚ ሁኔታዎን ለመመለስ ጣትዎን ያንሱ።\n\nማስታወሻ፦ ከቁልፍ ሰሌዳው እና የአሰሳ አሞሌው በስተቀር ለማጉላት ሶስቴ መታ ማድረግ በሁሉም ቦታ ላይ ይሰራል።"
    "የተደራሽነት አቋራጭ" "በርቷል" "ጠፍቷል" - "ይህ ባህሪ ሲበራ የተደራሽነት ባህሪያትን በፍጥነት በሁለት ደረጃዎች ሊያነቁ ይችላሉ፦"\n\n"ደረጃ 1፦ ድምጽ እስኪሰሙ ወይም ንዝረት እስኪሰማዎት ድረስ የኃይል አዝራሩን ተጭነው ይያዙ።"\n\n"ደረጃ 2፦ የድምጽ ማረጋገጫ እስኪሰሙ ድረስ በሁለት ጣቶች ይንኩና ይያዙ።"\n\n"መሣሪያው በርካታ ተጠቃሚዎች ካሉት ይህንን አቋራጭ በመቆለፊያ ማያ ገጹ ላይ መጠቀም ተደራሽነትን በጊዜያዊነት መሣሪያው እስኪከፈት ድረስ ያነቃዋል።" + "ይህ ባህሪ ሲበራ የተደራሽነት ባህሪያትን በፍጥነት በሁለት ደረጃዎች ሊያነቁ ይችላሉ፦\n\nደረጃ 1፦ ድምጽ እስኪሰሙ ወይም ንዝረት እስኪሰማዎት ድረስ የኃይል አዝራሩን ተጭነው ይያዙ።\n\nደረጃ 2፦ የድምጽ ማረጋገጫ እስኪሰሙ ድረስ በሁለት ጣቶች ይንኩና ይያዙ።\n\nመሣሪያው በርካታ ተጠቃሚዎች ካሉት ይህንን አቋራጭ በመቆለፊያ ማያ ገጹ ላይ መጠቀም ተደራሽነትን በጊዜያዊነት መሣሪያው እስኪከፈት ድረስ ያነቃዋል።" "ትልቅ ፅሁፍ" "ማጉሊያ" "ማጉላትን በራስ-አዘምን" @@ -1366,6 +1372,16 @@ "TalkBack ማየት ለተሳናቸው እና ዝቅተኛ የማየት አቅም ላላቸው ተጠቃሚዎች የንግግር ግብረ መልስ ያቀርባል፡፡ በነጻ ከ Android Market ልትጭነው ትፈልጋለህ?" "ምንም መግለጫ አልቀረበም።" "ቅንብሮች" + "ማተም" + "የህትመት ቅንብሮች" + "አገልግሎቶች" + "%1$s ይጠቀሙ?" + "%1$s የሚያትሟቸውን ሰነዶች መቀበል ይችላል። እንደዚህ ያሉ ሰነዶች ሚስጥራዊ ውሂብ ሊይዙ ይችላሉ።" + "ምንም አገልግሎቶች አልተጫኑም" + "ቅንብሮች" + "አታሚዎችን ያክሉ" + "በርቷል" + "ጠፍቷል" "ባትሪ" "ባትሪውን ምን እየተጠቀመበት ነበር" "የባትሪ አጠቃቀም ውሂብ የለም።" @@ -1405,8 +1421,10 @@ "Wi-Fiን በማስኬድ ላይ" "ጡባዊ" "ስልክ" - "ውሂብ ተልኳል" - "ውሂብ ተቀብሏል" + "የሞባይል ውሂብ ተልኳል" + "የሞባይል ውሂብ ደርሷል" + "የWi‑Fi ውሂብ ተልኳል" + "የWi‑Fi ውሂብ ደርሷል" "ኦዲዮ" "ቪዲዮ" "በሰዓቱ" @@ -1460,6 +1478,7 @@ "ቅላፄ" "የሚነገረው ፅሁፍ ድምፅ ላይ ተፅዕኖ ያሳድራል" "ቋንቋ" + "ቋንቋ አልተመረጠም" "ለሚነገረው ፅሁፍ ቋንቋ-ተኮር ድምፅ አዘጋጅ" "ምሳሌውን አዳምጥ" "አጭር የንግግር ልምምድ ማሳያ አጫውት" @@ -1594,7 +1613,7 @@ "EAP አይደገፍም::" "በማዋቀር ላይ ሳሉ የEAP Wi-Fi ግንኙነት ማዋቀር አይችሉም። ካዋቀሩ በኋላ ያንን በቅንብሮች > ገመድ አልባ እና አውታረ መረቦች ውስጥ ማድረግ ይችላሉ።" "ማገናኘቱ የተወሰነ ደቂቃ ሊወስድ ይችላል..." - "ማዋቀሩን ለመቀጠል ""ቀጣይ""ን ይንኩ።"\n\n"ከተለየ የWi-Fi አውታረ መረብ ጋር ለመገናኘት ""ተመለስ""ን ይንኩ።" + "ማዋቀሩን ለመቀጠል ""ቀጣይ""ን ይንኩ።\n\nከተለየ የWi-Fi አውታረ መረብ ጋር ለመገናኘት ""ተመለስ""ን ይንኩ።" "አሳምርነቅቷል" "አስምር ቦዝኗል" "የአሳምር ስህተት።" @@ -1676,8 +1695,7 @@ "ከGPU ጋር ሲሳል መስኮቶች ውስጥ እይታዎችን አብለጭልጭ" "የሃርድዌር ንብርብሮች ዝማኔዎችን አሳይ" "የሃርድዌር ንብርብሮች ሲዘምኑ አረንጓዴ አብራ" - "የጂፒዩ አብዝቶ መሳልን አሳይ" - "ከምርጡ ወደ መጥፎው፦ ሰማያዊ፣ አረንጓዴ፣ ቀላ ያለ ቀይ፣ ቀይ" + "የጂፒዩ አልፎ መሳል አርም" "የHW ተደራቢዎችን አሰናክል" "ለማያ ገጽ ማቀናበሪያ ሁልጊዜ GPU ተጠቀም" "የ OpenGL ክትትሎችን ያንቁ" @@ -1738,11 +1756,11 @@ "የጀርባ ውሂብ በተንቀሳቃሽ ስልክ አውታረ መረብ ላይ አሰናክል። ከተገኙ የተንቀሳቃሽ ስልክ ያልሆኑ አውታረ መረቦች ስራ ላይ ይውላሉ።" "ለእዚህ ትግበራ የዳራ ውሂብ ለመገደብ፣ መጀመሪያ የተንቀሳቃሽ ውሂብ ወሰን አዘጋጅ።" "ዳራ ውሂብ አግድ?" - "ይሄ ባህሪ የተንቀሳቃሽ ስልክ አውታረ መረቦች ብቻ የሚገኙ ከሆኑ በጀርባ ውሂብ ላይ የሚወሰኑ መተግበሪያዎች ስራቸውን እንዲያቆሙ ሊያደርግ ይችላል።"\n\n"በመተግበሪያው ቅንብሮች ውስጥ ተገቢ የሆኑ ተጨማሪ የአጠቃቀም መቆጣጠሪያዎችን ልታገኝ ትችላለህ።" + "ይሄ ባህሪ የተንቀሳቃሽ ስልክ አውታረ መረቦች ብቻ የሚገኙ ከሆኑ በጀርባ ውሂብ ላይ የሚወሰኑ መተግበሪያዎች ስራቸውን እንዲያቆሙ ሊያደርግ ይችላል።\n\nበመተግበሪያው ቅንብሮች ውስጥ ተገቢ የሆኑ ተጨማሪ የአጠቃቀም መቆጣጠሪያዎችን ልታገኝ ትችላለህ።" "የተንቀሳቃሽ ስልክ ውሂብ ወሰን ሲያዘጋጁ ብቻ ነው የዳራ ውሂብ መገደብ የሚቻለው።" "ውሂብ ራስ-አመሳስል ይብራ?" - "ድር ላይ በመለያዎችህ ላይ የምታደርጋቸው ማንኛውም ለውጦች በራስ-ሰር ወደ ጡባዊ ቱኮህ ይገለበጣሉ።"\n\n"አንዳንድ መለያዎች ጡባዊ ቱኮህ ላይ የምታደርጋቸውን ለውጦች በራስ-ሰር ወደ ድር ላይ መገልበጥም ይችላሉ። የGoogle መለያ እንዲህ ነው የሚሰራው።"\n\n"የትኞቹ አይነት መረጃዎች ከእያንዳንዱ መለያ ጋር ማመሳሰል እንደምትፈልግ ለመምረጥ ወደ ቅንብሮች > መለያዎች ሂድ።" - "ድር ላይ በመለያዎችህ ላይ የምታደርጋቸው ማንኛውም ለውጦች በራስ-ሰር ወደ ስልክህ ይገለበጣሉ።"\n\n"አንዳንድ መለያዎች ስልክ ላይ የምታደርጋቸውን ለውጦች በራስ-ሰር ወደ ድር ላይ መገልበጥም ይችላሉ። የGoogle መለያ እንዲህ ነው የሚሰራው።"\n\n"የትኞቹ አይነት መረጃዎች ከእያንዳንዱ መለያ ጋር ማመሳሰል እንደምትፈልግ ለመምረጥ ወደ ቅንብሮች > መለያዎች ሂድ።" + "ድር ላይ በመለያዎችህ ላይ የምታደርጋቸው ማንኛውም ለውጦች በራስ-ሰር ወደ ጡባዊ ቱኮህ ይገለበጣሉ።\n\nአንዳንድ መለያዎች ጡባዊ ቱኮህ ላይ የምታደርጋቸውን ለውጦች በራስ-ሰር ወደ ድር ላይ መገልበጥም ይችላሉ። የGoogle መለያ እንዲህ ነው የሚሰራው።\n\nየትኞቹ አይነት መረጃዎች ከእያንዳንዱ መለያ ጋር ማመሳሰል እንደምትፈልግ ለመምረጥ ወደ ቅንብሮች > መለያዎች ሂድ።" + "ድር ላይ በመለያዎችህ ላይ የምታደርጋቸው ማንኛውም ለውጦች በራስ-ሰር ወደ ስልክህ ይገለበጣሉ።\n\nአንዳንድ መለያዎች ስልክ ላይ የምታደርጋቸውን ለውጦች በራስ-ሰር ወደ ድር ላይ መገልበጥም ይችላሉ። የGoogle መለያ እንዲህ ነው የሚሰራው።\n\nየትኞቹ አይነት መረጃዎች ከእያንዳንዱ መለያ ጋር ማመሳሰል እንደምትፈልግ ለመምረጥ ወደ ቅንብሮች > መለያዎች ሂድ።" "ውሂብ ራስ-አመሳስል ይጥፋ?" "ይሄ የውሂብ እና የባትሪ አጠቃቀም ይቆጥባል፣ ግን የቅርብ ጊዜ መረጃ ለመሰብሰብ እያንዳንዱን መለያ እየመረጥክ ማመሳሰል ይኖርብሃል። እናም ዝማኔዎች ሲኖሩ ምንም ማሳወቂያዎች አይደርሱህም።" "የአጠቃቀም ዑደት ቀን ዳግም ያስጀምራል" @@ -1751,12 +1769,12 @@ "የውሂብ አጠቃቀም ማስጠንቀቂያ አዘጋጅ" "የውሂብ አጠቃቀም ወሰን አዘጋጅ" "የውሂብ አጠቃቀም መወሰን" - "የተንቀሳቃሽ ስልክ ውሂብ ማገናኛ የተጠቀሰው ገደብ ላይ ሲደረስ ይሰናከላል።"\n\n"የውሂብ አጠቃቀም በጡባዊ ቱኮህ መሰረት የሚሰፈር እንደመሆኑ መጠን እና ድምጸ ተያያዥ ሞደምህ ለአጠቃቀም በተለየ ሁኔታ ሊሰፍር ስለሚችል፣ ቆጠብ ያለ ገደብ መጠቀሙን ግምት ውስጥ አስገባ።" - "የተንቀሳቃሽ ስልክ ውሂብ ማገናኛ የተጠቀሰው ገደብ ላይ ሲደረስ ይሰናከላል።"\n\n"የውሂብ አጠቃቀም በስልክህ መሰረት የሚሰፈር እንደመሆኑ መጠን፣ እና ድምጸ ተያያዥ ሞደምህ ለአጠቃቀም በተለየ ሁኔታ ሊሰፍር ስለሚችል፣ ቆጠብ ያለ ገደብ መጠቀሙን ግምት ውስጥ አስገባ።" + "የተንቀሳቃሽ ስልክ ውሂብ ማገናኛ የተጠቀሰው ገደብ ላይ ሲደረስ ይሰናከላል።\n\nየውሂብ አጠቃቀም በጡባዊ ቱኮህ መሰረት የሚሰፈር እንደመሆኑ መጠን እና ድምጸ ተያያዥ ሞደምህ ለአጠቃቀም በተለየ ሁኔታ ሊሰፍር ስለሚችል፣ ቆጠብ ያለ ገደብ መጠቀሙን ግምት ውስጥ አስገባ።" + "የተንቀሳቃሽ ስልክ ውሂብ ማገናኛ የተጠቀሰው ገደብ ላይ ሲደረስ ይሰናከላል።\n\nየውሂብ አጠቃቀም በስልክህ መሰረት የሚሰፈር እንደመሆኑ መጠን፣ እና ድምጸ ተያያዥ ሞደምህ ለአጠቃቀም በተለየ ሁኔታ ሊሰፍር ስለሚችል፣ ቆጠብ ያለ ገደብ መጠቀሙን ግምት ውስጥ አስገባ።" "ዳራ ውሂብ አግድ?" "የተንቀሳቃሽ ስልክ ውሂብ ዳራን ከገደቡ ወደ Wi-Fi አውታረ መረብ ካልተገናኙ በስተቀር አንዳንድ መተግበሪያዎች እና አገልግሎቶች አይሰሩም።" - "የተንቀሳቃሽ ስልክ ውሂብ ዳራን ከገደቡ ወደ Wi-Fi አውታረ መረብ ካልተገናኙ በስተቀር አንዳንድ መተግበሪያዎች እና አገልግሎቶች አይሰሩም።"\n\n"ይህ ቅንብር እዚህ ጡባዊ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" - "የተንቀሳቃሽ ስልክ ውሂብ ዳራን ከገደቡ ወደ Wi-Fi አውታረ መረብ ካልተገናኙ በስተቀር አንዳንድ መተግበሪያዎች እና አገልግሎቶች አይሰሩም።"\n\n"ይህ ቅንብር እዚህ ስልክ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" + "የተንቀሳቃሽ ስልክ ውሂብ ዳራን ከገደቡ ወደ Wi-Fi አውታረ መረብ ካልተገናኙ በስተቀር አንዳንድ መተግበሪያዎች እና አገልግሎቶች አይሰሩም።\n\nይህ ቅንብር እዚህ ጡባዊ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" + "የተንቀሳቃሽ ስልክ ውሂብ ዳራን ከገደቡ ወደ Wi-Fi አውታረ መረብ ካልተገናኙ በስተቀር አንዳንድ መተግበሪያዎች እና አገልግሎቶች አይሰሩም።\n\nይህ ቅንብር እዚህ ስልክ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" "^1""^2"\n"ማስጠንቀቂያ " "^1"" ""^2"\n"ወሰን" "የተወገዱ ትግበራዎች" @@ -1843,8 +1861,8 @@ "ተጠቃሚ" "የተገደበ መገለጫ" "አዲሰ ተጠቃሚ አክል" - "ተጨማሪ ተጠቃሚዎችን በመፍጠር ይህን መሣሪያ ለሌሎች ሰዎች ማጋራት ይችላሉ። እያንዳንዱ ተጠቃሚ በራሱ መተግበሪያዎች፣ የግድግዳ ወረቀት እና በመሳሰሉት ነገሮች ሊያበጅ የሚችለውን የራሱ ቦታ አለው። ተጠቃሚዎች እንዲሁም ሁሉም ሰው ላይ ተፅዕኖ የሚኖራቸው እንደ Wi-Fi ያሉ የጡባዊ ቅንብሮችን ማስተካከል ይችላሉ።"\n\n"አንድ አዲስ ተጠቃሚ ከፈጠሩ ያ ሰው በማዋቀር ሂደት ውስጥ ማለፍ አለበት።"\n\n"ማንኛውም ተጠቃሚ ሌሎች ተጠቃሚዎችን ወክሎ የተዘመኑ የመተግበሪያ ፍቃዶችን ሊቀበል ይችላል።" - "አዲስ ተጠቃሚ ከፈጠሩ ያ ሰው በማዋቀር ሂደት ውስጥ ማለፍ አለበት።"\n\n"ማንኛውም ተጠቃሚ ሌሎች ተጠቃሚዎችን ወክሎ የተዘመኑ የመተግበሪያ ፍቃዶችን ሊቀበል ይችላል።" + "ተጨማሪ ተጠቃሚዎችን በመፍጠር ይህን መሣሪያ ለሌሎች ሰዎች ማጋራት ይችላሉ። እያንዳንዱ ተጠቃሚ በራሱ መተግበሪያዎች፣ የግድግዳ ወረቀት እና በመሳሰሉት ነገሮች ሊያበጅ የሚችለውን የራሱ ቦታ አለው። ተጠቃሚዎች እንዲሁም ሁሉም ሰው ላይ ተፅዕኖ የሚኖራቸው እንደ Wi-Fi ያሉ የጡባዊ ቅንብሮችን ማስተካከል ይችላሉ።\n\nአንድ አዲስ ተጠቃሚ ከፈጠሩ ያ ሰው በማዋቀር ሂደት ውስጥ ማለፍ አለበት።\n\nማንኛውም ተጠቃሚ ሌሎች ተጠቃሚዎችን ወክሎ የተዘመኑ የመተግበሪያ ፍቃዶችን ሊቀበል ይችላል።" + "አዲስ ተጠቃሚ ከፈጠሩ ያ ሰው በማዋቀር ሂደት ውስጥ ማለፍ አለበት።\n\nማንኛውም ተጠቃሚ ሌሎች ተጠቃሚዎችን ወክሎ የተዘመኑ የመተግበሪያ ፍቃዶችን ሊቀበል ይችላል።" "ተጠቃሚ አሁን ይዋቀር?" "ሰውዬው ጡባዊውን ወስዶ ቦታውን እንዲያዋቅር የሚገኝ መሆኑን ያረጋግጡ" "መገለጫ አሁን ይዋቀር?" @@ -1875,6 +1893,9 @@ "ይህ ቅንብር እዚህ ስልክ ላይ ያሉት ሁሉም ተጠቃሚዎች ይመለከታቸዋል።" "ቋንቋ ይቀይሩ" "የቅርጸ-ቁምፊ መጠን ይቀይሩ" + "ገደቦች" + "ገደቦችን አስወግድ" + "ፒን ቀይር" "ማሳወቂያዎች አሳይ" "እገዛ" "መለያ ለይዘት" diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml index aaa29c7563f..0cb307402b1 100644 --- a/res/values-ar/arrays.xml +++ b/res/values-ar/arrays.xml @@ -233,7 +233,8 @@ "الموقع" "شخصية" "المراسلة" - "الجهاز" + "الوسائط" + "الجهاز"
    "الموقع التقريبي" @@ -267,6 +268,17 @@ "تشغيل الصوت" "قراءة الحافظة" "تعديل الحافظة" + "أزرار الوسائط" + "التركيز على الصوت" + "مستوى الصوت الرئيسي" + "مستوى الصوت" + "مستوى صوت الرنين" + "مستوى صوت الوسائط" + "مستوى صوت المنبه" + "مستوى صوت الإشعار" + "مستوى صوت البلوتوث" + "البقاء في الوضع النشط" + "مراقبة الموقع" "الموقع" @@ -300,12 +312,33 @@ "تشغيل الصوت" "قراءة الحافظة" "تعديل الحافظة" + "أزرار الوسائط" + "التركيز على الصوت" + "مستوى الصوت الرئيسي" + "مستوى الصوت" + "مستوى صوت الرنين" + "مستوى صوت الوسائط" + "مستوى صوت المنبّه" + "مستوى صوت الإشعار" + "مستوى صوت البلوتوث" + "البقاء في الوضع النشط" + "الموقع" "قصيرة" "متوسطة" "طويلة" + + "Dalvik" + "ART" + "ART (تصحيح الأخطاء)" + + + "استخدام Dalvik" + "استخدام ART" + "استخدام إصدار تصحيح الأخطاء من ART" + "عدم التحقق مطلقًا" "التحقق من محتوى DRM فقط" @@ -367,6 +400,11 @@ "على الشاشة كخطوط" "In adb shell dumpsys gfxinfo" + + "إيقاف" + "عرض مناطق تجاوز الحد" + "عرض مقابل تجاوز الحد" + "الحد القياسي" "ليست هناك عمليات بالخلفية" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index a8d6b4804ff..bf6893f814d 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -275,8 +275,8 @@ "لقد فقدت اتصال البيانات نظرًا لأنك أوقفت تشغيل تجوال البيانات بشبكتك الرئيسية." "تشغيل" "عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!" - "عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!"\n\n"يؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي." - "عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!"\n\n"يؤثر هذا الإعداد على جميع مستخدمي هذا الهاتف." + "عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي." + "عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الهاتف." "السماح بتجوال البيانات؟" "تحديد المشغل" "اختيار مشغل شبكة" @@ -322,8 +322,8 @@ "يلزم توفير رقم تعريف شخصي (PIN) رقمي أو كلمة مرور لفك تشفير الجهاز اللوحي في كل مرة يتم فيها تشغيله" "يلزم توفير رقم تعريف شخصي (PIN) رقمي أو كلمة مرور لفك تشفير الهاتف في كل مرة يتم فيها تشغيله" "مشفّر" - "يمكنك تشفير الحسابات والإعدادات والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. بعد تشفير الجهاز اللوحي، يلزمك إدخال رقم تعريف شخصي رقمي أو كلمة مرور لإلغاء تشفيره عند كل مرة تجري فيها تشغيله: يتعذر عليك إلغاء تشفير جهازك اللوحي إلا عند إجراء إعادة ضبط بحسب بيانات المصنع وهو ما يؤدي إلى محو جميع البيانات."\n\n"تستغرق عملية التشفير ساعة أو أكثر. يجب البدء ببطارية مشحونة والإبقاء على توصيل الجهاز اللوحي بمصدر الكهرباء حتى تنتهي عملية التشفير. إذا تمت مقاطعة عملية التشفير، فستفقد بعض بياناتك أو كلها." - "يمكنك تشفير الحسابات والإعدادات والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. بعد تشفير الهاتف، يلزمك إدخال رقم تعريف شخصي رقمي أو كلمة مرور لإلغاء تشفيره عند كل مرة تجري فيها تشغيله: يتعذر عليك إلغاء تشفير هاتفك إلا عند إجراء إعادة ضبط بحسب بيانات المصنع وهو ما يؤدي إلى محو جميع البيانات."\n\n"تستغرق عملية التشفير ساعة أو أكثر. يجب البدء ببطارية مشحونة والإبقاء على توصيل هاتفك بمصدر الكهرباء حتى تنتهي عملية التشفير. إذا تمت مقاطعة عملية التشفير، فستفقد بعض بياناتك أو كلها." + "يمكنك تشفير الحسابات والإعدادات والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. بعد تشفير الجهاز اللوحي، يلزمك إدخال رقم تعريف شخصي رقمي أو كلمة مرور لإلغاء تشفيره عند كل مرة تجري فيها تشغيله: يتعذر عليك إلغاء تشفير جهازك اللوحي إلا عند إجراء إعادة ضبط بحسب بيانات المصنع وهو ما يؤدي إلى محو جميع البيانات.\n\nتستغرق عملية التشفير ساعة أو أكثر. يجب البدء ببطارية مشحونة والإبقاء على توصيل الجهاز اللوحي بمصدر الكهرباء حتى تنتهي عملية التشفير. إذا تمت مقاطعة عملية التشفير، فستفقد بعض بياناتك أو كلها." + "يمكنك تشفير الحسابات والإعدادات والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. بعد تشفير الهاتف، يلزمك إدخال رقم تعريف شخصي رقمي أو كلمة مرور لإلغاء تشفيره عند كل مرة تجري فيها تشغيله: يتعذر عليك إلغاء تشفير هاتفك إلا عند إجراء إعادة ضبط بحسب بيانات المصنع وهو ما يؤدي إلى محو جميع البيانات.\n\nتستغرق عملية التشفير ساعة أو أكثر. يجب البدء ببطارية مشحونة والإبقاء على توصيل هاتفك بمصدر الكهرباء حتى تنتهي عملية التشفير. إذا تمت مقاطعة عملية التشفير، فستفقد بعض بياناتك أو كلها." "تشفير الجهاز اللوحي" "تشفير الهاتف" "اشحن البطارية وأعد المحاولة." @@ -339,8 +339,8 @@ "حاول مرة أخرى خلال ^1 ثانية." "اكتب كلمة المرور" "لم يتم التشفير بنجاح" - "تمت مقاطعة التشفير ويتعذر الاستكمال. ونتيجة لذلك، لن تتمكن بعد الآن من الدخول إلى البيانات على جهازك اللوحي. "\n\n"لاستئناف استخدام الجهاز اللوحي، يلزمك إجراء إعادة ضبط المصنع. وعند إعداد الجهاز اللوحي بعد إعادة الضبط، ستكون لديك فرصة استعادة أي بيانات تم نسخها احتياطيًا إلى حساب Google." - "تمت مقاطعة التشفير ويتعذر الاستكمال. ونتيجة لذلك، لن تتمكن بعد الآن من الدخول إلى البيانات على هاتفك. "\n\n"لاستئناف استخدام الهاتف، يجب إجراء إعادة ضبط المصنع. وعند إعداد الهاتف بعد إعادة الضبط، ستكون لديك فرصة استعادة أي بيانات تم نسخها احتياطيًا إلى حساب Google." + "تمت مقاطعة التشفير ويتعذر الاستكمال. ونتيجة لذلك، لن تتمكن بعد الآن من الدخول إلى البيانات على جهازك اللوحي. \n\nلاستئناف استخدام الجهاز اللوحي، يلزمك إجراء إعادة ضبط المصنع. وعند إعداد الجهاز اللوحي بعد إعادة الضبط، ستكون لديك فرصة استعادة أي بيانات تم نسخها احتياطيًا إلى حساب Google." + "تمت مقاطعة التشفير ويتعذر الاستكمال. ونتيجة لذلك، لن تتمكن بعد الآن من الدخول إلى البيانات على هاتفك. \n\nلاستئناف استخدام الهاتف، يجب إجراء إعادة ضبط المصنع. وعند إعداد الهاتف بعد إعادة الضبط، ستكون لديك فرصة استعادة أي بيانات تم نسخها احتياطيًا إلى حساب Google." "تبديل أسلوب الإدخال" "اختيار قفل الشاشة" "اختر قفلاً للنسخ الاحتياطي" @@ -514,6 +514,7 @@ "جارٍ الاتصال" "متصل" "متاح" + "قيد الاستخدام" "عرض الإعدادات" "هل تريد قطع الاتصال؟" "سيؤدي هذا إلى إنهاء الاتصال مع:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "إيقاف" "غير متوفر بسبب إيقاف تشغيل NFC" "Android Beam" - "عندما يتم تشغيل هذه الميزة، يمكنك إرسال محتوى التطبيق إلى جهاز به اتصال NFC عن طريق الإمساك بالجهازين بالقرب من بعضهما. ويمكنك على سبيل المثال إرسال صفحات المتصفح ومقاطع فيديو YouTube وجهات اتصال الأشخاص، والمزيد. "\n" "\n"ما عليك سوى الجمع بين الجهازين (من الخلف عادة) ولمس الشاشة. وسيحدد التطبيق ما يتم إرساله." + "عندما يتم تشغيل هذه الميزة، يمكنك إرسال محتوى التطبيق إلى جهاز به اتصال NFC عن طريق الإمساك بالجهازين بالقرب من بعضهما. ويمكنك على سبيل المثال إرسال صفحات المتصفح ومقاطع فيديو YouTube وجهات اتصال الأشخاص، والمزيد. \n \nما عليك سوى الجمع بين الجهازين (من الخلف عادة) ولمس الشاشة. وسيحدد التطبيق ما يتم إرساله." "اكتشاف خدمة الشبكة" "السماح للتطبيقات على الأجهزة الأخرى باكتشاف التطبيقات على هذا الجهاز" "Wi‑Fi" @@ -620,7 +621,7 @@ "محمي باستخدام %1$s" "، محمي باستخدام %1$s" "لا شيء" - "لتحسين مستوى دقة تحديد الموقع ولأغراض أخرى، يحتاج %1$s إلى تشغيل البحث عن الشبكات، حتى مع إيقاف Wi-Fi."\n\n"هل تريد السماح بذلك لجميع التطبيقات التي تحتاج إلى فحص؟" + "لتحسين مستوى دقة تحديد الموقع ولأغراض أخرى، يحتاج %1$s إلى تشغيل البحث عن الشبكات، حتى مع إيقاف Wi-Fi.\n\nهل تريد السماح بذلك لجميع التطبيقات التي تحتاج إلى فحص؟" "سماح" "رفض" "اتصال" @@ -632,8 +633,8 @@ "إلغاء" "تخطي على أية حال" "عدم التخطي" - "تحذير: ربما يُحصّل مشغل شبكة الجوال رسومًا إضافية منك."\n\n"قد يحتاج إعداد الجهاز اللوحي إلى نشاط كبير بالشبكة." - "تحذير: ربما يحصّل مشغل شبكة الجوال رسومًا إضافية منك."\n\n"قد يحتاج إعداد الهاتف إلى نشاط كبير بالشبكة." + "تحذير: ربما يُحصّل مشغل شبكة الجوال رسومًا إضافية منك.\n\nقد يحتاج إعداد الجهاز اللوحي إلى نشاط كبير بالشبكة." + "تحذير: ربما يحصّل مشغل شبكة الجوال رسومًا إضافية منك.\n\nقد يحتاج إعداد الهاتف إلى نشاط كبير بالشبكة." "تحذير: ما لم يتوفر لديك اتصال بالإنترنت، لن يتمكن الجهاز اللوحي من التأكد من أن برنامجك محدّث." "تحذير: ما لم يتوفر لديك اتصال بالإنترنت، لن يتمكن الهاتف من التأكد من أن برنامجك محدّث." "لم يتمكن الجهاز اللوحي من الاتصال بشبكة Wi-Fi هذه." @@ -773,9 +774,9 @@ "رقم التعريف الشخصي لبطاقة SIM" "رقم التعريف الشخصي غير صحيح" "أرقام التعريف الشخصي غير متطابقة" - "لا يمكن تغيير رقم التعريف الشخصي."\n"يحتمل أن يكون رقم التعريف الشخصي غير صحيح." + "لا يمكن تغيير رقم التعريف الشخصي.\nيحتمل أن يكون رقم التعريف الشخصي غير صحيح." "تم تغيير رقم التعريف الشخصي لبطاقة SIM بنجاح" - "لا يمكن تغيير حالة تأمين بطاقة SIM."\n"يحتمل أن يكون رقم التعريف الشخصي غير صحيح." + "لا يمكن تغيير حالة تأمين بطاقة SIM.\nيحتمل أن يكون رقم التعريف الشخصي غير صحيح." "موافق" "إلغاء" "حالة الجهاز اللوحي" @@ -918,9 +919,9 @@ "إعادة الضبط بحسب بيانات المصنع" "محو كل البيانات على الجهاز اللوحي" "مسح جميع بيانات الهاتف" - "يؤدي ذلك إلى مسح جميع البيانات من ""وحدة التخزين الداخلية"" لجهازك اللوحي، بما في ذلك:"\n\n
  • "حسابك في Google"
  • \n
  • "النظام وبيانات التطبيقات والإعدادات"
  • \n
  • "التطبيقات التي تم تنزيلها"
  • - "يؤدي ذلك إلى مسح جميع البيانات من ""وحدة التخزين الداخلية"" لهاتفك، بما في ذلك:"\n\n
  • "حسابك في Google"
  • \n
  • "النظام وبيانات التطبيقات والإعدادات"
  • \n
  • "التطبيقات التي تم تنزيلها"
  • - \n\n"تم تسجيل دخولك حاليًا في الحسابات التالية:"\n + "يؤدي ذلك إلى مسح جميع البيانات من ""وحدة التخزين الداخلية"" لجهازك اللوحي، بما في ذلك:\n\n"
  • "حسابك في Google"
  • \n
  • "النظام وبيانات التطبيقات والإعدادات"
  • \n
  • "التطبيقات التي تم تنزيلها"
  • + "يؤدي ذلك إلى مسح جميع البيانات من ""وحدة التخزين الداخلية"" لهاتفك، بما في ذلك:\n\n"
  • "حسابك في Google"
  • \n
  • "النظام وبيانات التطبيقات والإعدادات"
  • \n
  • "التطبيقات التي تم تنزيلها"
  • + \n\n"تم تسجيل دخولك حاليًا في الحسابات التالية:\n"
  • "الموسيقى"
  • \n
  • "الصور"
  • \n
  • "بيانات المستخدم الأخرى"
  • \n\n"لمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب محو ""وحدة تخزين USB""." \n\n"لمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب مسح ""بطاقة SD""." @@ -1105,7 +1106,7 @@ "عرض العمليات المخزنة مؤقتًا" "إعادة تعيين تفضيلات التطبيقات" "هل تريد إعادة تعيين تفضيلات التطبيقات؟" - "سيؤدي هذا إلى إعادة تعيين جميع تفضيلات:"\n\n" "
  • "التطبيقات المعطلة"
  • \n" "
  • "إشعارات التطبيقات المعطلة"
  • \n" "
  • "التطبيقات الافتراضية للإجراءات"
  • \n" "
  • "قيود بيانات الخلفية للتطبيقات"
  • \n\n" لن تفقد أي بيانات للتطبيقات."
    + "سيؤدي هذا إلى إعادة تعيين جميع تفضيلات:\n\n "
  • "التطبيقات المعطلة"
  • \n" "
  • "إشعارات التطبيقات المعطلة"
  • \n" "
  • "التطبيقات الافتراضية للإجراءات"
  • \n" "
  • "قيود بيانات الخلفية للتطبيقات"
  • \n\n" لن تفقد أي بيانات للتطبيقات."
    "إعادة تعيين التطبيقات" "إدارة المساحة" "تصفية" @@ -1240,9 +1241,7 @@ "للتبديل، اضغط على ctrl-مسافة" "افتراضي" "تخطيطات لوحة المفاتيح" - "قاموس المستخدم" - "قاموس شخصي" - "القواميس الشخصية" + "القاموس الشخصي" "إضافة" "إضافة إلى القاموس" @@ -1303,6 +1302,11 @@ "تضمين خيار في قائمة الطاقة لإنشاء تقرير الأخطاء" "البقاء في الوضع النشط" "لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن" + "تمكين سجل تطفل بواجهة وحدة تحكم المضيف عبر بلوتوث" + "التقاط حزم واجهة وحدة تحكم المضيف في ملف عبر بلوتوث" + "تحديد وقت التشغيل" + "تحديد وقت التشغيل" + "هل تريد إعادة التشغيل لتغيير وقت التشغيل من %1$s إلى %2$s؟" "السماح بمواقع وهمية" "السماح بمواقع وهمية" "هل تريد السماح بتصحيح أخطاء USB؟" @@ -1315,11 +1319,13 @@ "حماية وحدة تخزين USB" "يجب على التطبيقات طلب الإذن لقراءة وحدة تخزين USB" "هل تريد حماية وحدة تخزين USB؟" - "إذا كانت وحدة تخزين USB محمية، يجب على التطبيقات طلب إذن لقراءة البيانات من وحدة التخزين الخارجية."\n\n"ربما لن تعمل بعض التطبيقات إلى أن يحدثها مطورو برامجها." + "إذا كانت وحدة تخزين USB محمية، يجب على التطبيقات طلب إذن لقراءة البيانات من وحدة التخزين الخارجية.\n\nربما لن تعمل بعض التطبيقات إلى أن يحدثها مطورو برامجها." "حماية بطاقة SD" "يجب على التطبيقات طلب الإذن لقراءة بطاقة SD" "هل تريد حماية بطاقة SD؟" - "إذا كانت بطاقة SD محمية، يجب على التطبيقات طلب إذن لقراءة البيانات من وحدة التخزين الخارجية."\n\n"ربما لن تعمل بعض التطبيقات إلى أن يحدثها مطورو برامجها." + "إذا كانت بطاقة SD محمية، يجب على التطبيقات طلب إذن لقراءة البيانات من وحدة التخزين الخارجية.\n\nربما لن تعمل بعض التطبيقات إلى أن يحدثها مطورو برامجها." + "تطبيق طرفي محلي" + "تمكين تطبيق طرفي يوفر إمكانية الدخول إلى واجهة النظام المحلية" "اختيار أداة" "اختيار أداة" "هل تريد إنشاء الأداة والسماح بالوصول؟" @@ -1340,11 +1346,11 @@ "الخدمات" "النظام" "إيماءات التكبير" - "عند تشغيل هذه الميزة، يمكنك التكبير والتصغير بالنقر نقرًا ثلاثيًا على الشاشة."\n\n"أثناء التكبير، يمكنك إجراء التالي:"\n
    • "التدوير: اسحب إصبعين أو أكثر على الشاشة."
    • \n
    • "ضبط مستوى التكبير/التصغير: اضغط بإصبعين أو أكثر معًا أو باعد بينهم."
    \n\n"كما يمكنك أيضًا التكبير المؤقت لما يقع تحت إصبعك بالنقر نقرًا ثلاثيًا مع الاستمرار. في حالة التكبير هذه، يمكنك سحب إصبعك لاستكشاف الأجزاء المختلفة من الشاشة. ارفع إصبعك للعودة إلى الحالة السابقة."\n\n"ملاحظة: يعمل النقر نقرًا ثلاثيًا للتكبير في أي مكان ماعدا لوحة المفاتيح وشريط التنقل."
    + "عند تشغيل هذه الميزة، يمكنك التكبير والتصغير بالنقر نقرًا ثلاثيًا على الشاشة.\n\nأثناء التكبير، يمكنك إجراء التالي:\n"
    • "التدوير: اسحب إصبعين أو أكثر على الشاشة."
    • \n
    • "ضبط مستوى التكبير/التصغير: اضغط بإصبعين أو أكثر معًا أو باعد بينهم."
    \n\n"كما يمكنك أيضًا التكبير المؤقت لما يقع تحت إصبعك بالنقر نقرًا ثلاثيًا مع الاستمرار. في حالة التكبير هذه، يمكنك سحب إصبعك لاستكشاف الأجزاء المختلفة من الشاشة. ارفع إصبعك للعودة إلى الحالة السابقة.\n\nملاحظة: يعمل النقر نقرًا ثلاثيًا للتكبير في أي مكان ماعدا لوحة المفاتيح وشريط التنقل."
    "اختصارات تسهيل الدخول" "تشغيل" "إيقاف" - "عندما يتم تشغيل هذه الميزة، يمكنك بسرعة تمكين ميزات إمكانية الدخول بخطوتين:"\n\n"الخطوة الأولى: اضغط مع الاستمرار على زر التشغيل إلى أن تسمع صوتًا أو تشعر باهتزاز."\n\n"الخطوة الثانية: المس مع الاستمرار إصبعين إلى أن تسمع تأكيدًا صوتيًا."\n\n"إذا كان الجهاز لديه مستخدمون متعددون، فإن استخدام هذا الاختصار على شاشة القفل سيؤدي مؤقتًا إلى تمكين إمكانية الدخول إلى أن يتم إلغاء قفل الجهاز." + "عندما يتم تشغيل هذه الميزة، يمكنك بسرعة تمكين ميزات إمكانية الدخول بخطوتين:\n\nالخطوة الأولى: اضغط مع الاستمرار على زر التشغيل إلى أن تسمع صوتًا أو تشعر باهتزاز.\n\nالخطوة الثانية: المس مع الاستمرار إصبعين إلى أن تسمع تأكيدًا صوتيًا.\n\nإذا كان الجهاز لديه مستخدمون متعددون، فإن استخدام هذا الاختصار على شاشة القفل سيؤدي مؤقتًا إلى تمكين إمكانية الدخول إلى أن يتم إلغاء قفل الجهاز." "نص كبير" "تكبير الشاشة" "التحديث التلقائي لتكبير الشاشة" @@ -1366,6 +1372,16 @@ "يقدم TalkBack تعليقات منطوقة لمساعدة المستخدمين من المكفوفين وضعاف البصر. هل تريد تثبيته مجانًا من Android Market؟" "لم يتم تقديم أي وصف." "الإعدادات" + "الطباعة" + "إعدادات الطباعة" + "الخدمات" + "هل تريد استخدام %1$s؟" + "يمكن أن تستلم %1$s مستندات تطبعها. قد تحتوي هذه المستندات على بيانات مهمة." + "لم يتم تثبيت أية خدمات" + "الإعدادات" + "إضافة طابعات" + "تشغيل" + "إيقاف" "البطارية" "ما الذي كان يستخدم البطارية" "بيانات استخدام البطارية غير متاحة." @@ -1405,8 +1421,10 @@ "Wi-Fi يعمل" "الجهاز اللوحي" "الهاتف" - "تم إرسال البيانات" - "البيانات المستلمة" + "تم إرسال بيانات الجوّال" + "تم تلقى بيانات الجوّال" + "تم إرسال بيانات Wi‑Fi" + "تم تلقي بيانات Wi‑Fi" "الصوت" "فيديو" "وقت التشغيل" @@ -1460,6 +1478,7 @@ "درجة الصوت" "يؤثر في نبرة النص المنطوق" "اللغة" + "اللغة غير محددة" "تعيين الصوت الخاص بلغة النص المنطوق" "الاستماع إلى مثال" "تشغيل عرض توضيحي قصير لتجميع الكلام" @@ -1594,7 +1613,7 @@ "EAP غير معتمد." "لا يمكنك تهيئة اتصال EAP Wi-Fi أثناء الإعداد. بعد الإعداد، يمكنك إجراء ذلك من الإعدادات > اللاسلكي والشبكات." "يمكن أن يستغرق الاتصال بضع دقائق..." - "المس ""التالي"" لمتابعة الإعداد."\n\n"المس ""رجوع"" للاتصال بشبكة Wi‑Fi مختلفة." + "المس ""التالي"" لمتابعة الإعداد.\n\nالمس ""رجوع"" للاتصال بشبكة Wi‑Fi مختلفة." "تم تمكين المزامنة" "تم تعطيل المزامنة" "خطأ في المزامنة" @@ -1622,7 +1641,7 @@ "Gmail" "التقويم" "جهات الاتصال" - "مرحبًا بك في مزامنة Google!"" "\n"وهي الطريقة التي تتبعها Google لمزامنة البيانات للسماح بالدخول إلى جهات الاتصال والمواعيد والمزيد من أي مكان تتواجد فيه." + "مرحبًا بك في مزامنة Google!"" \nوهي الطريقة التي تتبعها Google لمزامنة البيانات للسماح بالدخول إلى جهات الاتصال والمواعيد والمزيد من أي مكان تتواجد فيه." "إعدادات مزامنة التطبيق" "البيانات والمزامنة" "تغيير كلمة المرور" @@ -1676,8 +1695,7 @@ "وميض العروض داخل النوافذ عندما يتم الرسم باستخدام وحدة معالجة الرسومات" "عرض تحديثات طبقات الأجهزة" "تشغيل وميض بالأخضر لطبقات الأجهزة عند تحديثها" - "عرض استخدام GPU الزائد" - "من الأفضل إلى الأسوأ: أزرق، أخضر، أحمر فاتح، أحمر" + "تصحيح تجاوز حد وحدة معالجة الرسومات" "تعطيل تراكبات الأجهزة" "استخدام وحدة معالجة الرسومات دائمًا لتركيب الشاشة" "تمكين عمليات تتبع OpenGL" @@ -1738,11 +1756,11 @@ "تعطيل بيانات الخلفية في شبكات الجوال فقط. سيتم استخدام شبكة بخلاف شبكة الجوال إن كانت متاحة." "لتقييد بيانات الخلفية لهذا التطبيق، فعين أولاً حدًا لبيانات الجوال." "هل تريد تقييد بيانات الخلفية؟" - "قد تتسبب هذه الميزة في توقف تطبيق يعتمد على بيانات الخلفية عن العمل عند توفر شبكات جوال فقط."\n\n"يمكنك العثور على المزيد من عناصر التحكم المناسبة في استخدام البيانات من خلال الإعدادات المتوفرة داخل التطبيق." + "قد تتسبب هذه الميزة في توقف تطبيق يعتمد على بيانات الخلفية عن العمل عند توفر شبكات جوال فقط.\n\nيمكنك العثور على المزيد من عناصر التحكم المناسبة في استخدام البيانات من خلال الإعدادات المتوفرة داخل التطبيق." "تقييد بيانات الخلفية ممكن فقط إذا عينت حدًا لبيانات الجوال." "تشغيل مزامنة البيانات تلقائيًا؟" - "سيتم نسخ أية تغييرات تجريها على حساباتك على الويب تلقائيًا إلى جهازك اللوحي."\n\n"ويمكن أن تنسخ بعض الحسابات أيضًا أية تغييرات تجريها على الجهاز اللوحي تلقائيًا إلى الويب. يعمل حساب Google بهذه الطريقة."\n\n"لاختيار أنواع المعلومات المراد مزامنتها داخل كل حساب، انتقل إلى الإعدادات > الحسابات." - "سيتم نسخ أية تغييرات تجريها على حساباتك على الويب تلقائيًا إلى هاتفك."\n\n"ويمكن أن تنسخ بعض الحسابات أيضًا أية تغييرات تجريها على الهاتف تلقائيًا إلى الويب. يعمل حساب Google بهذه الطريقة."\n\n"لاختيار أنواع المعلومات المراد مزامنتها داخل كل حساب، انتقل إلى الإعدادات > الحسابات." + "سيتم نسخ أية تغييرات تجريها على حساباتك على الويب تلقائيًا إلى جهازك اللوحي.\n\nويمكن أن تنسخ بعض الحسابات أيضًا أية تغييرات تجريها على الجهاز اللوحي تلقائيًا إلى الويب. يعمل حساب Google بهذه الطريقة.\n\nلاختيار أنواع المعلومات المراد مزامنتها داخل كل حساب، انتقل إلى الإعدادات > الحسابات." + "سيتم نسخ أية تغييرات تجريها على حساباتك على الويب تلقائيًا إلى هاتفك.\n\nويمكن أن تنسخ بعض الحسابات أيضًا أية تغييرات تجريها على الهاتف تلقائيًا إلى الويب. يعمل حساب Google بهذه الطريقة.\n\nلاختيار أنواع المعلومات المراد مزامنتها داخل كل حساب، انتقل إلى الإعدادات > الحسابات." "إيقاف مزامنة البيانات تلقائيًا؟" "سيؤدي هذا إلى الحفاظ على استخدام البيانات والبطارية، ولكنك ستحتاج إلى مزامنة كل حساب يدويًا لجمع المعلومات الحديثة. ولن تتلقى إشعارات عند حدوث التحديثات." "تاريخ إعادة تعيين دورة الاستخدام" @@ -1751,12 +1769,12 @@ "تعيين تحذير استخدام البيانات" "تعيين حد استخدام البيانات" "وضع حد لاستخدام البيانات" - "سيتم تعطيل اتصال بيانات الجوال عند الوصول إلى الحد المحدد."\n\n"نظرًا لأنه يتم حساب استخدام البيانات بواسطة جهازك اللوحي، وقد يحسب مشغل شبكة الجوال الاستخدام بشكل مختلف، يمكنك استخدام حد معتدل." - "سيتم تعطيل اتصال بيانات الجوال عند الوصول إلى الحد المحدد."\n\n"نظرًا لأنه يتم حساب استخدام البيانات بواسطة الهاتف، وقد يحسب مشغل شبكة الجوال الاستخدام بشكل مختلف، يمكنك استخدام حد معتدل." + "سيتم تعطيل اتصال بيانات الجوال عند الوصول إلى الحد المحدد.\n\nنظرًا لأنه يتم حساب استخدام البيانات بواسطة جهازك اللوحي، وقد يحسب مشغل شبكة الجوال الاستخدام بشكل مختلف، يمكنك استخدام حد معتدل." + "سيتم تعطيل اتصال بيانات الجوال عند الوصول إلى الحد المحدد.\n\nنظرًا لأنه يتم حساب استخدام البيانات بواسطة الهاتف، وقد يحسب مشغل شبكة الجوال الاستخدام بشكل مختلف، يمكنك استخدام حد معتدل." "هل تريد تقييد بيانات الخلفية؟" "في حالة تقييد بيانات الجوّال للخلفية، لن تعمل بعض التطبيقات والخدمات ما لم تكن متصلاً بشبكة Wi-Fi." - "في حالة تقييد بيانات الجوّال للخلفية، لن تعمل بعض التطبيقات والخدمات ما لم تكن متصلاً بشبكة Wi-Fi."\n\n"يؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي." - "في حالة تقييد بيانات الجوّال للخلفية، لن تعمل بعض التطبيقات والخدمات ما لم تكن متصلاً بشبكة Wi-Fi."\n\n"يؤثر هذا الإعداد على جميع مستخدمي هذا الهاتف." + "في حالة تقييد بيانات الجوّال للخلفية، لن تعمل بعض التطبيقات والخدمات ما لم تكن متصلاً بشبكة Wi-Fi.\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي." + "في حالة تقييد بيانات الجوّال للخلفية، لن تعمل بعض التطبيقات والخدمات ما لم تكن متصلاً بشبكة Wi-Fi.\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الهاتف." "^1"" ""^2"\n"تحذير" "^1"" ""^2"\n"الحد" "التطبيقات المزالة" @@ -1843,8 +1861,8 @@ "المستخدم" "ملف شخصي محظور" "إضافة مستخدم جديد" - "يمكنك مشاركة هذا الجهاز مع أشخاص آخرين من خلال إنشاء مستخدمين إضافيين. ويكون لكل مستخدم مساحته التي يمكنه تخصيصها باستخدام تطبيقاته وخلفياته وما إلى ذلك. ويمكن للمستخدمين أيضًا ضبط إعدادات الجهاز اللوحي مثل Wi-Fi والتي تؤثر على إعدادات الجميع."\n\n"بعد إنشاء مستخدم جديد، يلزم هذا الشخص المرور بعملية الإعداد."\n\n"ويمكن لأي مستخدم قبول أذونات التطبيقات المحدّثة نيابة عن جميع المستخدمين الآخرين." - "بعد إنشاء مستخدم جديد، يلزم هذا الشخص المرور بعملية الإعداد."\n\n"يمكن لأي مستخدم قبول أذونات التطبيقات المحدثة نيابة عن جميع المستخدمين الآخرين." + "يمكنك مشاركة هذا الجهاز مع أشخاص آخرين من خلال إنشاء مستخدمين إضافيين. ويكون لكل مستخدم مساحته التي يمكنه تخصيصها باستخدام تطبيقاته وخلفياته وما إلى ذلك. ويمكن للمستخدمين أيضًا ضبط إعدادات الجهاز اللوحي مثل Wi-Fi والتي تؤثر على إعدادات الجميع.\n\nبعد إنشاء مستخدم جديد، يلزم هذا الشخص المرور بعملية الإعداد.\n\nويمكن لأي مستخدم قبول أذونات التطبيقات المحدّثة نيابة عن جميع المستخدمين الآخرين." + "بعد إنشاء مستخدم جديد، يلزم هذا الشخص المرور بعملية الإعداد.\n\nيمكن لأي مستخدم قبول أذونات التطبيقات المحدثة نيابة عن جميع المستخدمين الآخرين." "هل تريد إعداد المستخدم الآن؟" "تأكد من أن الشخص متاح لأخذ الجهاز اللوحي وإعداد مساحته." "هل ترغب في إعداد ملف شخصي الآن؟" @@ -1875,6 +1893,9 @@ "يؤثر هذا الإعداد على جميع مستخدمي هذا الهاتف." "تغيير اللغة" "تغيير حجم الخط" + "القيود" + "إزالة القيود" + "تغيير رقم التعريف الشخصي" "إظهار الإشعارات" "مساعدة" "حساب المحتوى" diff --git a/res/values-be/arrays.xml b/res/values-be/arrays.xml index b4fbef25b29..86713752538 100644 --- a/res/values-be/arrays.xml +++ b/res/values-be/arrays.xml @@ -233,79 +233,22 @@ "Месцазнаходжанне" "Персанальны" "Абмен паведамленнямі" - "Прылада" -
    - - "прыблiзнае месцазнаходжанне" - "дакладнае месцазнаходжанне" - "GPS" - "вібрацыя" - "чытанне кантактаў" - "змяніць кантакты" - "чытанне гiсторыi выклікаў" - "змены ў гiсторыi выклікаў" - "чытанне календара" - "змяніць каляндар" - "сканаванне Wi-Fi" - "апавяшчэнне" - "сканаванне па сотавым" - "патэлефанаваць па нумары" - "чытаць SMS" - "напісаць SMS" - "атрымліваць SMS" - "атрымліваць экстранныя SMS" - "атрымліваць MMS" - "атрымаць WAP Push" - "Адправiць SMS" - "чытанне ICC SMS" - "напiсаць ICC SMS" - "змяніць налады" - "намалюйце ўверсе" - "доступ да паведамленняў" - "камера" - "запісваць аўдыё" - "прайграць аўдыё" - "счытаць буфер абмену" - "змяніць буфер абмену" - - - "Месцазнаходжанне" - "Месцазнаходжанне" - "Месцазнаходжанне" - "Вібрацыя" - "Чытанне кантактаў" - "Змяніць кантакты" - "Чытанне гiсторыi выклікаў" - "Змяненне запісаў у гiсторыi выклікаў" - "Чытанне календара" - "Змена календара" - "Месцазнаходжанне" - "Апублiкаваць апавяшчэнне" - "Месцазнаходжанне" - "Патэлефанаваць па нумары" - "Прыём SMS/MMS" - "Адправiць SMS/MMS" - "Прыём SMS/MMS" - "Прыём SMS/MMS" - "Прыём SMS/MMS" - "Прыём SMS/MMS" - "Адправiць SMS/MMS" - "Прыём SMS/MMS" - "Адправiць SMS/MMS" - "Змена налад" - "Намалюйце ўверсе" - "Доступ да паведамленняў" - "Камера" - "Запісаць аўдыё" - "Прайграванне аўдыё" - "Счытаць буфер абмену" - "Змяніць буфер абмену" + "Медыя" + "Прылада" + + "Кароткі" "Сярэдні" "Доўгі" + + + + + + "Ніколі не правяраць" "Праверка толькi для змесціва, абароненага DRM" @@ -367,6 +310,11 @@ "На экране ў выглядзе ліній" "У абалонцы adb dumpsys gfxinfo" + + "Адключаны" + "Паказаць вобласці з перабольшваннем" + "Паказаць лічыльнік перабольшвання" + "Стандартны ліміт" "Няма фонавых працэсаў" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index 0399ab6e5df..e38d0ff7fff 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -275,8 +275,8 @@ "Вы страцілі падключэнне для перадачы дадзеных, таму што вы пакінулі сваю хатнюю сетку з адключаным параметрам перадачы дадзеных у роўмінгу." "Уключыць" "Калі вы дазваляеце перадачу дадзеных у роўмінгу, з вас можа спаганяцца плата." - "За перадачу дадзеных у роўмінгу з вас могуць спаганяцца немаленькiя сумы."\n\n"Гэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага планшэта." - "За перадачу дадзеных у роўмінгу з вас могуць спаганяцца немаленькiя сумы."\n\n"Гэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага тэлефона." + "За перадачу дадзеных у роўмінгу з вас могуць спаганяцца немаленькiя сумы.\n\nГэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага планшэта." + "За перадачу дадзеных у роўмінгу з вас могуць спаганяцца немаленькiя сумы.\n\nГэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага тэлефона." "Дазволіць перадачу дадзеных у роўмінгу?" "Выбар аператара" "Выбраць аператара сеткі" @@ -322,8 +322,8 @@ "Патрабаваць лічбавы PIN-код або пароль для расшыфроўкі планшэта пры кожным уключэнні" "Патрабаваць лічбавы PIN-код або пароль для расшыфроўкі тэлефона пры кожным уключэнні" "Зашыфраваны" - "Вы можаце зашыфраваць свае ўліковыя запісы, налады, спампаваныя прыкладанні і іх дадзеныя, мультымедыйныя і іншыя файлы. Пасля зашыфроўкі планшэта кожны раз пры ўключэнні трэба будзе ўводзіць лічбавы PIN-код ці пароль для яго расшыфроўкі. Вы не зможаце расшыфраваць планшэт, акрамя як скінуўшы налады дадзеных, пасля чаго выдаляцца ўсе дадзеныя."\n\n"Шыфраванне займае гадзіну ці больш. Трэба пачынаць з зараджаным акумулятарам і трымаць планшэт падлучаным да завяршэння шыфравання. Калі перапыніць працэс шыфравання, будуць страчаны ўсе або некаторыя вашы дадзеныя." - "Вы можаце зашыфраваць свае ўліковыя запісы, налады, спампаваныя прыкладанні і іх дадзеныя, мультымедыйныя і іншыя файлы. Пасля зашыфроўкі тэлефона кожны раз пры ўключэнні трэба будзе ўводзіць лічбавы PIN-код ці пароль для яго расшыфроўкі. Вы не зможаце расшыфраваць тэлефон, акрамя як скінуўшы налады дадзеных, пасля чаго выдаляцца ўсе дадзеныя."\n\n"Шыфраванне займае гадзіну ці больш. Трэба пачынаць з зараджаным акумулятарам і трымаць тэлефон падлучаным да завяршэння шыфравання. Калі перапыніць працэс шыфравання, будуць страчаны ўсе або некаторыя вашы дадзеныя." + "Вы можаце зашыфраваць свае ўліковыя запісы, налады, спампаваныя прыкладанні і іх дадзеныя, мультымедыйныя і іншыя файлы. Пасля зашыфроўкі планшэта кожны раз пры ўключэнні трэба будзе ўводзіць лічбавы PIN-код ці пароль для яго расшыфроўкі. Вы не зможаце расшыфраваць планшэт, акрамя як скінуўшы налады дадзеных, пасля чаго выдаляцца ўсе дадзеныя.\n\nШыфраванне займае гадзіну ці больш. Трэба пачынаць з зараджаным акумулятарам і трымаць планшэт падлучаным да завяршэння шыфравання. Калі перапыніць працэс шыфравання, будуць страчаны ўсе або некаторыя вашы дадзеныя." + "Вы можаце зашыфраваць свае ўліковыя запісы, налады, спампаваныя прыкладанні і іх дадзеныя, мультымедыйныя і іншыя файлы. Пасля зашыфроўкі тэлефона кожны раз пры ўключэнні трэба будзе ўводзіць лічбавы PIN-код ці пароль для яго расшыфроўкі. Вы не зможаце расшыфраваць тэлефон, акрамя як скінуўшы налады дадзеных, пасля чаго выдаляцца ўсе дадзеныя.\n\nШыфраванне займае гадзіну ці больш. Трэба пачынаць з зараджаным акумулятарам і трымаць тэлефон падлучаным да завяршэння шыфравання. Калі перапыніць працэс шыфравання, будуць страчаны ўсе або некаторыя вашы дадзеныя." "Шыфраваць планшэт" "Шыфраванне тэлефона" "Неабходна зарадзіць акумулятар і паўтарыць спробу." @@ -339,8 +339,8 @@ "Паўтарыце спробу праз ^1 с." "Увядзіце пароль" "Шыфраванне няўдалае" - "Шыфраванне было перапынена і не можа быць завершана. У выніку гэтага дадзеныя на вашым планшэце больш не даступныя."\n\n"Каб выкарыстоўваць планшэт далей, неабходна выканаць скід налад. Пры наладзе планшэта пасля перазагрузкі вы будзеце мець магчымасць аднавіць любыя дадзеныя, якія былі скапіяваны ў ваш уліковы запіс Google." - "Шыфраванне перапынена і не можа быць завершана. У выніку дадзеныя на вашым тэлефоне больш не даступныя."\n\n"Каб выкарыстоўваць тэлефон далей, неабходна выканаць скід налад. Пры наладзе тэлефона пасля перазагрузкі вы будзеце мець магчымасць аднавіць любыя дадзеныя, якія былі скапіяваныя ў ваш уліковы запіс Google." + "Шыфраванне было перапынена і не можа быць завершана. У выніку гэтага дадзеныя на вашым планшэце больш не даступныя.\n\nКаб выкарыстоўваць планшэт далей, неабходна выканаць скід налад. Пры наладзе планшэта пасля перазагрузкі вы будзеце мець магчымасць аднавіць любыя дадзеныя, якія былі скапіяваны ў ваш уліковы запіс Google." + "Шыфраванне перапынена і не можа быць завершана. У выніку дадзеныя на вашым тэлефоне больш не даступныя.\n\nКаб выкарыстоўваць тэлефон далей, неабходна выканаць скід налад. Пры наладзе тэлефона пасля перазагрузкі вы будзеце мець магчымасць аднавіць любыя дадзеныя, якія былі скапіяваныя ў ваш уліковы запіс Google." "Пераключэнне рэжыму ўводу" "Выберыце спосаб блак. экрана" "Блакав. рэз. капіяв." @@ -514,6 +514,7 @@ "Падключэнне" "Падключана" "Даступна" + "Выкарыстоўваецца" "Налады экрана" "Адключыцца?" "Будзе завершана вашай сувящь з прыладай :<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Адключана" "Недаступна, таму што NFC выключаная" "Android Beam" - "Калі гэтая функцыя ўключаная, вы можаце перадаваць змесціва прыкладання на іншыя сумяшчальныя з NFC прылады, утрымліваючы прылады блізка адна да адной. Напрыклад, вы можаце перадаваць старонкi з браўзэра, відэа з YouTube, кантакты і многае іншае."\n\n"Толькі злучыце прылады (звычайна заднімі бакамі) і дакраніцеся да экрана. Прыкладанне вызначыць, якая прылада падлучаецца." + "Калі гэтая функцыя ўключаная, вы можаце перадаваць змесціва прыкладання на іншыя сумяшчальныя з NFC прылады, утрымліваючы прылады блізка адна да адной. Напрыклад, вы можаце перадаваць старонкi з браўзэра, відэа з YouTube, кантакты і многае іншае.\n\nТолькі злучыце прылады (звычайна заднімі бакамі) і дакраніцеся да экрана. Прыкладанне вызначыць, якая прылада падлучаецца." "Выяўленне сеткавых службаў" "Дазволіць прыкладанням з іншых прылад знаходзіць прыкладанні на гэтай прыладзе" "Wi-Fi" @@ -620,7 +621,7 @@ "Абаронены з дапамогай %1$s" ", абароненых з дапамогай %1$s" "Няма" - "Каб павысіць дакладнасць размяшчэння і для іншых мэтаў, %1$s хоча ўключыць сеткавае сканаванне, нават калі Wi-Fi выключаны."\n\n"Дазволіць для ўсіх прыкладанняў, якія патрабуецца адсканаваць?" + "Каб павысіць дакладнасць размяшчэння і для іншых мэтаў, %1$s хоча ўключыць сеткавае сканаванне, нават калі Wi-Fi выключаны.\n\nДазволіць для ўсіх прыкладанняў, якія патрабуецца адсканаваць?" "Дазволіць" "Адхiлiць" "Падлучыцца" @@ -632,8 +633,8 @@ "Адмяніць" "Усё роўна прапусціць" "Не прапускаць" - "УВАГА: ваш аператар можа патрабаваць дадатковую аплату за перадачу дадзеных."\n\n" Наладка планшэта можа запатрабаваць значнай сеткавай актыўнасці." - "УВАГА: ваш аператар можа патрабаваць дадатковую аплату за перадачу дадзеных."\n\n" Наладка тэлефона можа запатрабаваць значнай сеткавай актыўнасці." + "УВАГА: ваш аператар можа патрабаваць дадатковую аплату за перадачу дадзеных.\n\n Наладка планшэта можа запатрабаваць значнай сеткавай актыўнасці." + "УВАГА: ваш аператар можа патрабаваць дадатковую аплату за перадачу дадзеных.\n\n Наладка тэлефона можа запатрабаваць значнай сеткавай актыўнасці." "УВАГА: Пакуль у вас няма падключэння да Iнтэрнэту, планшэт не зможа праверыць, цi абноўлена праграмнае забеспячэнне." "УВАГА: Пакуль у вас няма падключэння да Iнтэрнэту, тэлефон не зможа праверыць, цi абноўлена праграмнае забеспячэнне." "Планшэт не змог падключыцца да гэтай сеткі Wi-Fi." @@ -773,9 +774,9 @@ "PIN-код SIM-карты" "Няправільны PIN-код" "PIN-код не супадае" - "Немагчыма змяніць PIN-код."\n"Магчыма, няправільны PIN-код." + "Немагчыма змяніць PIN-код.\nМагчыма, няправільны PIN-код." "PIN-код SIM-карты паспяхова зменены" - "Немагчыма змяніць стан блакавання SIM-карты."\n"Магчыма, няправільны PIN-код." + "Немагчыма змяніць стан блакавання SIM-карты.\nМагчыма, няправільны PIN-код." "ОК" "Адмяніць" "Стан планшэта" @@ -918,9 +919,9 @@ "Скід да завадскіх налад" "Сцірае ўсе дадзеныя з планшэта" "Сцірае ўсе дадзеныя на тэлефоне" - "Гэта дазволіць сцерці ўсе дадзеныя з ""унутранага сховiшча вашага планшэта"" , у тым ліку: "\n\n
  • "ваш улiковы запiс Google"
  • \n
  • "сістэмныя дадзеныя, а таксама дадзеныя прыкладанняў і налады"
  • \n
  • "спампаваныя прыкладанні"
  • - "Гэта дазволіць сцерці ўсе дадзеныя з ""унутранага сховiшча вашага тэлефона"" , у тым ліку: "\n\n
  • "ваш улiковы запiс Google"
  • \n
  • "сістэмныя дадзеныя, а таксама дадзеныя прыкладанняў і налады"
  • \n
  • "спампаваныя прыкладанні"
  • - \n\n"У дадзены момант вы зайшлі ў наступныя ўліковыя запісы:"\n + "Гэта дазволіць сцерці ўсе дадзеныя з ""унутранага сховiшча вашага планшэта"" , у тым ліку: \n\n"
  • "ваш улiковы запiс Google"
  • \n
  • "сістэмныя дадзеныя, а таксама дадзеныя прыкладанняў і налады"
  • \n
  • "спампаваныя прыкладанні"
  • + "Гэта дазволіць сцерці ўсе дадзеныя з ""унутранага сховiшча вашага тэлефона"" , у тым ліку: \n\n"
  • "ваш улiковы запiс Google"
  • \n
  • "сістэмныя дадзеныя, а таксама дадзеныя прыкладанняў і налады"
  • \n
  • "спампаваныя прыкладанні"
  • + \n\n"У дадзены момант вы зайшлі ў наступныя ўліковыя запісы:\n"
  • "Музыка"
  • \n
  • "Фатаграфіі"
  • \n
  • "Іншыя дадзеныя карыстальніка"
  • \n\n"Каб выдаліць музыку, фатаграфіі і іншыя дадзеныя карыстальніка, трэба ачысціць ""USB-назапашвальнік""." \n\n"Каб выдаліць музыку, фатаграфіі і іншыя дадзеныя карыстальніка, трэба выдаліць інфармацыю з ""SD-карты""." @@ -1110,7 +1111,7 @@ "Паказаць кэшаваныя працэсы" "Скід налад прыкладання" "Скінуць налады прыкладання?" - "Гэта дазволіць скінуць усе налады для:"\n\n
  • "адключаных прыкладанняў"
  • \n
  • "адключаных паведамленняў прыкладанняў"
  • \n
  • "прыкладанняў па змаўчанні для дзеянняў"
  • \n
  • "абмежаванняў фонавых дадзеных для прыкладанняў"
  • \n\n"Вы не страціце дадзеныя прыкладанняў."
    + "Гэта дазволіць скінуць усе налады для:\n\n"
  • "адключаных прыкладанняў"
  • \n
  • "адключаных паведамленняў прыкладанняў"
  • \n
  • "прыкладанняў па змаўчанні для дзеянняў"
  • \n
  • "абмежаванняў фонавых дадзеных для прыкладанняў"
  • \n\n"Вы не страціце дадзеныя прыкладанняў."
    "Скід прыкладанняў" "Кіраванне вольным месцам" "Фільтр" @@ -1245,9 +1246,7 @@ "Каб перакл., націсніце Ctrl-Space" "Па змаўчанні" "Раскладкі клавіятуры" - "Карыстальніцкі слоўнік" - "Асабісты слоўнік" - "Асабістыя слоўнікі" + "Персанальны слоўнік" "Дадаць" "Дадаць у слоўнік" @@ -1308,6 +1307,16 @@ "Уключыце параметр у меню сiлкавання, каб прыняць справаздачу пра памылку" "Прадухіляць ад пераходу ў рэжым сну" "Экран ніколі не ўвайдзе ў рэжым сну падчас зарадкі" + + + + + + + + + + "Дазволіць несапраўдныя месцы" "Дазволіць несапраўдныя месцы" "Дазволіць адладку USB?" @@ -1320,11 +1329,13 @@ "Абараніць USB-назапашвальнік" "Прыкладанні павінны запытваць дазвол на чытанне USB-назапашвальніка" "Абараніць USB-назапашвальнік?" - "Калі USB-назапашвальнік абаронены, прыкладанні павінны запытваць дазвол на чытанне дадзеных са знешняй памяці."\n\n"Некаторыя прыкладанні могуць не працаваць, пакуль не будуць абноўлены распрацоўшчыкамі." + "Калі USB-назапашвальнік абаронены, прыкладанні павінны запытваць дазвол на чытанне дадзеных са знешняй памяці.\n\nНекаторыя прыкладанні могуць не працаваць, пакуль не будуць абноўлены распрацоўшчыкамі." "Абараніць SD-карту" "Прыкладанні павінны запытваць дазвол на чытанне SD-карты" "Абараніць SD-карту?" - "Калі SD-карта абаронена, прыкладанні павінны запытваць дазвол на чытанне дадзеных са знешняй памяці."\n\n"Некаторыя прыкладанні могуць не працаваць, пакуль не будуць абноўлены распрацоўшчыкамі." + "Калі SD-карта абаронена, прыкладанні павінны запытваць дазвол на чытанне дадзеных са знешняй памяці.\n\nНекаторыя прыкладанні могуць не працаваць, пакуль не будуць абноўлены распрацоўшчыкамі." + "Лакальны тэрмінал" + "Уключэнне прыкладання тэрмінала, якое прапануе доступ да лакальнай абалонкі" "Выберыце гаджэт" "Выберыце віджэт" "Стварыць віджэт і дазволіць доступ?" @@ -1345,11 +1356,11 @@ "Службы" "Сістэма" "Жэсты павелiчэння" - "Калi гэта функцыя ўключана, можна наблiжаць i аддаляць, тройчы нацiснуўшы на экран."\n\n"Наблiзiйшы, можна:"\n
    • "Панарама: працягнiце два цi больш пальцаў па экране."
    • \n
    • "Дадаць узровень наблiжэння: звядзiце пальцы або развядзiце ў розныя бакi."
    \n\n"Таксама можна часова павялiчыць тое, што пад пальцам, тройчы нацiснуўшы i ўтрымлiваючы. У павялiчаным стане можна працягнуць палец, каб адкрыць iншыя часткi экрана. Паднiмiце палец, каб вярнуцца да папярэдняга."\n\n"Майце на ўвазе: патройнае нацiсканне працуе паўсюль, акрамя клавiятуры i панэлi навiгацыi."
    + "Калi гэта функцыя ўключана, можна наблiжаць i аддаляць, тройчы нацiснуўшы на экран.\n\nНаблiзiйшы, можна:\n"
    • "Панарама: працягнiце два цi больш пальцаў па экране."
    • \n
    • "Дадаць узровень наблiжэння: звядзiце пальцы або развядзiце ў розныя бакi."
    \n\n"Таксама можна часова павялiчыць тое, што пад пальцам, тройчы нацiснуўшы i ўтрымлiваючы. У павялiчаным стане можна працягнуць палец, каб адкрыць iншыя часткi экрана. Паднiмiце палец, каб вярнуцца да папярэдняга.\n\nМайце на ўвазе: патройнае нацiсканне працуе паўсюль, акрамя клавiятуры i панэлi навiгацыi."
    "Цэтлiк даступнасцi" "Укл." "Адключана" - "Калі гэта функцыя ўключана, вы можаце хутка ўключыць функцыі доступу ў два крокі:"\n\n".Крок 1: Націсніце і ўтрымлівайце кнопку сілкавання, пакуль не пачуеце гук ці не адчуце вібрацыю."\n\n"Крок 2: Дакраніцеся да экрану двума пальцамі і ўтрымлівайце іх, пакуль не пачуеце гук пацверджання."\n\n"Калі прылада мае некалькіх карыстальнікаў, скарыстайцеся гэтым цэтлiкам на экране блакіроўкi, каб часова дазволіць доступ, пакуль прылада не будзе разблакіравана." + "Калі гэта функцыя ўключана, вы можаце хутка ўключыць функцыі доступу ў два крокі:\n\n.Крок 1: Націсніце і ўтрымлівайце кнопку сілкавання, пакуль не пачуеце гук ці не адчуце вібрацыю.\n\nКрок 2: Дакраніцеся да экрану двума пальцамі і ўтрымлівайце іх, пакуль не пачуеце гук пацверджання.\n\nКалі прылада мае некалькіх карыстальнікаў, скарыстайцеся гэтым цэтлiкам на экране блакіроўкi, каб часова дазволіць доступ, пакуль прылада не будзе разблакіравана." "Вялікі шрыфт" "Павелiчэнне экрану" "Аўтаматычнае абнаўленне павелiчэння экрана" @@ -1371,6 +1382,26 @@ "Прыкладанне TalkBack забяспечвае вусную зваротную сувязь, каб дапамагаць сляпым карыстальнікам і карыстальнікам з дрэнным зрокам. Усталяваць яго бясплатна з Android Market?" "Няма апісання." "Налады" + + + + + + + + + + + + + + + + + + + + "Батарэя" "На што расходуецца акумулятар" "Адсутнiчаюць дадзеныя пра выкарыстанне акумулятара." @@ -1410,8 +1441,10 @@ "Wi-Fi працуе" "Планшэт" "Тэлефон" - "Пераданыя дадзеныя" - "Атрыманыя дадзеныя" + "Мабільныя дадзеныя адпраўлены" + "Атрыманы мабільныя дадзеныя" + "Дадзеныя ў сетцы Wi-Fi адпраўлены" + "Атрыманы дадзеныя ў сетцы Wi-Fi" "Аўдыё" "Відэа" "Час працы" @@ -1465,6 +1498,7 @@ "Тон" "Уплывае на тон вуснага тэксту" "Мова" + "Мова не выбрана" "Задае голас прамаўлення тэкту на канкрэтнай мове" "Паслухайце прыклад" "Прайграць кароткую дэманстрацыю сінтэзу гаворкі" @@ -1599,7 +1633,7 @@ "EAP не падтрымліваецца." "Немагчыма наладзіць злучэнне EAP Wi-Fi падчас усталявння. Пазней вы можаце зрабіць гэта ў наладах у раздзеле \"Бесправадныя і правадныя сеткі\"." "Падлучэнне можа заняць некалькі хвілін..." - "Націсніце кнопку ""\"Далей\""", каб працягнуць усталёўку."\n\n"Націсніце кнопку ""\"Назад\""", каб падключыцца да іншай сеткі Wi-Fi." + "Націсніце кнопку ""\"Далей\""", каб працягнуць усталёўку.\n\nНацісніце кнопку ""\"Назад\""", каб падключыцца да іншай сеткі Wi-Fi." "Сінхранізацыя ўкл." "Сінхранізацыя адключаная" "Памылка сінхранізацыі" @@ -1627,7 +1661,7 @@ "Gmail" "Каляндар" "Кантакты" - "Вітаем у службе сінхранізацыі Google!"" "\n"Падчас сінхранізацыі дадзеных Google дазваляе атрымліваць у любым месцы доступ да кантактаў, сустрэч і многага іншага." + "Вітаем у службе сінхранізацыі Google!"" \nПадчас сінхранізацыі дадзеных Google дазваляе атрымліваць у любым месцы доступ да кантактаў, сустрэч і многага іншага." "Параметры сiнхранiзацыi прыкладання" "Сынхранізацыя дадзеных" "Змяніць пароль" @@ -1681,8 +1715,7 @@ "Мігнуць вакном пры чарчэнні з дапамогай GPU" "Паказаць абнаўленнi апаратнага пласта" "Апаратныя пласты набываюць зялёны колер, калi абнаўляюцца" - "Паказаць перарасход GPU" - "Ад лепшага да горшага: сіні, зялёны, светла-чырвоны, чырвоны" + "Адладка перамалёўкі GPU" "Адкл. апаратн. накладання" "Заўсёды выкарыстоўваць GPU для экраннай кампаноўкі" "Уключэнне слядоў OpenGL" @@ -1743,11 +1776,11 @@ "Адключыць фонавыя дадзеныя ў мабільных сетках. Пры наяўнасці будуць выкарыстоўвацца немабільныя сеткі." "Каб абмежаваць зыходныя дадзеныя для гэтага прыкладання, спачатку ўсталюйце ліміт мабільных дадзеных." "Абмежаваць зыходныя дадзеныя?" - "Гэта функцыя можа перашкаджаць працы прыкладанняў, якiя залежаць ад фонавых дадзеных, толькi калі даступныя мабільныя сеткі."\n\n"Вы можаце знайсці больш адпаведнае прымяненне дадзеным у наладах прыкладання." + "Гэта функцыя можа перашкаджаць працы прыкладанняў, якiя залежаць ад фонавых дадзеных, толькi калі даступныя мабільныя сеткі.\n\nВы можаце знайсці больш адпаведнае прымяненне дадзеным у наладах прыкладання." "Абмежаваць зыходныя дадзеныя можна толькі тады, калі вы ўсталявалі ліміт мабільных дадзеных." "Уключыць аўтасінхр. дадзеных?" - "Любыя змены, унесеныя ва ўліковы запіс на вэб-сайце, будуць аўтаматычна скапіраваны ў памяць планшэта."\n\n"Некаторыя ўліковыя запісы таксама могуць аўтаматычна капіраваць любыя змены ў тэлефоне, якія вы робіце на вэб-сайце. Уліковы запіс Google працуе наступным чынам."\n\n"Каб выбраць, якія віды інфармацыі сінхранiзаваць у кожным уліковым запісе, перайдзіце ў меню: Налады > Уліковыя запісы." - "Любыя змены, унесеныя ва ўліковы запіс на вэб-сайце, будуць аўтаматычна скапіраваныя ў памяць тэлефона."\n\n"Некаторыя ўліковыя запісы таксама могуць аўтаматычна капіраваць любыя змены ў тэлефоне, якія вы робіце на вэб-сайце. Уліковы запіс Google працуе наступным чынам."\n\n"Каб выбраць, якія віды інфармацыі сінхранiзаваць у кожным уліковым запісе, перайдзіце ў меню: Налады > Уліковыя запісы." + "Любыя змены, унесеныя ва ўліковы запіс на вэб-сайце, будуць аўтаматычна скапіраваны ў памяць планшэта.\n\nНекаторыя ўліковыя запісы таксама могуць аўтаматычна капіраваць любыя змены ў тэлефоне, якія вы робіце на вэб-сайце. Уліковы запіс Google працуе наступным чынам.\n\nКаб выбраць, якія віды інфармацыі сінхранiзаваць у кожным уліковым запісе, перайдзіце ў меню: Налады > Уліковыя запісы." + "Любыя змены, унесеныя ва ўліковы запіс на вэб-сайце, будуць аўтаматычна скапіраваныя ў памяць тэлефона.\n\nНекаторыя ўліковыя запісы таксама могуць аўтаматычна капіраваць любыя змены ў тэлефоне, якія вы робіце на вэб-сайце. Уліковы запіс Google працуе наступным чынам.\n\nКаб выбраць, якія віды інфармацыі сінхранiзаваць у кожным уліковым запісе, перайдзіце ў меню: Налады > Уліковыя запісы." "Адключыць аўтасінхр. дадзеных?" "Гэта дасць магчымасць захаваць трафік і акумулятар, але вам трэба будзе сінхранiзаваць кожны ўліковы запіс уручную, каб збіраць свежую інфармацыю. І вы не будзеце атрымліваць апавяшчэнні, калі з\'явяцца абнаўленні." "Дата скіду цыкла выкарыстання" @@ -1756,12 +1789,12 @@ "Усталяваць папярэджанне аб выкарыстанні дадзеных" "Усталяваць ліміт выкарыстання дадзеных" "Абмежаванне выкарыстання дадзеных" - "Ваша падключэнне для перадачы дадзеных будзе завершана пасля дасягнення пэўнага лiмiту."\n\n"Паколькi выкарыстанне дадзеных вызначаецца вашым планшэтам i ваш аператар можа спаганяць плату iншым чынам, старайцеся прытрымлiвацца лiмiту." - "Ваша падключэнне для перадачы дадзеных "\n" будзе завершана пасля дасягнення пэўнага лiмiту."\n"{2/}Паколькi выкарыстанне дадзеных вызначаецца вашым тэлефонам i ваш аператар можа спаганяць плату iншым чынам, старайцеся прытрымлiвацца лiмiту." + "Ваша падключэнне для перадачы дадзеных будзе завершана пасля дасягнення пэўнага лiмiту.\n\nПаколькi выкарыстанне дадзеных вызначаецца вашым планшэтам i ваш аператар можа спаганяць плату iншым чынам, старайцеся прытрымлiвацца лiмiту." + "Ваша падключэнне для перадачы дадзеных \n будзе завершана пасля дасягнення пэўнага лiмiту.\n{2/}Паколькi выкарыстанне дадзеных вызначаецца вашым тэлефонам i ваш аператар можа спаганяць плату iншым чынам, старайцеся прытрымлiвацца лiмiту." "Абмежаваць зыходныя дадзеныя?" "Калі абмежаваць фонавую перадачу мабiльных дадзеных, некаторыя прыкладанні і службы не будуць працаваць пры падключэннi да сеткі Wi-Fi." - "Калі абмежаваць фонавую перадачу мабільных дадзеных, некаторыя прыкладанні і паслугі не будуць працаваць, калі вы падключаны да сеткi Wi-Fi сеткі."\n\n"Гэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага планшэта." - "Калі абмежаваць фонавую перадачу мабільных дадзеных, некаторыя прыкладанні і паслугі не будуць працаваць, калі вы падключаны да сеткi Wi-Fi сеткі."\n\n"Гэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага тэлефона." + "Калі абмежаваць фонавую перадачу мабільных дадзеных, некаторыя прыкладанні і паслугі не будуць працаваць, калі вы падключаны да сеткi Wi-Fi сеткі.\n\nГэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага планшэта." + "Калі абмежаваць фонавую перадачу мабільных дадзеных, некаторыя прыкладанні і паслугі не будуць працаваць, калі вы падключаны да сеткi Wi-Fi сеткі.\n\nГэты параметр распаўсюджваецца на ўсіх карыстальнікаў гэтага тэлефона." "^1""^2 "\n"папярэджанне " "^1""^2"\n"ліміт" "Выдаленыя прыкладанні" @@ -1848,8 +1881,8 @@ "Карыстальнік" "Абмежаваны профiль" "Дад. новага карыстальніка" - "Вы можаце адкрыць доступ да гэтай прылады іншым карыстальнiкам шляхам стварэння дадатковых карыстальнікаў. Кожны карыстальнік мае свой уласны раздзел, на якім ён можа наладзіць уласныя прыкладанні, шпалеры і гэтак далей. Карыстальнікі таксама могуць наладжваць параметры планшэта, напрыклад Wi-Fi, якія ўплываюць на ўсіх."\n\n"Пасля стварэння новага карыстальніка, ён павінен прайсці праз працэс усталёўкі."\n\n"Любы карыстальнік можа прымаць абноўленыя дазволы на прыкладанне ад імён усіх іншых карыстальнікаў." - "Пасля стварэння новага карыстальніка ён павінен прайсці праз працэс усталёўкі."\n\n"Любы карыстальнік можа прымаць абноўленыя дазволы на прыкладанне ад імён усіх іншых карыстальнікаў." + "Вы можаце адкрыць доступ да гэтай прылады іншым карыстальнiкам шляхам стварэння дадатковых карыстальнікаў. Кожны карыстальнік мае свой уласны раздзел, на якім ён можа наладзіць уласныя прыкладанні, шпалеры і гэтак далей. Карыстальнікі таксама могуць наладжваць параметры планшэта, напрыклад Wi-Fi, якія ўплываюць на ўсіх.\n\nПасля стварэння новага карыстальніка, ён павінен прайсці праз працэс усталёўкі.\n\nЛюбы карыстальнік можа прымаць абноўленыя дазволы на прыкладанне ад імён усіх іншых карыстальнікаў." + "Пасля стварэння новага карыстальніка ён павінен прайсці праз працэс усталёўкі.\n\nЛюбы карыстальнік можа прымаць абноўленыя дазволы на прыкладанне ад імён усіх іншых карыстальнікаў." "Наладзiць карыстальнiкаў?" "Пераканайцеся, што чалавек мае магчымасць узяць планшэт i паднесцi яго да твару" "Наладзiць профiль?" @@ -1880,6 +1913,12 @@ "Гэты параметр распаўсюджвае на ўсіх карыстальнікаў гэтага тэлефона." "Змяніць мову" "Змяніць памер шрыфту" + + + + + + "Паказваць паведамленні" "Даведка" "Уліковы запіс для змесціва" diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml index 10d6f2abe35..2f75b390b50 100644 --- a/res/values-bg/arrays.xml +++ b/res/values-bg/arrays.xml @@ -233,7 +233,8 @@ "Местоположение" "Лични" "Съобщения" - "Устройство" + "Мултимедия" + "Устройство"
    "местоположение с ниска точност" @@ -267,6 +268,17 @@ "възпроизвеждане на звук" "четене на буферната памет" "промяна на буферната памет" + "бутони за мултимедия" + "фокусиране на звука" + "основна сила на звука" + "сила на звука за глас" + "сила на звука при звънене" + "сила на звука за мултимедия" + "сила на звука на будилника" + "сила на звука за известия" + "сила на звука за Bluetooth" + "оставяне в будно състояние" + "наблюдение на местоположението" "Местоположение" @@ -300,12 +312,33 @@ "Възпроизвеждане на звук" "Четене на буферната памет" "Промяна на буферната памет" + "Бутони за мултимедия" + "Фокусиране на звука" + "Основна сила на звука" + "Сила на звука за глас" + "Сила на звука при звънене" + "Сила на звука за мултимедия" + "Сила на звука на будилника" + "Сила на звука при известие" + "Сила на звука за Bluetooth" + "Оставяне в будно състояние" + "Местоположение" "Кратко" "Средно" "Продължително" + + "Dalvik" + "ART" + "ART (отстраняване на грешки)" + + + "Използване на Dalvik" + "Използване на ART" + "Използване на версията на ART за отстраняване на грешки" + "Никога да не се проверява" "Проверка само за DRM съдържание" @@ -367,6 +400,11 @@ "На екрана като линии" "In adb shell dumpsys gfxinfo" + + "Изключено" + "Области за преизчертаване: Показв." + "Брояч на преизчертаване: Показване" + "Стандартно ограничение" "Няма процеси на заден план" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 621ceea1e9a..72221bbf447 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -275,8 +275,8 @@ "Изгубихте връзката за данни, защото сте оставили домашната си мрежа с изключен роуминг на данни." "Включване" "Разрешаването на роуминг на данни може да доведе до висока такса за роуминг!" - "Разрешаването на роуминг на данни може да доведе до високи такси!"\n\n"Настройката засяга всички потребители на този таблет." - "Разрешаването на роуминг на данни може да доведе до високи такси!"\n\n"Настройката засяга всички потребители на този телефон." + "Разрешаването на роуминг на данни може да доведе до високи такси!\n\nНастройката засяга всички потребители на този таблет." + "Разрешаването на роуминг на данни може да доведе до високи такси!\n\nНастройката засяга всички потребители на този телефон." "Да се разреши ли роуминг на данни?" "Избор на оператора" "Избиране на мрежов оператор" @@ -322,8 +322,8 @@ "Изисква се цифров PIN код или парола за разшифроване на таблета ви при всяко включване" "Изисква се цифров PIN код или парола за разшифроване на телефона ви при всяко включване" "Шифровано" - "Можете да шифровате своите профили, настройки, изтеглени приложения и данните им, мултимедийни и други файлове. След като направите това за таблета си, трябва да въвеждате цифров ПИН код или парола, за да го разшифровате при всяко включване. Не можете да отмените процеса освен чрез възстановяване на фабричните настройки, което ще изтрие всичките ви данни."\n\n"Шифроването отнема най-малко един час. Трябва да започнете със заредена батерия и таблетът ви да е включен към захранването, докато процесът завърши. Ако го прекъснете, ще загубите някои или всичките си данни." - "Можете да шифровате своите профили, настройки, изтеглени приложения и данните им, мултимедийни и други файлове. След като направите това за телефона си, трябва да въвеждате цифров ПИН код или парола, за да го разшифровате при всяко включване. Не можете да отмените процеса освен чрез възстановяване на фабричните настройки, което ще изтрие всичките ви данни."\n\n"Шифроването отнема най-малко един час. Трябва да започнете със заредена батерия и телефонът ви да е включен към захранването, докато процесът завърши. Ако го прекъснете, ще загубите някои или всичките си данни." + "Можете да шифровате своите профили, настройки, изтеглени приложения и данните им, мултимедийни и други файлове. След като направите това за таблета си, трябва да въвеждате цифров ПИН код или парола, за да го разшифровате при всяко включване. Не можете да отмените процеса освен чрез възстановяване на фабричните настройки, което ще изтрие всичките ви данни.\n\nШифроването отнема най-малко един час. Трябва да започнете със заредена батерия и таблетът ви да е включен към захранването, докато процесът завърши. Ако го прекъснете, ще загубите някои или всичките си данни." + "Можете да шифровате своите профили, настройки, изтеглени приложения и данните им, мултимедийни и други файлове. След като направите това за телефона си, трябва да въвеждате цифров ПИН код или парола, за да го разшифровате при всяко включване. Не можете да отмените процеса освен чрез възстановяване на фабричните настройки, което ще изтрие всичките ви данни.\n\nШифроването отнема най-малко един час. Трябва да започнете със заредена батерия и телефонът ви да е включен към захранването, докато процесът завърши. Ако го прекъснете, ще загубите някои или всичките си данни." "Шифроване на таблета" "Шифроване на телефона" "Заредете батерията си и опитайте отново." @@ -339,8 +339,8 @@ "Опитайте отново след ^1 секунди." "Въведете паролата си" "Шифроването не бе успешно" - "Шифроването бе прекъснато и не може да завърши. В резултат на това вече няма достъп до данните на таблета ви."\n\n"За да възобновите използването му, трябва да възстановите фабричните настройки. След това, когато го настройвате, ще имате възможност да възстановите всички данни, на които е направено резервно копие в профила ви в Google." - "Шифроването бе прекъснато и не може да завърши. В резултат на това вече няма достъп до данните на телефона ви."\n\n"За да възобновите използването му, трябва да възстановите фабричните настройки. След това, когато го настройвате, ще имате възможност да възстановите всички данни, на които е направено резервно копие в профила ви в Google." + "Шифроването бе прекъснато и не може да завърши. В резултат на това вече няма достъп до данните на таблета ви.\n\nЗа да възобновите използването му, трябва да възстановите фабричните настройки. След това, когато го настройвате, ще имате възможност да възстановите всички данни, на които е направено резервно копие в профила ви в Google." + "Шифроването бе прекъснато и не може да завърши. В резултат на това вече няма достъп до данните на телефона ви.\n\nЗа да възобновите използването му, трябва да възстановите фабричните настройки. След това, когато го настройвате, ще имате възможност да възстановите всички данни, на които е направено резервно копие в профила ви в Google." "Превключване на метода на въвеждане" "Закл. на екрана: Избор" "Резервно заключване" @@ -514,6 +514,7 @@ "Установява се връзка" "Установена е връзка" "Налице" + "Използва се" "Настройки за дисплея" "Да се изключи ли?" "Това ще прекрати връзката ви със:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Изключено" "Не е налице, защото КБП е изключена" "Android Beam" - "Когато тази функция е включена, можете да излъчвате съдържание от приложенията до друго устройство с поддръжка за КБП, като държите устройствата близо едно до друго. Например можете да излъчвате страници от Браузър, видеоклипове от YouTube, контакти от Хора и др."\n\n"Трябва само да поставите устройствата едно до друго (обикновено задните им страни), след което да докоснете екрана си. Приложението определя какво се излъчва." + "Когато тази функция е включена, можете да излъчвате съдържание от приложенията до друго устройство с поддръжка за КБП, като държите устройствата близо едно до друго. Например можете да излъчвате страници от Браузър, видеоклипове от YouTube, контакти от Хора и др.\n\nТрябва само да поставите устройствата едно до друго (обикновено задните им страни), след което да докоснете екрана си. Приложението определя какво се излъчва." "Откриване на услугата за мрежа" "Разрешаване на приложенията от други устройства да намират приложения на това устройство" "Wi‑Fi" @@ -620,7 +621,7 @@ "Защитено с %1$s" ", защитено с %1$s" "Няма" - "За да подобри точността на местоположението и за други цели, %1$s иска да включи сканирането за мрежи дори когато Wi-Fi е изключен."\n\n"Искате ли да разрешите това за всички приложения, които искат да сканират?" + "За да подобри точността на местоположението и за други цели, %1$s иска да включи сканирането за мрежи дори когато Wi-Fi е изключен.\n\nИскате ли да разрешите това за всички приложения, които искат да сканират?" "Разрешаване" "Отказ" "Свързване" @@ -632,8 +633,8 @@ "Отказ" "Пропускане въпреки това" "Без пропускане" - "Предупреждение: Това може да доведе до допълнителни таксувания за данни от оператора."\n\n"Настройката на таблета може да изисква значителна активност на мрежата." - "Предупреждение: Това може да доведе до допълнителни таксувания за данни от оператора."\n\n"Настройката на телефона може да изисква значителна активност на мрежата." + "Предупреждение: Това може да доведе до допълнителни таксувания за данни от оператора.\n\nНастройката на таблета може да изисква значителна активност на мрежата." + "Предупреждение: Това може да доведе до допълнителни таксувания за данни от оператора.\n\nНастройката на телефона може да изисква значителна активност на мрежата." "ПРЕДУПРЕЖДЕНИЕ: Докато нямате връзка с интернет, таблетът няма да може да потвърди, че софтуерът ви е актуален." "ПРЕДУПРЕЖДЕНИЕ: Докато нямате връзка с интернет, телефонът няма да може да потвърди, че софтуерът ви е актуален." "Таблетът не можа да се свърже с тази Wi‑Fi мрежа." @@ -773,9 +774,9 @@ "PIN за SIM карта" "Неправилен ПИН" "ПИН кодовете не са идентични" - "ПИН кодът не може да се промени."\n"Възможен неправилен ПИН." + "ПИН кодът не може да се промени.\nВъзможен неправилен ПИН." "Успешна промяна на PIN за SIM карта" - "Не може да се промени състоянието на заключване на SIM картата."\n"Възможен неправилен ПИН." + "Не може да се промени състоянието на заключване на SIM картата.\nВъзможен неправилен ПИН." "OK" "Отказ" "Състояние на таблета" @@ -918,9 +919,9 @@ "Възстановяване на фабричните настройки" "Изтрива всички данни на таблета" "Изтрива всички данни на телефона" - "Това ще изтрие всички данни от ""вътрешното хранилище"" на таблета ви, включително:"\n\n
  • "профила ви в Google;"
  • \n
  • "данни и настройки от системата и приложенията;"
  • \n
  • "изтеглени приложения."
  • - "Това ще изтрие всички данни от ""вътрешното хранилище"" на телефона ви, включително:"\n\n
  • "профила ви в Google;"
  • \n
  • "данни и настройки от системата и приложенията;"
  • \n
  • "изтеглени приложения."
  • - \n\n"Понастоящем сте влезли в следните профили:"\n + "Това ще изтрие всички данни от ""вътрешното хранилище"" на таблета ви, включително:\n\n"
  • "профила ви в Google;"
  • \n
  • "данни и настройки от системата и приложенията;"
  • \n
  • "изтеглени приложения."
  • + "Това ще изтрие всички данни от ""вътрешното хранилище"" на телефона ви, включително:\n\n"
  • "профила ви в Google;"
  • \n
  • "данни и настройки от системата и приложенията;"
  • \n
  • "изтеглени приложения."
  • + \n\n"Понастоящем сте влезли в следните профили:\n"
  • "Музика"
  • \n
  • "Снимки"
  • \n
  • "Други потребителски данни"
  • \n\n"За да изчистите музиката, снимките и другите потребителски данни, трябва да се изтрие ""USB хранилището""." \n\n"За да изчистите музиката, снимките и другите потребителски данни, трябва да се изтрие ""SD картата""." @@ -1105,7 +1106,7 @@ "Кеширани процеси" "Нулиране" "Да се нулират предпоч.?" - "Това ще нулира всички предпочитания за:"\n\n" "
  • "деактивираните приложения;"
  • \n" "
  • "известията за деактивирани приложения;"
  • \n" "
  • "стандартните приложения за действия;"
  • \n" "
  • "ограниченията на данните на заден план за приложенията."
  • \n\n" Няма да загубите данни от приложенията."
    + "Това ще нулира всички предпочитания за:\n\n "
  • "деактивираните приложения;"
  • \n" "
  • "известията за деактивирани приложения;"
  • \n" "
  • "стандартните приложения за действия;"
  • \n" "
  • "ограниченията на данните на заден план за приложенията."
  • \n\n" Няма да загубите данни от приложенията."
    "Нулиране на приложенията" "Управление на място" "Филтриране" @@ -1240,9 +1241,7 @@ "За превключване натиснете „Ctrl“-интервал" "По подразбиране" "Клавиатурни подредби" - "Потребителски речник" - "Личен речник" - "Лични речници" + "Личен речник" "Добавяне" "Добавяне в речника" @@ -1303,6 +1302,11 @@ "Включване на опцията за получаване на сигнал за програмна грешка в менюто за захранване" "Да остане активен" "Екранът никога няма да е в спящ режим при зареждане" + "Активиране на регистрационния файл за анализ на пакетите в команден ред за Bluetooth с протокола HCI" + "Заснемане на всички пакети за Bluetooth с протокола HCI във файла" + "Избор на изпълним модул" + "Избор на изпълним модул" + "Да се рестартира ли за промяна на изпълнимия модул от „%1$s“ на „%2$s“?" "Разрешаване на измислени местоположения" "Разрешаване на измислени местоположения" "Разрешаване на отстраняването на грешки през USB?" @@ -1315,11 +1319,13 @@ "Да се защити USB хранилището" "Прилож. трябва да поискат разрешение за четене на USB хран." "Да се защити ли USB хранилището?" - "Когато USB паметта е защитена, приложенията трябва да поискат разрешение за четене на данни от външното хранилище."\n\n"Някои от тях може да не работят, докато не бъдат актуализирани от съответните програмисти." + "Когато USB паметта е защитена, приложенията трябва да поискат разрешение за четене на данни от външното хранилище.\n\nНякои от тях може да не работят, докато не бъдат актуализирани от съответните програмисти." "Да се защити SD картата" "Прилож. трябва да поискат разрешение за четене на SD картата" "Да се защити ли SD картата?" - "Когато SD картата е защитена, приложенията трябва да поискат разрешение за четене на данни от външното хранилище."\n\n"Някои от тях може да не работят, докато не бъдат актуализирани от съответните програмисти." + "Когато SD картата е защитена, приложенията трябва да поискат разрешение за четене на данни от външното хранилище.\n\nНякои от тях може да не работят, докато не бъдат актуализирани от съответните програмисти." + "Локален терминал" + "Актив. на прил. за терминал с достъп до локалния команден ред" "Избор на притурка" "Избор на приспособление" "Да се създаде ли приспособлението и да се разреши ли достъп?" @@ -1340,11 +1346,11 @@ "Услуги" "Система" "Жестове за увеличение" - "Когато тази функция е включена, можете да увеличите или намалите мащаба, като докоснете екрана три пъти."\n\n"При увеличен мащаб можете:"\n
    • "Да извършите панорамно преместване: Плъзнете два или повече пръста по екрана."
    • \n
    • "Да коригирате нивото на мащаба: Съберете заедно или разгънете два или повече пръста."
    \n\n"Можете също временно да промените мащаба на това, което е под пръста ви, като докоснете три пъти и задържите. В това променено състояние можете да плъзнете пръста си, за да изследвате различни части на екрана. Вдигнете го, за да се върнете към предишното състояние."\n\n"Забележка: Докосването три пъти за промяна на мащаба работи навсякъде освен при клавиатурата и навигационната лента."
    + "Когато тази функция е включена, можете да увеличите или намалите мащаба, като докоснете екрана три пъти.\n\nПри увеличен мащаб можете:\n"
    • "Да извършите панорамно преместване: Плъзнете два или повече пръста по екрана."
    • \n
    • "Да коригирате нивото на мащаба: Съберете заедно или разгънете два или повече пръста."
    \n\n"Можете също временно да промените мащаба на това, което е под пръста ви, като докоснете три пъти и задържите. В това променено състояние можете да плъзнете пръста си, за да изследвате различни части на екрана. Вдигнете го, за да се върнете към предишното състояние.\n\nЗабележка: Докосването три пъти за промяна на мащаба работи навсякъде освен при клавиатурата и навигационната лента."
    "Пряк път към ф-ята за достъпност" "Включено" "Изкл." - "Когато тази функция е включена, можете бързо да активирате тези за достъпността в две стъпки:"\n\n"Стъпка 1: Натиснете и задръжте бутона за захранване, докато чуете звук или усетите вибриране."\n\n"Стъпка 2: Докоснете и задръжте два пръста, докато чуете звуково потвърждение."\n\n"Ако устройството има няколко потребители, използването на този пряк път върху заключения екран временно активира функциите за достъпност, докато устройството се отключи." + "Когато тази функция е включена, можете бързо да активирате тези за достъпността в две стъпки:\n\nСтъпка 1: Натиснете и задръжте бутона за захранване, докато чуете звук или усетите вибриране.\n\nСтъпка 2: Докоснете и задръжте два пръста, докато чуете звуково потвърждение.\n\nАко устройството има няколко потребители, използването на този пряк път върху заключения екран временно активира функциите за достъпност, докато устройството се отключи." "Голям текст" "Ниво на мащаба на екрана" "Ниво на мащаба на екрана: Автоакт." @@ -1366,6 +1372,16 @@ "TalkBack осигурява устна обратна връзка, за да помогне на потребители с увредено и намалено зрение. Искате ли да го инсталирате безплатно от Android Market?" "Няма описание." "Настройки" + "Отпечатване" + "Настройки за отпечатване" + "Услуги" + "Да се използва ли %1$s?" + "%1$s може да получава отпечатваните от вас документи. Възможно е те да съдържат поверителни данни." + "Няма инсталирани услуги" + "Настройки" + "Добавяне на принтери" + "Включено" + "Изключено" "Батерия" "Какво е използвало батерията" "Няма данни за употр. на батерията." @@ -1405,8 +1421,10 @@ "Работещ Wi‑Fi" "Таблет" "Телефон" - "Изпратени данни" - "Получени данни" + "Мобилните данни са изпратени" + "Мобилните данни са получени" + "Данните през Wi-Fi са изпратени" + "Данните през Wi-Fi са получени" "Аудио" "Видео" "Продължителност на включване" @@ -1460,6 +1478,7 @@ "Височина" "Отразява се на тона на изговорения текст" "Език" + "Езикът не е избран" "Задава глас за конкретен език за изговорения текст" "Чуйте пример" "Възпроизвеждане на кратка демонстрация на синтезиране на реч" @@ -1594,7 +1613,7 @@ "Не се поддържа EAP." "Не можете да конфигурирате Wi‑Fi връзка с редактиране на точката за достъп (EAP) по време на настройката. След това можете да го направите от „Настройки“ > „Кабелни и безжични мрежи“." "Свързването може да отнеме няколко минути..." - "Докоснете ""Напред"", за да продължите с настройката."\n\n"Докоснете ""Назад"", за да се свържете с друга Wi‑Fi мрежа." + "Докоснете ""Напред"", за да продължите с настройката.\n\nДокоснете ""Назад"", за да се свържете с друга Wi‑Fi мрежа." "Синхронизирането е активирано" "Синхронизирането е деактивирано" "Грешка при синхронизирането." @@ -1676,8 +1695,7 @@ "Примигв. на изгледи в прозорците при начертаване с GPU" "Актуализации на слоевете на хардуера" "Примигв. на слоевете на хардуера в зелено при актуал." - "Преизчертаване от GPU" - "От най-добро към най-лошо: синьо, зелено, светло червено, червено" + "Отстран. на проблеми, свързани с преизчертаване от ГП" "Хардуерни наслагвания: Деактив." "Винаги да се използва GPU за изграждане на екрана" "Трасирания на OpenGL: Акт." @@ -1738,11 +1756,11 @@ "Деактив. на данните на заден план за моб. мрежи. Ще се използват немобилни, ако са налице." "За по-малко данни на заден план за прилож. намалете мобилните." "Да се ограничат ли данните на заден план?" - "Тази функция може да доведе до спиране на работата на приложение, което зависи от данните на заден план, когато са налице само мобилни мрежи."\n\n"Можете да намерите по-подходящи контроли за използването на данните в наличните в приложението настройки." + "Тази функция може да доведе до спиране на работата на приложение, което зависи от данните на заден план, когато са налице само мобилни мрежи.\n\nМожете да намерите по-подходящи контроли за използването на данните в наличните в приложението настройки." "Ограничаването на данните на заден план е възможно само когато сте задали ограничение на мобилните данни." "Да се вкл. ли авт. синхр. на данни?" - "Всички промени, които правите в профилите си в мрежата, ще бъдат копирани автоматично в таблета ви."\n\n"Някои профили могат също да копират автоматично в мрежата извършените от вас промени в таблета. Профилът в Google работи по този начин."\n\n"За да изберете какви видове информация да се синхронизира във всеки профил, отворете „Настройки“ > „Профили“." - "Всички промени, които правите в профилите си в мрежата, ще бъдат копирани автоматично в телефона ви."\n\n"Някои профили могат също да копират автоматично в мрежата извършените от вас промени в телефона. Профилът в Google работи по този начин."\n\n"За да изберете какви видове информация да се синхронизира във всеки профил, отворете „Настройки“ > „Профили“." + "Всички промени, които правите в профилите си в мрежата, ще бъдат копирани автоматично в таблета ви.\n\nНякои профили могат също да копират автоматично в мрежата извършените от вас промени в таблета. Профилът в Google работи по този начин.\n\nЗа да изберете какви видове информация да се синхронизира във всеки профил, отворете „Настройки“ > „Профили“." + "Всички промени, които правите в профилите си в мрежата, ще бъдат копирани автоматично в телефона ви.\n\nНякои профили могат също да копират автоматично в мрежата извършените от вас промени в телефона. Профилът в Google работи по този начин.\n\nЗа да изберете какви видове информация да се синхронизира във всеки профил, отворете „Настройки“ > „Профили“." "Да се изкл. ли авт. синхр. на данни?" "Това ще спести използването на данни и батерия, но ще трябва да синхронизирате ръчно всеки профил, за да събирате скорошна информация. Няма да получавате и известия, когато има актуализации." "Дата на възстановяване на цикъла за използване" @@ -1751,12 +1769,12 @@ "Задаване на предупреждение за ползване на данни" "Задаване на ограничение за ползване на данни" "Ограничаване на използването на данни" - "Мобилната ви връзка за данни ще бъде деактивирана при достигане на посочения лимит."\n\n"Тъй като използването им се измерва от таблета ви, а операторът ви може да го отчита по различен начин, помислете дали да не използвате умерен лимит." - "Мобилната ви връзка за данни ще бъде деактивирана при достигане на посочения лимит."\n\n"Тъй като използването им се измерва от телефона ви, а операторът ви може да го отчита по различен начин, помислете дали да не използвате умерен лимит." + "Мобилната ви връзка за данни ще бъде деактивирана при достигане на посочения лимит.\n\nТъй като използването им се измерва от таблета ви, а операторът ви може да го отчита по различен начин, помислете дали да не използвате умерен лимит." + "Мобилната ви връзка за данни ще бъде деактивирана при достигане на посочения лимит.\n\nТъй като използването им се измерва от телефона ви, а операторът ви може да го отчита по различен начин, помислете дали да не използвате умерен лимит." "Да се ограничат ли данните на заден план?" "Ако ограничите мобилните данни на заден план, някои приложения и услуги няма да работят, освен ако не сте свързани с Wi‑Fi мрежа." - "Ако ограничите мобилните данни на заден план, някои приложения и услуги няма да работят, освен ако не сте свързани с Wi‑Fi мрежа."\n\n"Настройката засяга всички потребители на този таблет." - "Ако ограничите мобилните данни на заден план, някои приложения и услуги няма да работят, освен ако не сте свързани с Wi‑Fi мрежа."\n\n"Настройката засяга всички потребители на този телефон." + "Ако ограничите мобилните данни на заден план, някои приложения и услуги няма да работят, освен ако не сте свързани с Wi‑Fi мрежа.\n\nНастройката засяга всички потребители на този таблет." + "Ако ограничите мобилните данни на заден план, някои приложения и услуги няма да работят, освен ако не сте свързани с Wi‑Fi мрежа.\n\nНастройката засяга всички потребители на този телефон." "^1"" ""^2"\n"предупреждение" "^1""^2"\n"ограничение" "Премахнати приложения" @@ -1843,8 +1861,8 @@ "Потребител" "Ограничен потр. профил" "Добавяне на нов потребител" - "Можете да споделите това устройство с други хора, като създадете допълнителни потребители. Всеки от тях има собствено работно пространство, което може да персонализира със свои собствени приложения, тапет и др. Те могат да коригират и настройки на таблета, като например Wi‑Fi, които засягат всички."\n\n"След като създадете нов потребител, той трябва да премине през процеса за настройка."\n\n"Всеки потребител може да приема разрешения на актуализирани приложения от името на всички останали." - "След като създадете нов потребител, той трябва да премине през процеса за настройка."\n\n"Всеки потребител може да приема разрешения на актуализирани приложения от името на всички останали." + "Можете да споделите това устройство с други хора, като създадете допълнителни потребители. Всеки от тях има собствено работно пространство, което може да персонализира със свои собствени приложения, тапет и др. Те могат да коригират и настройки на таблета, като например Wi‑Fi, които засягат всички.\n\nСлед като създадете нов потребител, той трябва да премине през процеса за настройка.\n\nВсеки потребител може да приема разрешения на актуализирани приложения от името на всички останали." + "След като създадете нов потребител, той трябва да премине през процеса за настройка.\n\nВсеки потребител може да приема разрешения на актуализирани приложения от името на всички останали." "Настройване на потребителя?" "Уверете се, че човекът е налице да вземе таблета и да настрои работното си пространство" "Ще настроите ли потребителския профил сега?" @@ -1875,6 +1893,9 @@ "Настройката засяга всички потребители на този телефон." "Промяна на езика" "Промяна на размера на шрифта" + "Ограничения" + "Oграничения: Премахване" + "Промяна на ПИН кода" "Известия: Показване" "Помощ" "Профил за съдържание" diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml index 02cadad83dd..938f74d496b 100644 --- a/res/values-ca/arrays.xml +++ b/res/values-ca/arrays.xml @@ -153,12 +153,12 @@
    "Sempre" - "Només quan està endollat" + "Només quan s\'estigui carregant" "Mai (augmenta l\'ús de dades)" "Sempre" - "Només quan està endollat" + "Només quan s\'estigui carregant" "Mai" @@ -200,7 +200,7 @@ "Desactivat" "Alerta" - "Vibra" + "Vibració" "Cap" @@ -233,7 +233,8 @@ "Ubicació" "Personal" "Missatgeria" - "Dispositiu" + "Multimèdia" + "Dispositiu" "ubicació aproximada" @@ -267,6 +268,17 @@ "reprodueix l\'àudio" "llegeix el porta-retalls" "modifica el porta-retalls" + "botons multimèdia" + "enfocament de l\'àudio" + "volum general" + "volum de la veu" + "volum del to" + "volum multimèdia" + "volum de l\'alarma" + "volum de notificació" + "volum del Bluetooth" + "actiu" + "supervisa la ubicació" "Ubicació" @@ -300,12 +312,33 @@ "Reprodueix l\'àudio" "Llegeix el porta-retalls" "Modifica el porta-retalls" + "Botons de multimèdia" + "Enfocament de l\'àudio" + "Volum general" + "Volum de la veu" + "Volum del to" + "Volum de multimèdia" + "Volum de l\'alarma" + "Volum de notificació" + "Volum de Bluetooth" + "Actiu" + "Ubicació" "Curt" "Mitjà" "Llarg" + + "Dalvik" + "ART" + "ART (depuració)" + + + "Fes servir Dalvik" + "Fes servir ART" + "Fes servir la compilació de depuració ART" + "No comprovis mai" "Comprova només el contingut DRM" @@ -354,12 +387,12 @@ "Cap" "Logcat" "Systrace (gràfics)" - "Pila de trucades de glGetError" + "Pila de trucades a glGetError" "Desactivada" - "Pintar blava regió retall no rect." - "Dest. ordres dibuix provad. en verd" + "Àrea retall no rectangular en blau" + "Ressalta ordres de dibuix provats en verd" "Desactivat" @@ -367,6 +400,11 @@ "A la pantalla com a línies" "A adb shell dumpsys gfxinfo" + + "Desactiva" + "Mostra les àrees modificades" + "Mostra comptador modificacions" + "Límit estàndard" "Sense processos en segon pla" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index e462178af96..e3e5d46f1d5 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -275,8 +275,8 @@ "Heu perdut la connectivitat de dades perquè heu abandonat la xarxa local amb la itinerància de dades desactivada." "Activa-la" "Si permets la itinerància de dades, els costos poden ser elevats." - "Si permets la itinerància de dades, és possible que se t\'apliquin càrrecs per itinerància significatius."\n\n"Aquesta configuració afecta tots els usuaris de la tauleta." - "Si permets la itinerància de dades, és possible que se t\'apliquin càrrecs per itinerància significatius."\n\n"Aquesta configuració afecta tots els usuaris del telèfon." + "Si permets la itinerància de dades, és possible que se t\'apliquin càrrecs per itinerància significatius.\n\nAquesta configuració afecta tots els usuaris de la tauleta." + "Si permets la itinerància de dades, és possible que se t\'apliquin càrrecs per itinerància significatius.\n\nAquesta configuració afecta tots els usuaris del telèfon." "Vols permetre la itinerància de dades?" "Selecció d\'operador" "Selecciona un operador de xarxa" @@ -322,8 +322,8 @@ "Sol·licita un PIN numèric o una contrasenya per desencriptar la tauleta cada vegada que s\'engegui" "Sol·licita un PIN numèric o una contrasenya per desencriptar el telèfon cada vegada que s\'engegui" "Encriptat" - "Pots encriptar els comptes, les configuracions, les aplicacions baixades i les seves dades, els elements multimèdia i altres fitxers. Una vegada encriptada la teva tauleta, has d\'introduir un PIN numèric o una contrasenya per desencriptar-la cada vegada que l\'engeguis (només podràs desencriptar-la restablint les dades de fàbrica i esborrant-ne totes les dades)."\n\n"El procés d\'encriptació triga fins a una hora. Cal que iniciïs aquest procés amb la bateria carregada i que mantinguis la tauleta connectada fins que no s\'hagi completat l\'encriptació. Si s\'interromp el procés d\'encriptació, perdràs totes les teves dades o bé una part." - "Pots encriptar els comptes, les configuracions, les aplicacions baixades i les seves dades, els elements multimèdia i altres fitxers. Una vegada encriptat el telèfon, necessitaràs un PIN numèric o contrasenya per desencriptar-lo cada vegada que l\'encenguis (només podràs desencriptar-la restablint les dades de fàbrica i esborrant-ne totes les dades)."\n\n"El procés d\'encriptació triga fins a una hora. Cal que iniciïs aquest procés amb la bateria carregada i que mantinguis el telèfon connectat fins que no s\'hagi completat l\'encriptació. Si s\'interromp el procés d\'encriptació, perdràs totes les teves dades o bé una part." + "Pots encriptar els comptes, les configuracions, les aplicacions baixades i les seves dades, els elements multimèdia i altres fitxers. Una vegada encriptada la teva tauleta, has d\'introduir un PIN numèric o una contrasenya per desencriptar-la cada vegada que l\'engeguis (només podràs desencriptar-la restablint les dades de fàbrica i esborrant-ne totes les dades).\n\nEl procés d\'encriptació triga fins a una hora. Cal que iniciïs aquest procés amb la bateria carregada i que mantinguis la tauleta connectada fins que no s\'hagi completat l\'encriptació. Si s\'interromp el procés d\'encriptació, perdràs totes les teves dades o bé una part." + "Pots encriptar els comptes, les configuracions, les aplicacions baixades i les seves dades, els elements multimèdia i altres fitxers. Una vegada encriptat el telèfon, necessitaràs un PIN numèric o contrasenya per desencriptar-lo cada vegada que l\'encenguis (només podràs desencriptar-la restablint les dades de fàbrica i esborrant-ne totes les dades).\n\nEl procés d\'encriptació triga fins a una hora. Cal que iniciïs aquest procés amb la bateria carregada i que mantinguis el telèfon connectat fins que no s\'hagi completat l\'encriptació. Si s\'interromp el procés d\'encriptació, perdràs totes les teves dades o bé una part." "Encripta la tauleta" "Encripta el telèfon" "Carrega la bateria i torna-ho a provar." @@ -339,8 +339,8 @@ "Torna-ho a provar d\'aquí a ^1 segons." "Escriu la contrasenya" "S\'ha produït un error en encriptar" - "S\'ha interromput l\'encriptació i no es pot completar. A conseqüència d\'això, ja no es pot accedir a les dades de la tauleta. "\n\n"Per reprendre l\'ús de la tauleta, cal que duguis a terme un restabliment de fàbrica. Quan configuris la tauleta després del restabliment, tindràs l\'oportunitat de restaurar les dades de les quals s\'hagi fet una còpia de seguretat al teu compte de Google." - "S\'ha interromput l\'encriptació i no es pot completar. A conseqüència d\'això, ja no es pot accedir a les dades del telèfon. "\n\n"Per reprendre l\'ús del telèfon, cal que duguis a terme un restabliment de fàbrica. Quan configuris el telèfon després del restabliment, tindràs l\'oportunitat de restaurar les dades de les quals s\'hagi fet una còpia de seguretat al teu compte de Google." + "S\'ha interromput l\'encriptació i no es pot completar. A conseqüència d\'això, ja no es pot accedir a les dades de la tauleta. \n\nPer reprendre l\'ús de la tauleta, cal que duguis a terme un restabliment de fàbrica. Quan configuris la tauleta després del restabliment, tindràs l\'oportunitat de restaurar les dades de les quals s\'hagi fet una còpia de seguretat al teu compte de Google." + "S\'ha interromput l\'encriptació i no es pot completar. A conseqüència d\'això, ja no es pot accedir a les dades del telèfon. \n\nPer reprendre l\'ús del telèfon, cal que duguis a terme un restabliment de fàbrica. Quan configuris el telèfon després del restabliment, tindràs l\'oportunitat de restaurar les dades de les quals s\'hagi fet una còpia de seguretat al teu compte de Google." "Canvia el mètode d\'introducció" "Tria bloqueig de pantalla" "Tria bloq. còpia seg." @@ -514,6 +514,7 @@ "S\'està connectant" "Connectada" "Disponible" + "En ús" "Mostra la configuració" "Vols desconnectar-te?" "Això posarà fi a la teva connexió amb:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Desactivada" "No disponible perquè la funció NFC està desactivada" "Android Beam" - "Si la funció Android Beam està activada, pots col·locar un dispositiu a prop d\'un altre compatible amb tecnologia NFC per compartir contingut d\'aplicacions. Per exemple, pots transferir pàgines del navegador, vídeos de YouTube, contactes i molt més."\n\n"Col·loca els dispositius a prop (generalment, l\'un d\'esquena a l\'altre) i, a continuació, toca la pantalla del teu dispositiu. L\'aplicació determina el contingut que es pot transferir." + "Si la funció Android Beam està activada, pots col·locar un dispositiu a prop d\'un altre compatible amb tecnologia NFC per compartir contingut d\'aplicacions. Per exemple, pots transferir pàgines del navegador, vídeos de YouTube, contactes i molt més.\n\nCol·loca els dispositius a prop (generalment, l\'un d\'esquena a l\'altre) i, a continuació, toca la pantalla del teu dispositiu. L\'aplicació determina el contingut que es pot transferir." "Detectabilitat del servei de xarxa" "Permet que les aplicacions d\'altres dispositius descobreixin les aplicacions d\'aquest" "Wi-Fi" @@ -620,7 +621,7 @@ "Protegida amb %1$s" ", protegida amb %1$s" "Cap" - "Per millorar la precisió de la ubicació i per a altres finalitats, %1$s vol activar la cerca de xarxes tot i que la connexió Wi-Fi estigui desactivada."\n\n"Vols permetre-ho per a totes les aplicacions que vulguin cercar xarxes?" + "Per millorar la precisió de la ubicació i per a altres finalitats, %1$s vol activar la cerca de xarxes tot i que la connexió Wi-Fi estigui desactivada.\n\nVols permetre-ho per a totes les aplicacions que vulguin cercar xarxes?" "Permet" "Denega" "Connecta" @@ -632,8 +633,8 @@ "Cancel·la" "Omet de totes maneres" "No ometis" - "ADVERTIMENT: És possible que l\'operador de telefonia mòbil apliqui càrrecs addicionals."\n\n"La configuració de la tauleta pot necessitar una gran quantitat d\'activitat de xarxa." - "ADVERTIMENT: És possible que l\'operador de telefonia mòbil apliqui càrrecs addicionals."\n\n"La configuració del telèfon pot necessitar una gran quantitat d\'activitat de xarxa." + "ADVERTIMENT: És possible que l\'operador de telefonia mòbil apliqui càrrecs addicionals.\n\nLa configuració de la tauleta pot necessitar una gran quantitat d\'activitat de xarxa." + "ADVERTIMENT: És possible que l\'operador de telefonia mòbil apliqui càrrecs addicionals.\n\nLa configuració del telèfon pot necessitar una gran quantitat d\'activitat de xarxa." "ADVERTIMENT: Fins que no tingueu una connexió a Internet, la tauleta no podrà verificar que el programari estigui actualitzat." "ADVERTIMENT: Fins que no tingueu una connexió a Internet, el telèfon no podrà verificar que el programari estigui actualitzat." "La tauleta no ha pogut connectar amb aquesta xarxa Wi-Fi." @@ -773,9 +774,9 @@ "PIN de la SIM" "PIN incorrecte" "Els codis PIN no coincideixen" - "No es pot canviar el PIN."\n"És possible que sigui incorrecte." + "No es pot canviar el PIN.\nÉs possible que sigui incorrecte." "PIN de la SIM canviat correctament" - "No es pot canviar l\'estat de bloqueig de la targeta SD."\n"És possible que el PIN sigui incorrecte." + "No es pot canviar l\'estat de bloqueig de la targeta SD.\nÉs possible que el PIN sigui incorrecte." "D\'acord" "Cancel·la" "Estat de la tauleta" @@ -918,9 +919,9 @@ "Restableix dades de fàbrica" "Esborra totes les dades de la tauleta" "Esborra totes les dades del telèfon" - "Aquesta acció esborrarà totes les dades de l\'""emmagatzematge intern"" de la tauleta, és a dir:"\n\n
  • "El teu compte de Google"
  • \n
  • "Les dades i la configuració del sistema i de les aplicacions"
  • \n
  • "Les aplicacions baixades"
  • - "Aquesta acció esborrarà totes les dades de l\'""emmagatzematge intern"" del teu telèfon, és a dir:"\n\n
  • "El teu compte de Google"
  • \n
  • "Les dades i la configuració del sistema i de les aplicacions"
  • \n
  • "Les aplicacions baixades"
  • - \n\n"Actualment has iniciat la sessió als comptes següents:"\n + "Aquesta acció esborrarà totes les dades de l\'""emmagatzematge intern"" de la tauleta, és a dir:\n\n"
  • "El teu compte de Google"
  • \n
  • "Les dades i la configuració del sistema i de les aplicacions"
  • \n
  • "Les aplicacions baixades"
  • + "Aquesta acció esborrarà totes les dades de l\'""emmagatzematge intern"" del teu telèfon, és a dir:\n\n"
  • "El teu compte de Google"
  • \n
  • "Les dades i la configuració del sistema i de les aplicacions"
  • \n
  • "Les aplicacions baixades"
  • + \n\n"Actualment has iniciat la sessió als comptes següents:\n"
  • "Música"
  • \n
  • "Fotos"
  • \n
  • "Altres dades de l\'usuari"
  • \n\n"Per esborrar també música, imatges i altres dades d\'usuari, cal esborrar l\'""emmagatzematge USB""." \n\n"Si vols suprimir música, imatges i altres dades de l\'usuari, cal que esborris la ""targeta SD""." @@ -1105,7 +1106,7 @@ "Mostra processos cau" "Restableix preferències" "Vols rest. pref. aplic.?" - "Es restabliran totes les preferències per a:"\n\n" "
  • "Aplicacions desactivades"
  • \n" "
  • "Notificacions de l\'aplicació desactivades"
  • \n" "
  • "Aplicacions predeterminades per a accions"
  • \n" "
  • "Restriccions de dades en segon pla per a aplicacions"
  • \n\n" No perdràs les dades de les aplicacions."
    + "Es restabliran totes les preferències per a:\n\n "
  • "Aplicacions desactivades"
  • \n" "
  • "Notificacions de l\'aplicació desactivades"
  • \n" "
  • "Aplicacions predeterminades per a accions"
  • \n" "
  • "Restriccions de dades en segon pla per a aplicacions"
  • \n\n" No perdràs les dades de les aplicacions."
    "Restableix les aplicac." "Gestiona l\'espai" "Filtre" @@ -1240,9 +1241,7 @@ "Per canviar, prem Ctrl + barra espaiadora" "Predeterminat" "Disposicions de teclat" - "Diccionari de l\'usuari" - "Diccionari personal" - "Diccionaris personals" + "Diccionari personal" "Afegeix" "Afegir al diccionari" @@ -1303,6 +1302,11 @@ "Inclou l\'opció de fer un informe d\'error al menú d\'encesa" "Pantalla activa" "La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se" + "Activa el registre de cerca HCI de Bluetooth" + "Captura tots els paquets HCI de Bluetooth en un fitxer" + "Selecciona temps execució" + "Selecciona temps execució" + "Vols tornar a iniciar per canviar el temps d\'execució de %1$s a %2$s?" "Permet les ubicacions simulades" "Permet les ubicacions simulades" "Voleu permetre la depuració USB?" @@ -1315,11 +1319,13 @@ "Protegeix emmagatzematge USB" "Les aplicacions han de sol·licitar permís per llegir l\'emmagatzematge USB" "Vols protegir l\'emmagatzematge USB?" - "Quan l\'emmagatzematge USB està protegit, les aplicacions han de sol·licitar permís per llegir les dades de l\'emmagatzematge extern."\n\n"És possible que algunes aplicacions no funcionin fins que els desenvolupadors no les actualitzin." + "Quan l\'emmagatzematge USB està protegit, les aplicacions han de sol·licitar permís per llegir les dades de l\'emmagatzematge extern.\n\nÉs possible que algunes aplicacions no funcionin fins que els desenvolupadors no les actualitzin." "Protecció de la targeta SD" "Les aplicacions han de sol·licitar permís per llegir la targeta SD" "Vols protegir la targeta SD?" - "Si la targeta SD està protegida, les aplicacions han de sol·licitar permís per llegir les dades de l\'emmagatzematge extern."\n\n"És possible que algunes aplicacions no funcionin fins que els desenvolupadors no les actualitzin." + "Si la targeta SD està protegida, les aplicacions han de sol·licitar permís per llegir les dades de l\'emmagatzematge extern.\n\nÉs possible que algunes aplicacions no funcionin fins que els desenvolupadors no les actualitzin." + "Terminal local" + "Activa l\'aplicació de terminal que ofereix accés al shell local" "Selecció de gadget" "Selecció de widget" "Vols crear el widget i permetre l\'accés?" @@ -1340,11 +1346,11 @@ "Serveis" "Sistema" "Gestos d\'ampliació" - "Quan aquesta funció està activada, pots ampliar o allunyar si piques tres cops la pantalla."\n\n"Quan ampliïs, pots fer el següent."\n
    • "Panoràmica: arrossega dos dits o més per la pantalla."
    • \n
    • "Ajustar el nivell de zoom: apropa dos o més dits o bé separa\'ls."
    \n\n"També pots ampliar de manera temporal el que tinguis a sota del dit si piques tres cops i mantens premut. En aquest estat ampliat, pots arrossegar el dit per explorar diverses parts de la pantalla. Aixeca el dit per tornar a l\'estat previ."\n\n"Nota: Pica tres cops per ampliar a tot arreu tret de la barra de navegació i el teclat."
    + "Quan aquesta funció està activada, pots ampliar o allunyar si piques tres cops la pantalla.\n\nQuan ampliïs, pots fer el següent.\n"
    • "Panoràmica: arrossega dos dits o més per la pantalla."
    • \n
    • "Ajustar el nivell de zoom: apropa dos o més dits o bé separa\'ls."
    \n\n"També pots ampliar de manera temporal el que tinguis a sota del dit si piques tres cops i mantens premut. En aquest estat ampliat, pots arrossegar el dit per explorar diverses parts de la pantalla. Aixeca el dit per tornar a l\'estat previ.\n\nNota: Pica tres cops per ampliar a tot arreu tret de la barra de navegació i el teclat."
    "Drecera d\'accessibilitat" "Activada" "Desactiva" - "Quan aquesta funció està activada, pots activar ràpidament les funcions d\'accessibilitat en dos passos."\n\n"Pas 1: mantén premut el botó d\'engegada fins que sentis un so o notis una vibració."\n\n"Pas 2: mantén premut amb dos dits fins que sentis una confirmació d\'àudio."\n\n"Si el dispositiu té diversos usuaris, fer servir aquesta drecera a la pantalla de bloqueig activa temporalment l\'accessibilitat fins que es desbloqueja el dispositiu." + "Quan aquesta funció està activada, pots activar ràpidament les funcions d\'accessibilitat en dos passos.\n\nPas 1: mantén premut el botó d\'engegada fins que sentis un so o notis una vibració.\n\nPas 2: mantén premut amb dos dits fins que sentis una confirmació d\'àudio.\n\nSi el dispositiu té diversos usuaris, fer servir aquesta drecera a la pantalla de bloqueig activa temporalment l\'accessibilitat fins que es desbloqueja el dispositiu." "Text gran" "Ampliació de pantalla" "Actualitza ampliació automàticament" @@ -1366,6 +1372,16 @@ "TalkBack proporciona comentaris per veu per ajudar usuaris invidents i amb visió disminuïda. Vols instal·lar-lo de manera gratuïta des d\'Android Market?" "No s\'ha proporcionat cap descripció." "Configuració" + "Impressió" + "Configuració d\'impressió" + "Serveis" + "Vols fer servir %1$s?" + "%1$s pot rebre els documents que imprimeixis. És possible que aquests documents continguin dades confidencials." + "No hi ha cap servei instal·lat" + "Configuració" + "Afegeix impressores" + "Activat" + "Desactivat" "Bateria" "Elements que han utilitzat la bateria" "Dades d\'ús de bateria no disp." @@ -1405,8 +1421,10 @@ "Wi-Fi en execució" "Tauleta" "Telèfon" - "Dades enviades" - "Dades rebudes" + "S\'han enviat les dades mòbils" + "S\'han rebut les dades mòbils" + "S\'han enviat les dades Wi‑Fi" + "S\'han rebut les dades Wi‑Fi" "Àudio" "Vídeo" "Temps d\'activació" @@ -1460,6 +1478,7 @@ "To" "Afecta el to del text parlat" "Idioma" + "No has seleccionat cap idioma" "Defineix la llengua utilitzada per a la síntesi de veu" "Vull escoltar un exemple" "Reprodueix una breu demostració de síntesi de veu" @@ -1594,7 +1613,7 @@ "EAP no és compatible." "No pots configurar una connexió Wi-Fi EAP durant la configuració. Quan hagi finalitzat, pots dur a terme aquesta acció a Configuració > Sense fil i xarxes." "La connexió pot trigar una estona..." - "Toca ""Següent"" per continuar amb la configuració."\n\n"Toca ""Enrere"" per connectar a una altra xarxa Wi‑Fi." + "Toca ""Següent"" per continuar amb la configuració.\n\nToca ""Enrere"" per connectar a una altra xarxa Wi‑Fi." "Sincronització activada" "Sincronització desactivada" "Error de sincronització" @@ -1622,7 +1641,7 @@ "Gmail" "Calendari" "Contactes" - "Et donem la benvinguda a Google Sync!"" "\n"La sincronització de dades que ha ideat Google per permetre l\'accés als contactes, a les cites i a molts més elements des de qualsevol lloc." + "Et donem la benvinguda a Google Sync!"" \nLa sincronització de dades que ha ideat Google per permetre l\'accés als contactes, a les cites i a molts més elements des de qualsevol lloc." "Configuració de la sincronització d\'aplicacions" "Dades i sincronització" "Canvia la contrasenya" @@ -1676,8 +1695,7 @@ "Actualitza vistes de finestres creades amb GPU" "Mostra actualitzacions capes" "Il·lumina capes de maquinari en verd en actualitzar-se" - "Mostra superació de GPU" - "De millor a pitjor: blau, verd, vermell clar, vermell" + "Depura modificacions GPU" "Desactiva superposicions HW" "Usa sempre GPU per combinar pantalles" "Activa seguiment d\'OpenGL" @@ -1738,11 +1756,11 @@ "Desactiva dades en segon pla en xarxes mòbils. S\'utilitzaran xarxes no mòbils si estan disponibles." "Per restringir dades en segon pla, estableix un límit de dades mòbils." "Vols restringir les dades en segon pla?" - "Aquesta funció pot provocar que una aplicació que depengui de les dades en segon pla deixi de funcionar quan hi hagi només xarxes mòbils disponibles."\n\n"Pots trobar més controls d\'ús de dades adequats a la configuració disponible a l\'aplicació." + "Aquesta funció pot provocar que una aplicació que depengui de les dades en segon pla deixi de funcionar quan hi hagi només xarxes mòbils disponibles.\n\nPots trobar més controls d\'ús de dades adequats a la configuració disponible a l\'aplicació." "Només pots restringir les dades en segon pla si has establert un límit de dades mòbils." "Activar sincronització automàtica?" - "Els canvis que facis als teus comptes al web es reflectiran automàticament a la tauleta."\n\n"Alguns comptes com ara els comptes de Google també reflectiran al web els canvis que facis a la tauleta."\n\n"Per triar els tipus d\'informació que vols que se sincronitzi en cada compte, vés a Configuració > Comptes." - "Els canvis que facis als teus comptes al web es reflectiran automàticament al telèfon."\n\n"Alguns comptes, com ara els comptes de Google, també reflectiran al web els canvis que hagis fet al telèfon."\n\n"Per triar els tipus d\'informació que vols que se sincronitzi en cada compte, vés a Configuració > Comptes." + "Els canvis que facis als teus comptes al web es reflectiran automàticament a la tauleta.\n\nAlguns comptes com ara els comptes de Google també reflectiran al web els canvis que facis a la tauleta.\n\nPer triar els tipus d\'informació que vols que se sincronitzi en cada compte, vés a Configuració > Comptes." + "Els canvis que facis als teus comptes al web es reflectiran automàticament al telèfon.\n\nAlguns comptes, com ara els comptes de Google, també reflectiran al web els canvis que hagis fet al telèfon.\n\nPer triar els tipus d\'informació que vols que se sincronitzi en cada compte, vés a Configuració > Comptes." "Vols desactivar sinc. au. dades?" "Es conservaran les dades i l\'ús de bateria, però hauràs de sincronitzar els comptes manualment per recopilar la informació recent. I no rebràs notificacions quan hi hagi actualitzacions." "Data de restabliment del cicle d\'ús" @@ -1751,13 +1769,13 @@ "Defineix l\'advertiment d\'ús de dades" "Defineix el límit d\'ús de dades" "Limitació de l\'ús de dades" - "La teva connexió de dades mòbil es desactivarà quan s\'arribi al límit especificat."\n\n"Com que la tauleta mesura la utilització de dades i és possible que l\'operador faci un recompte diferent de la utilització, et recomanem que facis servir un límit prudent." - "La teva connexió de dades mòbil es desactivarà quan s\'arribi al límit especificat."\n\n"Com que el telèfon mesura la utilització de dades i és possible que l\'operador faci un recompte diferent de la utilització, et recomanem que facis servir un límit prudent." + "La teva connexió de dades mòbil es desactivarà quan s\'arribi al límit especificat.\n\nCom que la tauleta mesura la utilització de dades i és possible que l\'operador faci un recompte diferent de la utilització, et recomanem que facis servir un límit prudent." + "La teva connexió de dades mòbil es desactivarà quan s\'arribi al límit especificat.\n\nCom que el telèfon mesura la utilització de dades i és possible que l\'operador faci un recompte diferent de la utilització, et recomanem que facis servir un límit prudent." "Vols restringir les dades en segon pla?" "Si restringeixes les dades mòbils en segon pla, algunes aplicacions i serveis no funcionaran si no estàs connectat a una xarxa Wi-Fi." - "Si restringeixes les dades mòbils en segon pla, algunes aplicacions i serveis no funcionaran si no estàs connectat a una xarxa Wi-Fi."\n\n"Aquesta configuració afecta tots els usuaris de la tauleta." - "Si restringeixes les dades mòbils en segon pla, algunes aplicacions i serveis no funcionaran si no estàs connectat a una xarxa Wi-Fi."\n\n"Aquesta configuració afecta tots els usuaris del telèfon." - " ^1 "" "" ^2 "" "\n" ""advertència" + "Si restringeixes les dades mòbils en segon pla, algunes aplicacions i serveis no funcionaran si no estàs connectat a una xarxa Wi-Fi.\n\nAquesta configuració afecta tots els usuaris de la tauleta." + "Si restringeixes les dades mòbils en segon pla, algunes aplicacions i serveis no funcionaran si no estàs connectat a una xarxa Wi-Fi.\n\nAquesta configuració afecta tots els usuaris del telèfon." + " ^1 "" "" ^2 "" \n ""advertència" "^1"" ""^2"\n"limitació" "Aplicacions eliminades" "Aplicacions i usuaris eliminats" @@ -1843,8 +1861,8 @@ "Usuari" "Perfil restringit" "Afegir un usuari nou" - "Pots compartir aquest dispositiu amb altres persones si crees usuaris addicionals. Cada usuari té el seu propi espai, que podrà personalitzar amb les seves aplicacions, els seus fons de pantalla i altres elements. Els usuaris també podran ajustar la configuració de la tauleta, com ara la Wi-Fi, que pot afectar altres persones."\n\n"Quan hagis creat un usuari nou, aquesta persona haurà de dur a terme un procés de configuració."\n\n"Qualsevol usuari pot acceptar els permisos actualitzats d\'aplicacions en nom de la resta d\'usuaris." - "Quan afegeixis un usuari nou, aquesta persona ha de dur a terme un procés de configuració."\n\n"Qualsevol usuari pot acceptar permisos d\'aplicacions actualitzats en nom de la resta d\'usuaris." + "Pots compartir aquest dispositiu amb altres persones si crees usuaris addicionals. Cada usuari té el seu propi espai, que podrà personalitzar amb les seves aplicacions, els seus fons de pantalla i altres elements. Els usuaris també podran ajustar la configuració de la tauleta, com ara la Wi-Fi, que pot afectar altres persones.\n\nQuan hagis creat un usuari nou, aquesta persona haurà de dur a terme un procés de configuració.\n\nQualsevol usuari pot acceptar els permisos actualitzats d\'aplicacions en nom de la resta d\'usuaris." + "Quan afegeixis un usuari nou, aquesta persona ha de dur a terme un procés de configuració.\n\nQualsevol usuari pot acceptar permisos d\'aplicacions actualitzats en nom de la resta d\'usuaris." "Vols configurar l\'usuari ara?" "Comprova que l\'usuari té accés a la tauleta i pot configurar el seu espai." "Vols configurar el perfil ara?" @@ -1875,6 +1893,9 @@ "Aquesta configuració afecta tots els usuaris del telèfon." "Canvi de l\'idioma" "Canvi del cos de lletra" + "Restriccions" + "Suprimeix restriccions" + "Canvia el PIN" "Mostra les notificacions" "Ajuda" "Compte per al contingut" diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml index 0fa7e0532da..fda9dcd73da 100644 --- a/res/values-cs/arrays.xml +++ b/res/values-cs/arrays.xml @@ -233,7 +233,8 @@ "Poloha" "Osobní" "SMS a MMS" - "Zařízení" + "Média" + "Zařízení"
    "přibližná poloha" @@ -267,6 +268,17 @@ "přehrávání zvuku" "číst obsah schránky" "upravit obsah schránky" + "tlačítka médií" + "zaměření zvuku" + "hlavní hlasitost" + "hlasitost hlasu" + "hlasitost vyzvánění" + "hlasitost médií" + "hlasitost budíku" + "hlasitost oznámení" + "hlasitost Bluetooth" + "Zakázat režim spánku" + "sledovat polohu" "Poloha" @@ -300,12 +312,33 @@ "Přehrávání zvuku" "Číst obsah schránky" "Upravit obsah schránky" + "Tlačítka médií" + "Zaměření zvuku" + "Hlavní hlasitost" + "Hlasitost hlasu" + "Hlasitost vyzvánění" + "Hlasitost médií" + "Hlasitost budíku" + "Hlasitost oznámení" + "Hlasitost Bluetooth" + "Zakázat režim spánku" + "Poloha" "Krátká" "Střední" "Dlouhá" + + "Dalvik" + "ART" + "ART (režim ladění)" + + + "Použít program Dalvik" + "Použít program ART" + "Použít ladicí sestavení programu ART" + "Nikdy nekontrolovat" "Kontrolovat jen obsah DRM" @@ -367,6 +400,11 @@ "Na obrazovce ve formě řádků" "V adb shell dumpsys gfxinfo" + + "Vypnuto" + "Zobrazit překreslované oblasti" + "Zobrazit počítadlo překreslení" + "Standardní limit" "Procesy na pozadí deaktivovány" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 4d91c65cb84..5333a2269a5 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -275,8 +275,8 @@ "Připojení datových služeb bylo přerušeno, protože jste opustili domovskou síť a máte vypnutý datový roaming." "Zapnout" "Pokud povolíte datový roaming, mohou vám být účtovány vysoké poplatky." - "Pokud aktivujete datový roaming, mohou vám být za roaming účtovány nemalé poplatky."\n\n"Toto nastavení ovlivní všechny uživatele tohoto tabletu." - "Pokud aktivujete datový roaming, mohou vám být za roaming účtovány nemalé poplatky."\n\n"Toto nastavení ovlivní všechny uživatele tohoto telefonu." + "Pokud aktivujete datový roaming, mohou vám být za roaming účtovány nemalé poplatky.\n\nToto nastavení ovlivní všechny uživatele tohoto tabletu." + "Pokud aktivujete datový roaming, mohou vám být za roaming účtovány nemalé poplatky.\n\nToto nastavení ovlivní všechny uživatele tohoto telefonu." "Povolit datový roaming?" "Výběr operátora" "Vybrat síťového operátora" @@ -322,8 +322,8 @@ "Při každém zapnutí tabletu vyžadovat kód PIN nebo heslo za účelem dešifrování" "Při každém zapnutí telefonu vyžadovat kód PIN nebo heslo za účelem dešifrování" "Šifrováno" - "Účty, nastavení, stažené aplikace a jejich data, média a jiné soubory můžete zašifrovat. Po zašifrování tabletu je třeba při každém zapnutí zadat číselný kód PIN nebo heslo, kterým ho opět dešifrujete. Zašifrování tabletu lze zrušit pouze obnovením továrních dat, při kterém budou vymazána všechna vaše data."\n\n"Proces šifrování trvá hodinu i více. Začněte s nabitou baterií a ponechte tablet připojený ke zdroji napájení, dokud se šifrování nedokončí. Pokud proces šifrování přerušíte, může dojít ke ztrátě některých nebo všech vašich dat." - "Účty, nastavení, stažené aplikace a jejich data, média a jiné soubory můžete zašifrovat. Po zašifrování musíte při každém zapnutí telefonu vložit číselný kód PIN nebo heslo, abyste ho opět dešifrovali. Zašifrování telefonu lze zrušit pouze obnovením továrních dat, při kterém budou vymazána všechna vaše data."\n\n"Proces zašifrování trvá hodinu i více. Začněte s nabitou baterií a ponechte telefon připojený ke zdroji napájení, dokud nebude šifrování dokončeno. Pokud proces šifrování přerušíte, může dojít ke ztrátě některých nebo všech vašich dat." + "Účty, nastavení, stažené aplikace a jejich data, média a jiné soubory můžete zašifrovat. Po zašifrování tabletu je třeba při každém zapnutí zadat číselný kód PIN nebo heslo, kterým ho opět dešifrujete. Zašifrování tabletu lze zrušit pouze obnovením továrních dat, při kterém budou vymazána všechna vaše data.\n\nProces šifrování trvá hodinu i více. Začněte s nabitou baterií a ponechte tablet připojený ke zdroji napájení, dokud se šifrování nedokončí. Pokud proces šifrování přerušíte, může dojít ke ztrátě některých nebo všech vašich dat." + "Účty, nastavení, stažené aplikace a jejich data, média a jiné soubory můžete zašifrovat. Po zašifrování musíte při každém zapnutí telefonu vložit číselný kód PIN nebo heslo, abyste ho opět dešifrovali. Zašifrování telefonu lze zrušit pouze obnovením továrních dat, při kterém budou vymazána všechna vaše data.\n\nProces zašifrování trvá hodinu i více. Začněte s nabitou baterií a ponechte telefon připojený ke zdroji napájení, dokud nebude šifrování dokončeno. Pokud proces šifrování přerušíte, může dojít ke ztrátě některých nebo všech vašich dat." "Šifrovat tablet" "Šifrovat telefon" "Nabijte baterii a zkuste to znovu." @@ -339,8 +339,8 @@ "Zkuste to znovu za: ^1 s." "Zadejte heslo" "Šifrování se nezdařilo" - "Šifrování bylo přerušeno a nelze je dokončit. V důsledku toho již nebudou údaje v tabletu přístupné. "\n\n" Chcete-li tablet opět začít používat, je potřeba obnovit tovární nastavení. Po obnově budete moci v průběhu nastavení tabletu obnovit všechna data, která jsou zálohována v účtu Google." - "Šifrování bylo přerušeno a nelze je dokončit. V důsledku toho již nebudou údaje v telefonu přístupné. "\n\n"Chcete-li telefon opět začít používat, je potřeba obnovit tovární nastavení. Po obnově budete moci v průběhu nastavení telefonu obnovit všechna data, která jsou zálohována v účtu Google." + "Šifrování bylo přerušeno a nelze je dokončit. V důsledku toho již nebudou údaje v tabletu přístupné. \n\n Chcete-li tablet opět začít používat, je potřeba obnovit tovární nastavení. Po obnově budete moci v průběhu nastavení tabletu obnovit všechna data, která jsou zálohována v účtu Google." + "Šifrování bylo přerušeno a nelze je dokončit. V důsledku toho již nebudou údaje v telefonu přístupné. \n\nChcete-li telefon opět začít používat, je potřeba obnovit tovární nastavení. Po obnově budete moci v průběhu nastavení telefonu obnovit všechna data, která jsou zálohována v účtu Google." "Přepnout metodu zadávání" "Vybrat zámek obrazovky" "Výběr záložního zámku" @@ -514,6 +514,7 @@ "Připojování" "Připojené" "Dostupné" + "Používá se" "Nastavení displeje" "Odpojit?" "Tímto ukončíte připojení k zařízení:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Vypnuto" "Není k dispozici, protože je vypnuta funkce NFC" "Android Beam" - "Pokud je funkce zapnuta, můžete přenášet obsah aplikace do jiného zařízení s funkcí NFC tím, že podržíte zařízení blízko sebe. Můžete například přenášet stránky prohlížeče, videa YouTube, kontakty a další."\n\n"Přiložte zařízení k sobě (zpravidla zadní stranou) a dotkněte se obrazovky. Aplikace určí, jaký obsah se bude přenášet." + "Pokud je funkce zapnuta, můžete přenášet obsah aplikace do jiného zařízení s funkcí NFC tím, že podržíte zařízení blízko sebe. Můžete například přenášet stránky prohlížeče, videa YouTube, kontakty a další.\n\nPřiložte zařízení k sobě (zpravidla zadní stranou) a dotkněte se obrazovky. Aplikace určí, jaký obsah se bude přenášet." "Zjistitelnost po síti" "Povolit aplikacím v jiných zařízeních vyhledávat aplikace v tomto zařízení" "Wi-Fi" @@ -620,7 +621,7 @@ "Zabezpečení: %1$s" ", zabezpečení %1$s" "Žádné" - "Aplikace %1$s chce zapnout vyhledávání sítí (kvůli lepšímu určení polohy i kvůli jiným účelům) a hledat sítě i v případě, že je vypnut modul Wi-Fi."\n\n"Chcete tuto možnost povolit všem aplikacím, které chtějí vyhledávat sítě?" + "Aplikace %1$s chce zapnout vyhledávání sítí (kvůli lepšímu určení polohy i kvůli jiným účelům) a hledat sítě i v případě, že je vypnut modul Wi-Fi.\n\nChcete tuto možnost povolit všem aplikacím, které chtějí vyhledávat sítě?" "Povolit" "Zamítnout" "Připojit" @@ -632,8 +633,8 @@ "Zrušit" "Přesto přeskočit" "Nepřeskakovat" - "UPOZORNĚNÍ: Může dojít k tomu, že vám operátor bude účtovat vyšší poplatky než obvykle."\n\n"Nastavení tabletu může vyžadovat přenos nemalého množství dat." - "UPOZORNĚNÍ: Může dojít k tomu, že vám operátor bude účtovat vyšší poplatky než obvykle."\n\n"Nastavení telefonu může vyžadovat přenos nemalého množství dat." + "UPOZORNĚNÍ: Může dojít k tomu, že vám operátor bude účtovat vyšší poplatky než obvykle.\n\nNastavení tabletu může vyžadovat přenos nemalého množství dat." + "UPOZORNĚNÍ: Může dojít k tomu, že vám operátor bude účtovat vyšší poplatky než obvykle.\n\nNastavení telefonu může vyžadovat přenos nemalého množství dat." "UPOZORNĚNÍ: Dokud nebudete připojeni k internetu, tablet nebude moci ověřit, zda je software aktuální." "UPOZORNĚNÍ: Dokud nebudete připojeni k internetu, telefon nebude moci ověřit, zda je software aktuální." "Tabletu se nepodařilo připojit k této síti Wi-Fi." @@ -773,9 +774,9 @@ "PIN SIM karty" "Nesprávný kód PIN" "Kódy PIN nejsou shodné" - "Kód PIN nelze změnit."\n"Možná jste zadali nesprávný kód PIN." + "Kód PIN nelze změnit.\nMožná jste zadali nesprávný kód PIN." "PIN SIM karty byl úspěšně změněn." - "Stav zámku SIM karty nelze změnit."\n"Zřejmě jste zadali nesprávný kód PIN." + "Stav zámku SIM karty nelze změnit.\nZřejmě jste zadali nesprávný kód PIN." "OK" "Zrušit" "Stav tabletu" @@ -918,9 +919,9 @@ "Obnovení továrních dat" "Vymaže všechna data v tabletu" "Vymaže všechna data v telefonu" - "Tato akce smaže veškerá data z ""interního úložiště"" tabletu, mimo jiné následují:"\n\n
  • "váš účet Google,"
  • \n
  • "nastavení a data systému a aplikací,"
  • \n
  • "stažené aplikace."
  • - "Tato akce smaže veškerá data z ""interního úložiště"" telefonu, mimo jiné i následující:"\n\n
  • "váš účet Google,"
  • \n
  • "nastavení a data systému a aplikací,"
  • \n
  • "stažené aplikace."
  • - \n\n"Aktuálně jste přihlášeni k těmto účtům:"\n + "Tato akce smaže veškerá data z ""interního úložiště"" tabletu, mimo jiné následují:\n\n"
  • "váš účet Google,"
  • \n
  • "nastavení a data systému a aplikací,"
  • \n
  • "stažené aplikace."
  • + "Tato akce smaže veškerá data z ""interního úložiště"" telefonu, mimo jiné i následující:\n\n"
  • "váš účet Google,"
  • \n
  • "nastavení a data systému a aplikací,"
  • \n
  • "stažené aplikace."
  • + \n\n"Aktuálně jste přihlášeni k těmto účtům:\n"
  • "Hudba"
  • \n
  • "Fotky"
  • \n
  • "Další uživatelské údaje"
  • \n\n"Chcete-li smazat také hudbu, obrázky a další uživatelská data, je potřeba vymazat ""úložiště USB""." \n\n"Chcete-li smazat také hudbu, obrázky a další uživatelská data, je potřeba vymazat ""kartu SD""." @@ -1105,7 +1106,7 @@ "Zobrazit mezipaměť" "Obnovit nastavení apl." "Obnovit nastavení apl.?" - "Touto akcí obnovíte všechna nastavení pro:"\n\n" "
  • "deaktivované aplikace,"
  • \n" "
  • "deaktivovaná oznámení aplikací,"
  • \n" "
  • "výchozí aplikace k provádění akcí,"
  • \n" "
  • "omezení dat na pozadí pro aplikace."
  • \n\n" O žádná data aplikací nepřijdete."
    + "Touto akcí obnovíte všechna nastavení pro:\n\n "
  • "deaktivované aplikace,"
  • \n" "
  • "deaktivovaná oznámení aplikací,"
  • \n" "
  • "výchozí aplikace k provádění akcí,"
  • \n" "
  • "omezení dat na pozadí pro aplikace."
  • \n\n" O žádná data aplikací nepřijdete."
    "Obnovit aplikace" "Správa paměti" "Filtrovat" @@ -1240,9 +1241,7 @@ "Přepněte klávesami ctrl+mezerník" "Výchozí" "Rozložení klávesnice" - "Uživatelský slovník" - "Osobní slovník" - "Osobní slovníky" + "Osobní slovník" "Přidat" "Přidat do slovníku" @@ -1303,6 +1302,11 @@ "Zahrnout v hlavní nabídce možnost k vytvoření zprávy o chybách" "Nevypínat obrazovku" "Obrazovka se při nabíjení nepřepne do režimu spánku" + "Povolit sledovací protokol Bluetooth HCI" + "Zachytit všechny pakety Bluetooth HCI do souboru" + "Výběr modulu runtime" + "Výběr modulu runtime" + "Chcete provést restart a změnit modul runtime z %1$s na %2$s?" "Povolit simulované polohy" "Povolit simulované polohy" "Povolit ladění USB?" @@ -1315,11 +1319,13 @@ "Chránit úložiště USB" "Aplikace musejí před čtením z úložiště USB žádat o povolení" "Chránit úložiště USB?" - "Pokud je úložiště USB chráněno, musejí aplikace před čtením dat z externího úložiště požádat o povolení."\n\n"Některé aplikace nemusejí fungovat, dokud je vývojáři neaktualizují." + "Pokud je úložiště USB chráněno, musejí aplikace před čtením dat z externího úložiště požádat o povolení.\n\nNěkteré aplikace nemusejí fungovat, dokud je vývojáři neaktualizují." "Chránit kartu SD" "Aplikace musejí před čtením z karty SD žádat o povolení" "Chránit kartu SD?" - "Pokud je karta SD chráněná, musejí aplikace před čtením dat z externího úložiště požádat o povolení."\n\n"Některé aplikace nemusejí fungovat, dokud je vývojáři neaktualizují." + "Pokud je karta SD chráněná, musejí aplikace před čtením dat z externího úložiště požádat o povolení.\n\nNěkteré aplikace nemusejí fungovat, dokud je vývojáři neaktualizují." + "Místní terminál" + "Aktivovat terminálovou apl. pro místní přístup k prostředí shell" "Zvolte gadget" "Zvolte widget" "Vytvořit widget a povolit přístup?" @@ -1340,11 +1346,11 @@ "Služby" "Systém" "Gesta pro přiblížení obrazovky" - "Je-li tato funkce zapnutá, můžete zobrazení přibližovat a oddalovat tak, že třikrát klepnete na obrazovku."\n\n"Při přiblížení můžete provádět tyto činnosti:"\n
    • "Posunutí: táhněte po obrazovce minimálně dvěma prsty."
    • \n
    • "Změna úrovně přiblížení: alespoň dva prsty stáhněte k sobě, nebo roztáhněte od sebe."
    \n\n"Také je možné dočasně zvětšit oblast pod prstem. Stačí na ni třikrát klepnout a podržet ji. V takto zvětšeném náhledu můžete přetáhnutím prstu prohlížet libovolné části obrazovky. Do předchozího zobrazení se vrátíte zdvihnutím prstu."\n\n"Poznámka: Zvětšení trojitým klepnutím funguje ve všech částech obrazovky s výjimkou klávesnice a navigační lišty."
    + "Je-li tato funkce zapnutá, můžete zobrazení přibližovat a oddalovat tak, že třikrát klepnete na obrazovku.\n\nPři přiblížení můžete provádět tyto činnosti:\n"
    • "Posunutí: táhněte po obrazovce minimálně dvěma prsty."
    • \n
    • "Změna úrovně přiblížení: alespoň dva prsty stáhněte k sobě, nebo roztáhněte od sebe."
    \n\n"Také je možné dočasně zvětšit oblast pod prstem. Stačí na ni třikrát klepnout a podržet ji. V takto zvětšeném náhledu můžete přetáhnutím prstu prohlížet libovolné části obrazovky. Do předchozího zobrazení se vrátíte zdvihnutím prstu.\n\nPoznámka: Zvětšení trojitým klepnutím funguje ve všech částech obrazovky s výjimkou klávesnice a navigační lišty."
    "Zkratka usnadnění" "Zapnuto" "Vyp." - "Je-li tato funkce zapnutá, můžete rychle ve dvou krocích aktivovat funkce usnadnění přístupu:"\n\n"Krok 1: Stiskněte tlačítko napájení a držte jej, dokud neuslyšíte zvuk nebo neucítíte vibraci."\n\n"Krok 2: Dotkněte se obrazovky dvěma prsty a držte ji, dokud neuslyšíte potvrzovací zvuk."\n\n"Má-li zařízení více uživatelů, pomocí této zkratky lze na uzamčené obrazovce dočasně aktivovat usnadnění přístupu, dokud zařízení nebude odemčeno." + "Je-li tato funkce zapnutá, můžete rychle ve dvou krocích aktivovat funkce usnadnění přístupu:\n\nKrok 1: Stiskněte tlačítko napájení a držte jej, dokud neuslyšíte zvuk nebo neucítíte vibraci.\n\nKrok 2: Dotkněte se obrazovky dvěma prsty a držte ji, dokud neuslyšíte potvrzovací zvuk.\n\nMá-li zařízení více uživatelů, pomocí této zkratky lze na uzamčené obrazovce dočasně aktivovat usnadnění přístupu, dokud zařízení nebude odemčeno." "Velký text" "Přiblížení obrazovky" "Automaticky aktualizovat přiblížení" @@ -1366,6 +1372,16 @@ "TalkBack poskytuje mluvenou navigaci nevidomým a slabozrakým uživatelům. Chcete tuto aplikaci stáhnout zdarma ze služby Android Market?" "K dispozici není žádný popis." "Nastavení" + "Tisk" + "Nastavení tisku" + "Služby" + "Chcete použít službu %1$s?" + "Služba %1$s může přijímat dokumenty, které tisknete. Tyto dokumenty mohou obsahovat citlivá data." + "Žádná služba není nainstalována" + "Nastavení" + "Přidat tiskárny" + "Zapnuto" + "Vypnuto" "Baterie" "Co využívá baterii" "Údaje o spotřebě nejsou známy." @@ -1405,8 +1421,10 @@ "Wi-Fi je aktivní" "Tablet" "Telefon" - "Odeslaná data" - "Přijatá data" + "Odeslané mobilní datové přenosy" + "Přijaté mobilní datové přenosy" + "Odeslané datové přenosy Wi‑Fi" + "Přijaté datové přenosy Wi‑Fi" "Zvuk" "Video" "Doba zapnutí" @@ -1460,6 +1478,7 @@ "Výška" "Určuje rejstřík mluveného textu" "Jazyk" + "Nebyl vybrán jazyk" "Nastavení jazyka hlasu pro mluvený text" "Poslechnout příklad" "Přehrát krátkou ukázku syntézy řeči" @@ -1594,7 +1613,7 @@ "Protokol EAP není podporován." "Připojení Wi-Fi EAP nelze nakonfigurovat při instalaci. Můžete to provést po dokončení instalace v části Nastavení > Bezdrátová připojení a sítě." "Připojování může trvat několik minut..." - "Chcete-li pokračovat v nastavení, klepněte na ""Další""."\n\n"Chcete-li se připojit k jiné síti Wi-Fi, klepněte na ""Zpět""." + "Chcete-li pokračovat v nastavení, klepněte na ""Další"".\n\nChcete-li se připojit k jiné síti Wi-Fi, klepněte na ""Zpět""." "Synchronizace zapnuta" "Synchronizace deaktivována" "Chyba synchronizace." @@ -1622,7 +1641,7 @@ "Gmail" "Kalendář" "Kontakty" - "Vítá vás aplikace Google Sync."" "\n"Nový pohled společnosti Google na synchronizaci dat vám poskytuje přístup ke kontaktům, schůzkám a dalším informacím, ať jste kdekoli." + "Vítá vás aplikace Google Sync."" \nNový pohled společnosti Google na synchronizaci dat vám poskytuje přístup ke kontaktům, schůzkám a dalším informacím, ať jste kdekoli." "Nastavení synchronizace aplikací" "Data a synchronizace" "Změnit heslo" @@ -1676,8 +1695,7 @@ "Zobrazení v oknech vykreslovaná s GPU blikají." "Zobr. aktual. HW vrstev" "Aktualizované HW vrstvy nechat zeleně blikat" - "Zobrazovat překreslení GPU" - "Od nejlepšího k nejhoršímu: modrá, zelená, světle červená, červená" + "Ladění překreslování GPU" "Zakázat HW vrstvy" "Vždy použít GPU ke skládání obrazovky." "Povolit trasování OpenGL" @@ -1738,11 +1756,11 @@ "Zakázat data na pozadí v mobilních sítích. Používat jiné sítě." "Data na pozadí u aplikace omezíte nastavením limitu mob. dat." "Omezení datových přenosů na pozadí?" - "Pokud budou k dispozici pouze mobilní sítě, může tato funkce způsobit, že aplikace, které data na pozadí vyžadují, nebudou fungovat."\n\n"Vhodnější způsoby řízení využívání dat naleznete v nastavení aplikace." + "Pokud budou k dispozici pouze mobilní sítě, může tato funkce způsobit, že aplikace, které data na pozadí vyžadují, nebudou fungovat.\n\nVhodnější způsoby řízení využívání dat naleznete v nastavení aplikace." "Omezení dat na pozadí je k dispozici pouze v případě, že jste nastavili limit přenosu mobilních dat." "Zapnout aut. synchronizaci dat?" - "Změny, které v rámci svých účtů provedete na webu, se automaticky zkopírují do tabletu."\n\n"Některé účty také automaticky zkopírují změny provedené v tabletu na web. Tímto způsobem funguje například účet Google."\n\n"Typy informací, které se budou v jednotlivých účtech synchronizovat, nastavíte v části Nastavení > Účty." - "Změny, které v rámci svých účtů provedete na webu, se automaticky zkopírují do telefonu."\n\n"Některé účty také automaticky zkopírují změny provedené v telefonu na web. Tímto způsobem funguje například účet Google."\n\n"Typy informací, které se budou v jednotlivých účtech synchronizovat, nastavíte v části Nastavení > Účty." + "Změny, které v rámci svých účtů provedete na webu, se automaticky zkopírují do tabletu.\n\nNěkteré účty také automaticky zkopírují změny provedené v tabletu na web. Tímto způsobem funguje například účet Google.\n\nTypy informací, které se budou v jednotlivých účtech synchronizovat, nastavíte v části Nastavení > Účty." + "Změny, které v rámci svých účtů provedete na webu, se automaticky zkopírují do telefonu.\n\nNěkteré účty také automaticky zkopírují změny provedené v telefonu na web. Tímto způsobem funguje například účet Google.\n\nTypy informací, které se budou v jednotlivých účtech synchronizovat, nastavíte v části Nastavení > Účty." "Vypnout aut. synchronizaci dat?" "Toto nastavení šetří využití dat a baterii. Nejnovější informace však bude třeba získávat pomocí ruční synchronizace účtu a nebudete také dostávat oznámení o dostupných aktualizacích." "Datum obnovení cyklu sledování přenesených dat" @@ -1751,12 +1769,12 @@ "Nastavit upozornění na využití dat" "Nastavení limitu datových přenosů" "Nastavuje se omezení datových přenosů" - "Po dosažení stanoveného limitu bude datové připojení k síti zakázáno."\n\n"Protože se přenesená data měří pomocí tabletu a operátor je může účtovat odlišně, je vhodné nastavit nízký limit." - "Po dosažení stanoveného limitu bude datové připojení k síti zakázáno."\n\n"Protože se přenesená data měří pomocí telefonu a operátor je může účtovat odlišně, je vhodné nastavit nízký limit." + "Po dosažení stanoveného limitu bude datové připojení k síti zakázáno.\n\nProtože se přenesená data měří pomocí tabletu a operátor je může účtovat odlišně, je vhodné nastavit nízký limit." + "Po dosažení stanoveného limitu bude datové připojení k síti zakázáno.\n\nProtože se přenesená data měří pomocí telefonu a operátor je může účtovat odlišně, je vhodné nastavit nízký limit." "Omezení datových přenosů na pozadí?" "Pokud omezíte využití mobilních dat na pozadí, některé aplikace a služby nebudou fungovat, dokud se nepřipojíte k síti Wi-Fi." - "Pokud omezíte využití mobilních dat na pozadí, některé aplikace a služby nebudou fungovat, dokud se nepřipojíte k síti Wi-Fi."\n\n"Toto nastavení ovlivní všechny uživatele tohoto tabletu." - "Pokud omezíte využití mobilních dat na pozadí, některé aplikace a služby nebudou fungovat, dokud se nepřipojíte k síti Wi-Fi."\n\n"Toto nastavení ovlivní všechny uživatele tohoto telefonu." + "Pokud omezíte využití mobilních dat na pozadí, některé aplikace a služby nebudou fungovat, dokud se nepřipojíte k síti Wi-Fi.\n\nToto nastavení ovlivní všechny uživatele tohoto tabletu." + "Pokud omezíte využití mobilních dat na pozadí, některé aplikace a služby nebudou fungovat, dokud se nepřipojíte k síti Wi-Fi.\n\nToto nastavení ovlivní všechny uživatele tohoto telefonu." "^1"" ""^2"\n"upozornění" "limit:"" ""^1"" ""^2"\n "Odebrané aplikace" @@ -1843,8 +1861,8 @@ "Uživatel" "Omezený profil" "Přidat nového uživatele" - "Vytvořením dalších uživatelů můžete toto zařízení sdílet s jinými lidmi. Každý uživatel má své prostředí, které může personalizovat, nainstalovat své aplikace, tapetu atd. Uživatelé také mohou upravit nastavení tabletu (např. Wi-Fi), která ovlivní všechny ostatní uživatele."\n\n"Když vytvoříte nového uživatele, daná osoba bude muset projít procesem nastavení."\n\n"Každý uživatel může přijmout aktualizovaná oprávnění aplikací jménem všech ostatních uživatelů." - "Když vytvoříte nového uživatele, bude muset provést nastavení."\n\n"Každý uživatel může přijmout aktualizovaná oprávnění aplikací jménem všech ostatních uživatelů." + "Vytvořením dalších uživatelů můžete toto zařízení sdílet s jinými lidmi. Každý uživatel má své prostředí, které může personalizovat, nainstalovat své aplikace, tapetu atd. Uživatelé také mohou upravit nastavení tabletu (např. Wi-Fi), která ovlivní všechny ostatní uživatele.\n\nKdyž vytvoříte nového uživatele, daná osoba bude muset projít procesem nastavení.\n\nKaždý uživatel může přijmout aktualizovaná oprávnění aplikací jménem všech ostatních uživatelů." + "Když vytvoříte nového uživatele, bude muset provést nastavení.\n\nKaždý uživatel může přijmout aktualizovaná oprávnění aplikací jménem všech ostatních uživatelů." "Nastavit uživatele?" "Ujistěte se, že je uživatel k dispozici a může si na tabletu nastavit svůj prostor" "Nastavit profil?" @@ -1875,6 +1893,9 @@ "Toto nastavení ovlivní všechny uživatele tohoto telefonu." "Změna jazyka" "Změna velikosti písma" + "Omezení" + "Odebrat omezení" + "Změnit PIN" "Zobrazit upozornění" "Nápověda" "Účet pro obsah" diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml index 1dd81787512..45cd4fb0ed1 100644 --- a/res/values-da/arrays.xml +++ b/res/values-da/arrays.xml @@ -233,7 +233,8 @@ "Placering" "Personlig" "Beskeder" - "Enhed" + "Medier" + "Enhed"
    "omtrentlig placering" @@ -267,6 +268,17 @@ "afspil lyd" "læs udklipsholder" "rediger udklipsholder" + "medieknapper" + "lydfokusering" + "generel lydstyrke" + "lydstyrke for stemme" + "lydstyrke for ringetone" + "lydstyrke for medier" + "alarmlydstyrke" + "lydstyrke for underretninger" + "lydstyrke for bluetooth" + "hold aktiv" + "overvåg placering" "Placering" @@ -300,12 +312,33 @@ "Afspil lyd" "Læs udklipsholder" "Rediger udklipsholder" + "Medieknapper" + "Lydfokusering" + "Generel lydstyrke" + "Lydstyrke for stemme" + "Lydstyrke for ringetone" + "Lydstyrke for medier" + "Alarmlydstyrke" + "Lydstyrke for underretninger" + "Lydstyrke for bluetooth" + "Hold aktiv" + "Placering" "Kort" "Mellem" "Lang" + + "Dalvik" + "ART" + "ART (debug)" + + + "Brug Dalvik" + "Brug ART" + "Brug ART debug build" + "Kontroller aldrig" "Kontroller kun for DRM-indhold" @@ -367,6 +400,11 @@ "På skærmen som linier" "{0}Trans: left untranslated according to ws.{/0}{0} - daDA Wlgg 01/10/13 11:18{/0}" + + "Fra" + "Vis områder med overlap" + "Vis antallet af overlap" + "Standardgrænse" "Ingen baggrundsprocesser" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 48d6699f7ea..f7f52765cbd 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -275,8 +275,8 @@ "Du har mistet dataforbindelsen, fordi du har forladt dit hjemmenetværk med dataroaming slået fra." "Slå det til" "Når du tillader dataroaming, risikerer du at skulle betale høje gebyrer for roaming." - "Når du tillader dataroaming, kan du blive udsat for væsentlige roamingudgifter."\n\n"Denne indstilling påvirker alle brugere på denne tablet." - "Når du tillader dataroaming, kan du blive udsat for væsentlige roamingudgifter."\n\n"Denne indstilling påvirker alle brugere på denne telefon." + "Når du tillader dataroaming, kan du blive udsat for væsentlige roamingudgifter.\n\nDenne indstilling påvirker alle brugere på denne tablet." + "Når du tillader dataroaming, kan du blive udsat for væsentlige roamingudgifter.\n\nDenne indstilling påvirker alle brugere på denne telefon." "Vil du tillade dataroaming?" "Valg af udbyder" "Vælg en netværksudbyder" @@ -322,8 +322,8 @@ "Kræv en numerisk pinkode eller adgangskode for at dekryptere din tablet, hver gang du tænder for den" "Kræv en numerisk pinkode eller adgangskode for at dekryptere din telefon, hver gang du tænder for den" "Krypteret" - "Du kan kryptere dine konti, indstillinger, downloadede apps og deres data, medier og andre filer. Når du krypterer din tablet, skal du indtaste en numerisk pinkode eller adgangskode for at dekryptere den, hver gang du tænder for den. Du kan kun dekryptere din tablet ved at udføre en nulstilling af fabriksdata, som sletter alle dine data."\n\n"Krypteringen tager mindst en time. Når du starter krypteringen, skal batteriet være fuldt opladet, og du skal sørge for, at din tablet forbliver sluttet til strøm, indtil krypteringen er gennemført. Hvis du afbryder krypteringen, mister du nogle eller alle data." - "Du kan kryptere dine konti, indstillinger, downloadede apps og deres data, medier og andre filer. Når du krypterer din telefon, skal du indtaste en numerisk pinkode eller adgangskode for at dekryptere den, hver gang du tænder for den. Du kan kun dekryptere din telefon ved at udføre en nulstilling af fabriksdata, som sletter alle dine data."\n\n"Krypteringen tager mindst en time. Når du starter krypteringen, skal batteriet være fuldt opladet, og du skal sørge for, at din telefon forbliver sluttet til strøm, indtil krypteringen er gennemført. Hvis du afbryder krypteringen, mister du nogle eller alle data." + "Du kan kryptere dine konti, indstillinger, downloadede apps og deres data, medier og andre filer. Når du krypterer din tablet, skal du indtaste en numerisk pinkode eller adgangskode for at dekryptere den, hver gang du tænder for den. Du kan kun dekryptere din tablet ved at udføre en nulstilling af fabriksdata, som sletter alle dine data.\n\nKrypteringen tager mindst en time. Når du starter krypteringen, skal batteriet være fuldt opladet, og du skal sørge for, at din tablet forbliver sluttet til strøm, indtil krypteringen er gennemført. Hvis du afbryder krypteringen, mister du nogle eller alle data." + "Du kan kryptere dine konti, indstillinger, downloadede apps og deres data, medier og andre filer. Når du krypterer din telefon, skal du indtaste en numerisk pinkode eller adgangskode for at dekryptere den, hver gang du tænder for den. Du kan kun dekryptere din telefon ved at udføre en nulstilling af fabriksdata, som sletter alle dine data.\n\nKrypteringen tager mindst en time. Når du starter krypteringen, skal batteriet være fuldt opladet, og du skal sørge for, at din telefon forbliver sluttet til strøm, indtil krypteringen er gennemført. Hvis du afbryder krypteringen, mister du nogle eller alle data." "Krypter tablet" "Krypter telefon" "Lad dit batteri op, og prøv igen." @@ -339,8 +339,8 @@ "Prøv igen om ^1 sekunder." "Indtast din adgangskode" "Kryptering mislykkedes" - "Krypteringen blev afbrudt og kan ikke fuldføres. Som følge heraf er dataene på din tablet ikke længere tilgængelige. "\n\n"Hvis du vil genoptage brugen af din tablet, skal du udføre en nulstilling af fabriksdata. Når du konfigurerer din tablet efter nulstillingen, har du mulighed for at gendanne data, der blev sikkerhedskopieret på din Google-konto." - "Krypteringen blev afbrudt og kan ikke fuldføres. Som følge heraf er dataene på din telefon ikke længere tilgængelige. "\n\n"Hvis du vil genoptage brugen af telefonen, skal du udføre en nulstilling af fabriksdata. Når du konfigurerer din telefon efter nulstillingen, har du mulighed for at gendanne data, der blev sikkerhedskopieret på din Google-konto." + "Krypteringen blev afbrudt og kan ikke fuldføres. Som følge heraf er dataene på din tablet ikke længere tilgængelige. \n\nHvis du vil genoptage brugen af din tablet, skal du udføre en nulstilling af fabriksdata. Når du konfigurerer din tablet efter nulstillingen, har du mulighed for at gendanne data, der blev sikkerhedskopieret på din Google-konto." + "Krypteringen blev afbrudt og kan ikke fuldføres. Som følge heraf er dataene på din telefon ikke længere tilgængelige. \n\nHvis du vil genoptage brugen af telefonen, skal du udføre en nulstilling af fabriksdata. Når du konfigurerer din telefon efter nulstillingen, har du mulighed for at gendanne data, der blev sikkerhedskopieret på din Google-konto." "Skift indtastningsmetode" "Vælg skærmlås" "Vælg backuplås" @@ -514,6 +514,7 @@ "Tilslutter" "Tilsluttet" "Tilgængelig" + "I brug" "Skærmindstillinger" "Vil du afbryde forbindelsen?" "Dette vil afslutte din forbindelse til:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Fra" "Utilgængelig, fordi NFC er slukket" "Android Beam" - "Når denne funktion er slået til, kan du overføre appindhold til en anden NFC-kompatibel enhed ved at holde enhederne tæt sammen. For eksempel kan du overføre browsersider, YouTube-videoer, kontaktpersoner og meget mere."\n\n"Hold blot enhederne tæt sammen (typisk ryg mod ryg), og tryk derefter på din skærm. Appen afgør, hvad der bliver overført." + "Når denne funktion er slået til, kan du overføre appindhold til en anden NFC-kompatibel enhed ved at holde enhederne tæt sammen. For eksempel kan du overføre browsersider, YouTube-videoer, kontaktpersoner og meget mere.\n\nHold blot enhederne tæt sammen (typisk ryg mod ryg), og tryk derefter på din skærm. Appen afgør, hvad der bliver overført." "Registrering af netværkstjeneste" "Tillad, at apps på andre enheder kan finde apps på denne enhed" "Wi-Fi" @@ -620,7 +621,7 @@ "Sikret med %1$s" ", sikret med %1$s" "Ingen" - "For at kunne angive mere nøjagtig placering og af andre grunde, ønsker %1$s at aktivere netværksscanning, selv når Wi-Fi er deaktiveret."\n\n"Vil du tillade dette for alle apps, der ønsker at scanne?" + "For at kunne angive mere nøjagtig placering og af andre grunde, ønsker %1$s at aktivere netværksscanning, selv når Wi-Fi er deaktiveret.\n\nVil du tillade dette for alle apps, der ønsker at scanne?" "Tillad" "Afvis" "Forbind" @@ -632,8 +633,8 @@ "Annuller" "Spring over alligevel" "Spring ikke over" - "ADVARSEL! Du kan blive udsat for ekstraudgifter til mobilselskabet."\n\n"Konfiguration af tabletten kan kræve en betydelig mængde aktivitet på netværket." - "ADVARSEL! Du kan blive udsat for ekstraudgifter til mobilselskabet."\n\n"Konfiguration af telefonen kan kræve en betydelig mængde aktivitet på netværket." + "ADVARSEL! Du kan blive udsat for ekstraudgifter til mobilselskabet.\n\nKonfiguration af tabletten kan kræve en betydelig mængde aktivitet på netværket." + "ADVARSEL! Du kan blive udsat for ekstraudgifter til mobilselskabet.\n\nKonfiguration af telefonen kan kræve en betydelig mængde aktivitet på netværket." "ADVARSEL! Din tablet kan ikke bekræfte, at din software er opdateret, før du har forbindelse til internettet." "ADVARSEL! Telefonen kan ikke bekræfte, at din software er opdateret, før du har forbindelse til internettet." "Tabletten kunne ikke oprette forbindelse til dette Wi-Fi-netværk." @@ -773,9 +774,9 @@ "PIN-kode til SIM-kort" "Forkert pinkode" "Pinkoderne er ikke ens" - "Pinkoden kan ikke ændres."\n"Pinkoden er muligvis forkert." + "Pinkoden kan ikke ændres.\nPinkoden er muligvis forkert." "PIN-koden til SIM-kortet er ændret" - "SIM-kortlåsens tilstand kan ikke ændres."\n"Det skyldes muligvis en forkert pinkode." + "SIM-kortlåsens tilstand kan ikke ændres.\nDet skyldes muligvis en forkert pinkode." "OK" "Annuller" "Status for tabletcomputeren" @@ -918,9 +919,9 @@ "Gendannelse af fabriksdata" "Sletter alle data på tabletcomputeren" "Slet alle data på telefonen" - "Dette sletter alle data fra tablettens ""interne lager"", f.eks.: "\n\n
  • "din Google-konto"
  • \n
  • "data og indstillinger for system og applikationer"
  • \n
  • "downloadede applikationer"
  • - "Dette sletter alle data fra telefonens ""interne lager"", f.eks.: "\n\n
  • "din Google-konto"
  • \n
  • "data og indstillinger for system og applikationer"
  • \n
  • "downloadede applikationer"
  • - \n\n"Du er i øjeblikket logget ind på disse konti:"\n + "Dette sletter alle data fra tablettens ""interne lager"", f.eks.: \n\n"
  • "din Google-konto"
  • \n
  • "data og indstillinger for system og applikationer"
  • \n
  • "downloadede applikationer"
  • + "Dette sletter alle data fra telefonens ""interne lager"", f.eks.: \n\n"
  • "din Google-konto"
  • \n
  • "data og indstillinger for system og applikationer"
  • \n
  • "downloadede applikationer"
  • + \n\n"Du er i øjeblikket logget ind på disse konti:\n"
  • "Musik"
  • \n
  • "Billeder"
  • \n
  • "Andre brugerdata"
  • \n\n"Ryd musik, billeder og andre brugerdata ved at formatere ""USB-lager""." \n\n"Hvis du vil rydde musik, billeder og andre brugerdata, skal du formatere ""SD-kortet""." @@ -1105,7 +1106,7 @@ "Cachelagrede processer" "Nulstil app-præferencer" "Nulstil app-præferencer?" - "Dette vil nulstille alle præferencer for:"\n\n
  • "deaktiverede apps"
  • \n
  • "underretninger om deaktiverede apps"
  • \n
  • "standardapplikationer til handlinger"
  • \n
  • "begrænsninger for baggrundsdata for apps"
  • \n\n"Du vil ikke miste nogen appdata."
    + "Dette vil nulstille alle præferencer for:\n\n"
  • "deaktiverede apps"
  • \n
  • "underretninger om deaktiverede apps"
  • \n
  • "standardapplikationer til handlinger"
  • \n
  • "begrænsninger for baggrundsdata for apps"
  • \n\n"Du vil ikke miste nogen appdata."
    "Nulstil apps" "Administrer plads" "Filter" @@ -1240,9 +1241,7 @@ "Tryk på Ctrl-Mellemrum for at skifte" "Standard" "Tastaturlayout" - "Brugerordbog" - "Personlig ordbog" - "Personlige ordbøger" + "Personlig ordbog" "Tilføj" "Føj til ordbog" @@ -1303,6 +1302,11 @@ "Gør det muligt at rapportere fejl i menuen til startknappen" "Undgå dvale" "Skærmen går ikke i dvale under opladning" + "Aktivér Bluetooth HCI snoop log" + "Gem alle Bluetooth HCI-pakker i en fil" + "Vælg kørsel" + "Vælg kørsel" + "Genstart for at skifte kørsel fra %1$s til %2$s?" "Imiterede placeringer" "Tillad imiterede placeringer" "Vil du tillade USB-fejlretning?" @@ -1315,11 +1319,13 @@ "Beskyt USB-lageret" "Apps skal anmode om tilladelse til at læse USB-lageret" "Vil du beskytte USB-lageret?" - "Når USB-lageret er beskyttet, skal apps anmode om tilladelse til at læse data fra et eksternt lager."\n\n" Nogle apps fungerer muligvis ikke, før de opdateres af deres udviklere." + "Når USB-lageret er beskyttet, skal apps anmode om tilladelse til at læse data fra et eksternt lager.\n\n Nogle apps fungerer muligvis ikke, før de opdateres af deres udviklere." "Beskyt SD-kortet" "Apps skal anmode om tilladelse til at læse SD-kortet" "Vil du beskytte SD-kortet?" - "Når SD-kortet er beskyttet, skal apps anmode om tilladelse til at læse data fra et eksternt lager."\n\n"Nogle apps fungerer muligvis ikke, før de opdateres af deres udviklere." + "Når SD-kortet er beskyttet, skal apps anmode om tilladelse til at læse data fra et eksternt lager.\n\nNogle apps fungerer muligvis ikke, før de opdateres af deres udviklere." + "Lokal terminal" + "Aktivér terminalappen, der giver lokal shell-adgang" "Vælg gadget" "Vælg widget" "Vil du oprette en widget og tillade adgang?" @@ -1340,11 +1346,11 @@ "Tjenester" "System" "Forstørrelsesbevægelser" - "Når denne funktion er slået til, kan du zoome ind og ud ved at trykke tre gange på skærmen."\n\n"Mens der er zoomet ind, kan du:"\n
    • "panorere: Træk to eller flere fingre hen over skærmen."
    • \n
    • "justere zoomniveauet: Knib to eller flere fingre sammen, eller spred dem fra hinanden."
    \n\n"Du kan også midlertidigt forstørre, hvad der er under din finger, ved at trykke tre gange og holde fingeren på skærmen. I denne forstørrede tilstand, kan du trække fingeren for at udforske forskellige dele af skærmen. Løft fingeren for at vende tilbage til din forrige tilstand."\n\n"Bemærk! Du kan forstørre ved at trykke tre gange overalt undtagen på tastaturet og i navigationslinjen."
    + "Når denne funktion er slået til, kan du zoome ind og ud ved at trykke tre gange på skærmen.\n\nMens der er zoomet ind, kan du:\n"
    • "panorere: Træk to eller flere fingre hen over skærmen."
    • \n
    • "justere zoomniveauet: Knib to eller flere fingre sammen, eller spred dem fra hinanden."
    \n\n"Du kan også midlertidigt forstørre, hvad der er under din finger, ved at trykke tre gange og holde fingeren på skærmen. I denne forstørrede tilstand, kan du trække fingeren for at udforske forskellige dele af skærmen. Løft fingeren for at vende tilbage til din forrige tilstand.\n\nBemærk! Du kan forstørre ved at trykke tre gange overalt undtagen på tastaturet og i navigationslinjen."
    "Tilgængelighedsgenvej" "Til" "Fra" - "Når denne funktion er slået til, kan du hurtigt aktivere tilgænglighedsfunktioner i to trin:"\n\n"Trin 1: Tryk på afbryderknappen, og hold den nede, indtil du hører en lyd eller mærker en vibration."\n\n"Trin 2: Tryk med to fingre, og hold nede, indtil du hører bekræftelseslyden."\n\n"Hvis enheden har flere brugere, aktiverer brug af denne genvej midlertidigt adgang, indtil enheden låses op." + "Når denne funktion er slået til, kan du hurtigt aktivere tilgænglighedsfunktioner i to trin:\n\nTrin 1: Tryk på afbryderknappen, og hold den nede, indtil du hører en lyd eller mærker en vibration.\n\nTrin 2: Tryk med to fingre, og hold nede, indtil du hører bekræftelseslyden.\n\nHvis enheden har flere brugere, aktiverer brug af denne genvej midlertidigt adgang, indtil enheden låses op." "Stor tekst" "Skærmforstørrelse" "Opdater skærmforstørrelse automatisk" @@ -1366,6 +1372,16 @@ "TalkBack giver talefeedback for at hjælpe blinde og svagtseende brugere. Vil du installere det gratis fra Android Marked?" "Ingen beskrivelse til rådighed." "Indstillinger" + "Udskrivning" + "Indstillinger for udskrivning" + "Tjenester" + "Vil du bruge %1$s?" + "%1$s kan modtage dokumenter, du udskriver. Sådanne dokumenter kan indeholde følsomme oplysninger." + "Der er ikke installeret nogen tjenester" + "Indstillinger" + "Tilføj printere" + "Til" + "Fra" "Batteri" "Hvad der har brugt batteriet" "Batteribrugsdata utilgængeligt." @@ -1405,8 +1421,10 @@ "Wi-Fi aktiv" "Tablet" "Telefon" - "Data sendt" - "Data modtaget" + "Mobildata blev sendt" + "Mobildata blev modtaget" + "Wi-Fi-data blev sendt" + "Wi-Fi-data blev modtaget" "Lyd" "Video" "Tid til" @@ -1460,6 +1478,7 @@ "Tonehøjde" "Påvirker tonen af den talte tekst" "Sprog" + "Der er ikke valgt sprog" "Angiver det sprog, der skal bruges til oplæsning af tekst" "Lyt til et eksempel" "Afspil en kort demonstration af talesyntese" @@ -1594,7 +1613,7 @@ "EAP understøttes ikke." "Du kan ikke konfigurere en EAP-Wi-Fi-forbindelse under konfigurationen. Efter konfigurationen kan du gøre dette i Indstillinger > Trådløst og netværk." "Oprettelsen kan tage et par minutter..." - "Tryk på ""Næste"" for at fortsætte med konfigurationen."\n\n" Tryk på ""Tilbage"" for at oprette forbindelse til et andet Wi-Fi-netværk." + "Tryk på ""Næste"" for at fortsætte med konfigurationen.\n\n Tryk på ""Tilbage"" for at oprette forbindelse til et andet Wi-Fi-netværk." "Synkronisering aktiveret" "Sync deaktiveret" "Synkroniseringsfejl." @@ -1676,8 +1695,7 @@ "Fremhæv visninger i vinduer, når de tegnes med GPU" "Se opdat. af hardwarelag" "Hardwarelag blinker grønt, når de opdateres" - "Vis GPU-overdraw" - "Fra bedst til værst: blå, grøn, lys rød, rød" + "Ret GPU-overlapsfejl" "Deaktiver HW-overlejring" "Brug altid GPU til skærmsammensætning" "Aktivér OpenGL-spor" @@ -1738,11 +1756,11 @@ "Deaktiver baggrundsdata på mobilnetværk. Netværk, som ikke er mobilnetværk, vil blive brugt, hvis de er tilgængelige." "Hvis du vil begrænse baggrundsdata for denne app, skal du først angive en mobildatagrænse." "Vil du begrænse baggrundsdata?" - "Denne funktion kan medføre, at en app, der er afhængig af baggrundsdata, ikke længere fungerer, når der kun er mobilnetværk til rådighed."\n\n"Du kan finde mere hensigtsmæssige metoder til kontrol af dataforbruget i de indstillinger, der er tilgængelige i selve appen." + "Denne funktion kan medføre, at en app, der er afhængig af baggrundsdata, ikke længere fungerer, når der kun er mobilnetværk til rådighed.\n\nDu kan finde mere hensigtsmæssige metoder til kontrol af dataforbruget i de indstillinger, der er tilgængelige i selve appen." "Begrænsning af baggrundsdata er kun muligt, hvis du har angivet en grænse for mobildata." "Slå aut. synk. af data til?" - "Alle ændringer, som du foretager på dine konti på nettet, vil automatisk blive kopieret til din tablet."\n\n" Der vil muligvis også være nogle konti, hvor de ændringer, du foretager på telefonen, automatisk kopieres til internettet. Sådan fungerer en Google-konto."\n\n"Du kan vælge, hvilke former for oplysninger, der skal synkroniseres på hver konto, ved at gå til Indstillinger > Konti." - "Alle ændringer, som du foretager på dine konti på nettet, vil automatisk blive kopieret til din telefon."\n\n" Der vil muligvis også være nogle konti, hvor de ændringer, du foretager på telefonen, automatisk kopieres til internettet. Sådan fungerer en Google-konto."\n\n"Du kan vælge, hvilke former for oplysninger, der skal synkroniseres på hver konto, ved at gå til Indstillinger > Konti." + "Alle ændringer, som du foretager på dine konti på nettet, vil automatisk blive kopieret til din tablet.\n\n Der vil muligvis også være nogle konti, hvor de ændringer, du foretager på telefonen, automatisk kopieres til internettet. Sådan fungerer en Google-konto.\n\nDu kan vælge, hvilke former for oplysninger, der skal synkroniseres på hver konto, ved at gå til Indstillinger > Konti." + "Alle ændringer, som du foretager på dine konti på nettet, vil automatisk blive kopieret til din telefon.\n\n Der vil muligvis også være nogle konti, hvor de ændringer, du foretager på telefonen, automatisk kopieres til internettet. Sådan fungerer en Google-konto.\n\nDu kan vælge, hvilke former for oplysninger, der skal synkroniseres på hver konto, ved at gå til Indstillinger > Konti." "Slå aut. synk. af data fra?" "Dette vil sænke data- og batteriforbruget, men du skal til gengæld synkronisere hver konto manuelt for at hente de seneste oplysninger, og du vil ikke modtage underretninger, når der kommer nye opdateringer." "Dato for nulstilling af forbrugsperiode" @@ -1751,12 +1769,12 @@ "Angiv en advarsel om dataforbrug" "Angiv en grænse for dataforbrug" "Grænse for dataforbrug" - "Din mobildataforbindelse deaktiveres, når den angivne grænse er nået."\n\n"Da dataforbrug måles af din tablet, og dit mobilselskab muligvis bruger en anden metode til beregning af forbrug, kan du overveje at angive en lav grænse." - "Din mobildataforbindelse deaktiveres, når den angivne grænse er nået."\n\n"Da dataforbrug måles af din telefon, og dit mobilselskab muligvis bruger en anden metode til beregning af forbrug, kan du overveje at angive en lav grænse." + "Din mobildataforbindelse deaktiveres, når den angivne grænse er nået.\n\nDa dataforbrug måles af din tablet, og dit mobilselskab muligvis bruger en anden metode til beregning af forbrug, kan du overveje at angive en lav grænse." + "Din mobildataforbindelse deaktiveres, når den angivne grænse er nået.\n\nDa dataforbrug måles af din telefon, og dit mobilselskab muligvis bruger en anden metode til beregning af forbrug, kan du overveje at angive en lav grænse." "Vil du begrænse baggrundsdata?" "Hvis du begrænser mobildata, der kører i baggrunden, vil nogle apps og tjenester ikke fungere, medmindre du har forbindelse til et Wi-Fi-netværk." - "Hvis du begrænser mobildata, der kører i baggrunden, vil nogle apps og tjenester ikke fungere, hvis du ikke har forbindelse til et Wi-Fi-netværk."\n\n"Denne indstilling påvirker alle brugere på denne tablet." - "Hvis du begrænser mobildata, der kører i baggrunden, vil nogle apps og tjenester ikke fungere, hvis du ikke har forbindelse til et Wi-Fi-netværk."\n\n"Denne indstilling påvirker alle brugere på denne telefon." + "Hvis du begrænser mobildata, der kører i baggrunden, vil nogle apps og tjenester ikke fungere, hvis du ikke har forbindelse til et Wi-Fi-netværk.\n\nDenne indstilling påvirker alle brugere på denne tablet." + "Hvis du begrænser mobildata, der kører i baggrunden, vil nogle apps og tjenester ikke fungere, hvis du ikke har forbindelse til et Wi-Fi-netværk.\n\nDenne indstilling påvirker alle brugere på denne telefon." "^1"" ""^2"\n"advarsel" "^1"" ""^2"\n"grænse" "Fjernede apps" @@ -1843,8 +1861,8 @@ "Bruger" "Begrænset profil" "Tilføj ny bruger" - "Du kan dele denne enhed med andre personer ved at oprette yderligere brugere. Hver bruger har deres egen plads, som de kan tilpasse med deres egne apps, baggrunde osv. Brugerne kan også ændre indstillinger på tabletten, der påvirker alle, f.eks. indstillinger for Wi-Fi."\n\n"Når du opretter en ny bruger, skal denne person gennemgå en oprettelsesproces."\n\n"Alle brugere kan acceptere opdaterede apptilladelser på vegne af alle andre brugere." - "Når du opretter en ny bruger, skal denne person gennemgå en oprettelsesproces."\n\n"Alle brugere kan acceptere opdaterede apptilladelser på vegne af alle andre brugere." + "Du kan dele denne enhed med andre personer ved at oprette yderligere brugere. Hver bruger har deres egen plads, som de kan tilpasse med deres egne apps, baggrunde osv. Brugerne kan også ændre indstillinger på tabletten, der påvirker alle, f.eks. indstillinger for Wi-Fi.\n\nNår du opretter en ny bruger, skal denne person gennemgå en oprettelsesproces.\n\nAlle brugere kan acceptere opdaterede apptilladelser på vegne af alle andre brugere." + "Når du opretter en ny bruger, skal denne person gennemgå en oprettelsesproces.\n\nAlle brugere kan acceptere opdaterede apptilladelser på vegne af alle andre brugere." "Vil du konfigurere brugeren nu?" "Sørg for, at personen kan tage tabletten og etablere deres plads" "Vil du oprette en profil nu?" @@ -1875,6 +1893,9 @@ "Denne indstilling påvirker alle brugere på denne telefon." "Skift sprog" "Skift skriftstørrelse" + "Begrænsninger" + "Fjern begrænsninger" + "Skift pinkode" "Vis meddelelser" "Hjælp" "Konto til indhold" diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml index 9035730ed66..19b3de5d082 100644 --- a/res/values-de/arrays.xml +++ b/res/values-de/arrays.xml @@ -233,7 +233,8 @@ "Standort" "Persönlich" "SMS/MMS" - "Gerät" + "Medien" + "Gerät"
    "Ungefährer Standort" @@ -267,6 +268,17 @@ "Audio wiedergeben" "Zwischenablage lesen" "Zwischenablage ändern" + "Medienschaltflächen" + "Audiofokus" + "Gesamtlautstärke" + "Sprachlautstärke" + "Klingeltonlautstärke" + "Medienlautstärke" + "Weckerlautstärke" + "Benachrichtigungslautstärke" + "Bluetooth-Lautstärke" + "aktiv lassen" + "Standort beobachten" "Standort" @@ -300,12 +312,33 @@ "Audio wiedergeben" "Zwischenablage lesen" "Zwischenablage ändern" + "Medienschaltflächen" + "Audiofokus" + "Gesamtlautstärke" + "Sprachlautstärke" + "Klingeltonlautstärke" + "Medienlautstärke" + "Weckerlautstärke" + "Benachrichtigungslautstärke" + "Bluetooth-Lautstärke" + "Aktiv lassen" + "Standort" "Kurz" "Mittel" "Lang" + + "Dalvik" + "ART" + "ART (Debug)" + + + "Dalvik verwenden" + "ART verwenden" + "ART-Debug-Build verwenden" + "Nie prüfen" "Nur auf DRM-Inhalte prüfen" @@ -367,6 +400,11 @@ "Auf Bildschirm als Linien" "In adb shell dumpsys gfxinfo" + + "Aus" + "Überschneidungsbereiche anzeigen" + "Überschneidungszähler anzeigen" + "Standardlimit" "Keine Hintergrundprozesse" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 021ef10149f..ec67e56cc8d 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -275,8 +275,8 @@ "Die Datenkonnektivität wurde unterbrochen, weil Sie Ihr Heimnetzwerk verlassen haben und Daten-Roaming nicht aktiviert ist." "Aktivieren" "Wenn Sie Daten-Roaming zulassen, können hohe Roaming-Gebühren anfallen!" - "Wenn Sie Daten-Roaming zulassen, können erhebliche Roaming-Gebühren entstehen."\n\n"Diese Einstellung betrifft alle Nutzer auf diesem Tablet." - "Wenn Sie Daten-Roaming zulassen, können erhebliche Roaming-Gebühren entstehen."\n\n"Diese Einstellung betrifft alle Nutzer auf diesem Telefon." + "Wenn Sie Daten-Roaming zulassen, können erhebliche Roaming-Gebühren entstehen.\n\nDiese Einstellung betrifft alle Nutzer auf diesem Tablet." + "Wenn Sie Daten-Roaming zulassen, können erhebliche Roaming-Gebühren entstehen.\n\nDiese Einstellung betrifft alle Nutzer auf diesem Telefon." "Daten-Roaming zulassen?" "Netzbetreiberauswahl" "Netzbetreiber auswählen" @@ -322,8 +322,8 @@ "Numerische PIN oder Passwort festlegen, mit dem das Tablet beim Einschalten entschlüsselt werden muss" "Numerische PIN oder Passwort festlegen, mit dem das Telefon beim Einschalten entschlüsselt werden muss" "Verschlüsselt" - "Sie können Ihre Konten, Einstellungen, heruntergeladenen Apps mit den dazugehörigen Daten sowie Multimedia- und andere Dateien verschlüsseln. Nach der Verschlüsselung Ihres Tablets ist bei jedem Einschalten die Eingabe einer PIN-Nummer oder eines Passworts erforderlich. Sie können die Verschlüsselung Ihres Tablets nur aufheben, indem Sie das Gerät auf die Werkseinstellungen zurücksetzen. Dabei werden alle Ihre Daten gelöscht."\n\n"Die Verschlüsselung dauert mindestens eine Stunde. Vergewissern Sie sich zu Beginn, dass Ihr Akku vollständig geladen ist, und lassen Sie Ihr Tablet angeschlossen, bis die Verschlüsselung abgeschlossen ist. Eine Unterbrechung dieses Vorgangs kann zu teilweisem oder vollständigem Datenverlust führen." - "Sie können Ihre Konten, Einstellungen, heruntergeladenen Apps mit den dazugehörigen Daten sowie Multimedia- und andere Dateien verschlüsseln. Nach der Verschlüsselung Ihres Telefons ist bei jedem Einschalten die Eingabe einer PIN-Nummer oder eines Passworts erforderlich. Sie können die Verschlüsselung Ihres Telefons nur aufheben, indem Sie das Gerät auf die Werkseinstellungen zurücksetzen. Dabei werden alle Ihre Daten gelöscht."\n\n"Die Verschlüsselung dauert mindestens eine Stunde. Vergewissern Sie sich zu Beginn, dass Ihr Akku vollständig geladen ist, und lassen Sie Ihr Telefon angeschlossen, bis die Verschlüsselung abgeschlossen ist. Eine Unterbrechung dieses Vorgangs kann zu teilweisem oder vollständigem Datenverlust führen." + "Sie können Ihre Konten, Einstellungen, heruntergeladenen Apps mit den dazugehörigen Daten sowie Multimedia- und andere Dateien verschlüsseln. Nach der Verschlüsselung Ihres Tablets ist bei jedem Einschalten die Eingabe einer PIN-Nummer oder eines Passworts erforderlich. Sie können die Verschlüsselung Ihres Tablets nur aufheben, indem Sie das Gerät auf die Werkseinstellungen zurücksetzen. Dabei werden alle Ihre Daten gelöscht.\n\nDie Verschlüsselung dauert mindestens eine Stunde. Vergewissern Sie sich zu Beginn, dass Ihr Akku vollständig geladen ist, und lassen Sie Ihr Tablet angeschlossen, bis die Verschlüsselung abgeschlossen ist. Eine Unterbrechung dieses Vorgangs kann zu teilweisem oder vollständigem Datenverlust führen." + "Sie können Ihre Konten, Einstellungen, heruntergeladenen Apps mit den dazugehörigen Daten sowie Multimedia- und andere Dateien verschlüsseln. Nach der Verschlüsselung Ihres Telefons ist bei jedem Einschalten die Eingabe einer PIN-Nummer oder eines Passworts erforderlich. Sie können die Verschlüsselung Ihres Telefons nur aufheben, indem Sie das Gerät auf die Werkseinstellungen zurücksetzen. Dabei werden alle Ihre Daten gelöscht.\n\nDie Verschlüsselung dauert mindestens eine Stunde. Vergewissern Sie sich zu Beginn, dass Ihr Akku vollständig geladen ist, und lassen Sie Ihr Telefon angeschlossen, bis die Verschlüsselung abgeschlossen ist. Eine Unterbrechung dieses Vorgangs kann zu teilweisem oder vollständigem Datenverlust führen." "Tablet verschlüsseln" "Telefon verschlüsseln" "Laden Sie Ihren Akku auf und versuchen Sie es erneut." @@ -339,8 +339,8 @@ "Versuchen Sie es in ^1 Sekunden erneut." "Passwort eingeben" "Verschlüsselung fehlgeschlagen" - "Die Verschlüsselung wurde unterbrochen und kann nicht abgeschlossen werden. Daher ist der Zugriff auf die Daten auf Ihrem Tablet nicht mehr möglich. "\n\n"Damit Sie Ihr Tablet wieder verwenden können, müssen Sie es auf die Werkseinstellungen zurücksetzen. Wenn Sie Ihr Tablet nach dem Zurücksetzen wieder einrichten, können Sie gegebenenfalls Daten, die gesichert wurden, in Ihrem Google-Konto wiederherstellen." - "Die Verschlüsselung wurde unterbrochen und kann nicht abgeschlossen werden. Daher ist der Zugriff auf die Daten auf Ihrem Telefon nicht mehr möglich. "\n\n"Damit Sie Ihr Telefon wieder verwenden können, müssen Sie es auf die Werkseinstellungen zurücksetzen. Wenn Sie Ihr Telefon nach dem Zurücksetzen wieder einrichten, können Sie gegebenenfalls Daten, die gesichert wurden, in Ihrem Google-Konto wiederherstellen." + "Die Verschlüsselung wurde unterbrochen und kann nicht abgeschlossen werden. Daher ist der Zugriff auf die Daten auf Ihrem Tablet nicht mehr möglich. \n\nDamit Sie Ihr Tablet wieder verwenden können, müssen Sie es auf die Werkseinstellungen zurücksetzen. Wenn Sie Ihr Tablet nach dem Zurücksetzen wieder einrichten, können Sie gegebenenfalls Daten, die gesichert wurden, in Ihrem Google-Konto wiederherstellen." + "Die Verschlüsselung wurde unterbrochen und kann nicht abgeschlossen werden. Daher ist der Zugriff auf die Daten auf Ihrem Telefon nicht mehr möglich. \n\nDamit Sie Ihr Telefon wieder verwenden können, müssen Sie es auf die Werkseinstellungen zurücksetzen. Wenn Sie Ihr Telefon nach dem Zurücksetzen wieder einrichten, können Sie gegebenenfalls Daten, die gesichert wurden, in Ihrem Google-Konto wiederherstellen." "Eingabemethode wechseln" "Display-Sperre wählen" "Ersatzsperre wählen" @@ -515,6 +515,7 @@ "Verbindung wird hergestellt..." "Verbunden" "Verfügbar" + "In Verwendung" "Display-Einstellungen" "Verbindung trennen?" "Hierdurch wird die Verbindung mit<br><b>%1$s</b> getrennt." @@ -533,7 +534,7 @@ "Aus" "Nicht verfügbar, weil NFC deaktiviert ist" "Android Beam" - "Wenn diese Funktion aktiviert ist, können Sie App-Inhalte auf ein anderes NFC-fähiges Gerät beamen, indem Sie die Geräte dicht nebeneinander halten. Sie können beispielsweise Browserseiten, YouTube-Videos und Kontakte beamen."\n\n"Halten Sie die Geräte einfach dicht nebeneinander, am besten Rückseite an Rückseite, und berühren Sie den Bildschirm. Die App bestimmt, was übertragen wird." + "Wenn diese Funktion aktiviert ist, können Sie App-Inhalte auf ein anderes NFC-fähiges Gerät beamen, indem Sie die Geräte dicht nebeneinander halten. Sie können beispielsweise Browserseiten, YouTube-Videos und Kontakte beamen.\n\nHalten Sie die Geräte einfach dicht nebeneinander, am besten Rückseite an Rückseite, und berühren Sie den Bildschirm. Die App bestimmt, was übertragen wird." "Diensterkennung" "Ermöglicht Apps auf anderen Geräten, Apps auf diesem Gerät zu erkennen" "WLAN" @@ -621,7 +622,7 @@ "Gesichert mit %1$s" ", gesichert mit %1$s" "Keine" - "Zur Verbesserung der Standortgenauigkeit und zu anderen Zwecken möchte %1$s die Netzwerküberprüfung aktivieren, auch wenn das WLAN deaktiviert ist."\n\n"Möchten Sie dies für alle Apps zulassen, die eine Überprüfung durchführen möchten?" + "Zur Verbesserung der Standortgenauigkeit und zu anderen Zwecken möchte %1$s die Netzwerküberprüfung aktivieren, auch wenn das WLAN deaktiviert ist.\n\nMöchten Sie dies für alle Apps zulassen, die eine Überprüfung durchführen möchten?" "Zulassen" "Ablehnen" "Verbinden" @@ -633,8 +634,8 @@ "Abbrechen" "Trotzdem überspringen" "Nicht überspringen" - "Achtung: Es können zusätzliche Kosten für die Datenübertragung vonseiten des Mobilfunkanbieters anfallen."\n\n"Das Einrichten des Tablets kann eine erhöhte Netzwerkaktivität erfordern." - "Achtung: Es können zusätzliche Kosten für die Datenübertragung vonseiten des Mobilfunkanbieters anfallen."\n\n"Das Einrichten des Telefons kann eine erhöhte Netzwerkaktivität erfordern." + "Achtung: Es können zusätzliche Kosten für die Datenübertragung vonseiten des Mobilfunkanbieters anfallen.\n\nDas Einrichten des Tablets kann eine erhöhte Netzwerkaktivität erfordern." + "Achtung: Es können zusätzliche Kosten für die Datenübertragung vonseiten des Mobilfunkanbieters anfallen.\n\nDas Einrichten des Telefons kann eine erhöhte Netzwerkaktivität erfordern." "Achtung: Das Tablet kann erst überprüfen, ob Ihre Software aktuell ist, wenn eine Internetverbindung besteht." "Achtung: Das Telefon kann erst überprüfen, ob Ihre Software aktuell ist, wenn eine Internetverbindung besteht." "Das Tablet konnte nicht auf dieses WLAN zugreifen." @@ -774,9 +775,9 @@ "PIN für SIM-Karte" "Falsche PIN" "Die PINs stimmen nicht überein." - "PIN kann nicht geändert werden."\n"Möglicherweise ist es die falsche PIN." + "PIN kann nicht geändert werden.\nMöglicherweise ist es die falsche PIN." "SIM-PIN erfolgreich geändert" - "Status der SIM-Kartensperrung kann nicht geändert werden."\n"Möglicherweise falsche PIN." + "Status der SIM-Kartensperrung kann nicht geändert werden.\nMöglicherweise falsche PIN." "OK" "Abbrechen" "Tablet-Status" @@ -837,7 +838,7 @@ "SD-Karte entnehmen" "Internen USB-Speicher trennen" "SD-Karte trennen, damit Sie sie sicher entfernen können" - "USB-Sp. für Bereitst. einlegen" + "USB-Speicher für Bereitst. einlegen" "SD-Karte zur Bereitstellung einlegen" "USB-Speicher bereitst." "SD-Karte bereitstellen" @@ -919,9 +920,9 @@ "Auf Werkszustand zurück" "Löscht alle Daten auf dem Tablet" "Löscht alle Daten auf dem Telefon" - "Hierdurch werden alle Daten aus dem ""internen Speicher"" Ihres Tablets gelöscht, u. a."\n\n
  • "Ihr Google-Konto"
  • \n
  • "System- und App-Daten sowie entsprechende Einstellungen"
  • \n
  • "Heruntergeladene Apps"
  • - "Hierdurch werden alle Daten aus dem ""internen Speicher"" Ihres Telefons gelöscht, u. a."\n\n
  • "Ihr Google-Konto"
  • \n
  • "System- und App-Daten sowie entsprechende Einstellungen"
  • \n
  • "Heruntergeladene Apps"
  • - \n\n"Sie sind zurzeit in folgenden Konten angemeldet:"\n + "Hierdurch werden alle Daten aus dem ""internen Speicher"" Ihres Tablets gelöscht, u. a.\n\n"
  • "Ihr Google-Konto"
  • \n
  • "System- und App-Daten sowie entsprechende Einstellungen"
  • \n
  • "Heruntergeladene Apps"
  • + "Hierdurch werden alle Daten aus dem ""internen Speicher"" Ihres Telefons gelöscht, u. a.\n\n"
  • "Ihr Google-Konto"
  • \n
  • "System- und App-Daten sowie entsprechende Einstellungen"
  • \n
  • "Heruntergeladene Apps"
  • + \n\n"Sie sind zurzeit in folgenden Konten angemeldet:\n"
  • "Musik"
  • \n
  • "Fotos"
  • \n
  • "Sonstige Nutzerdaten"
  • \n\n"Um auch Musik, Bilder und sonstige Nutzerdaten zu löschen, muss der ""USB-Speicher"" gelöscht werden." \n\n"Um auch Musik, Bilder und sonstige Nutzerdaten zu löschen, muss die ""SD-Karte"" gelöscht werden." @@ -1106,7 +1107,7 @@ "Prozesse im Cache anzeigen" "App-Einstell. zurücksetzen" "App-Einstellungen zurücksetzen?" - "Hierdurch werden alle Einstellungen zurückgesetzt für:"\n\n" "
  • "Deaktivierte Apps"
  • \n" "
  • "Deaktivierte App-Benachrichtigungen"
  • \n" "
  • "Standard-Apps für Aktionen"
  • \n" "
  • "Hintergrunddatenbeschränkungen für Apps"
  • \n\n" Es gehen Ihnen keine App-Daten verloren."
    + "Hierdurch werden alle Einstellungen zurückgesetzt für:\n\n "
  • "Deaktivierte Apps"
  • \n" "
  • "Deaktivierte App-Benachrichtigungen"
  • \n" "
  • "Standard-Apps für Aktionen"
  • \n" "
  • "Hintergrunddatenbeschränkungen für Apps"
  • \n\n" Es gehen Ihnen keine App-Daten verloren."
    "Apps zurücksetzen" "Speicherplatz verwalten" "Filter" @@ -1179,7 +1180,7 @@ "Von Apps verwendeten Speicher anzeigen" "Aktive Dienste" "Momentan ausgeführte Dienste anzeigen und steuern" - "Neustart wird durchgeführt." + "Neustart wird durchgeführt..." "Hintergrundprozess im Cache" "Nichts wird ausgeführt." "Von der App gestartet" @@ -1241,9 +1242,7 @@ "Drücken Sie zum Wechseln Strg+Leertaste." "Standard" "Tastaturlayouts" - "Mein Wörterbuch" - "Mein Wörterbuch" - "Persönliche Wörterbücher" + "Mein Wörterbuch" "Hinzufügen" "Ins Wörterbuch" @@ -1304,6 +1303,11 @@ "Fügt die Option für den Fehlerbericht im Menü \"Akku\" hinzu" "Aktiv lassen" "Display wird beim Laden nie in den Ruhezustand versetzt" + "Bluetooth HCI-Snoop-Protokoll aktivieren" + "Alle Bluetooth HCI-Pakete in einer Datei erfassen" + "Laufzeit auswählen" + "Laufzeit auswählen" + "Neu starten, um Laufzeit von %1$s zu %2$s zu ändern?" "Falsche Standorte" "Falsche Standorte zulassen" "USB-Debugging zulassen?" @@ -1316,11 +1320,13 @@ "USB-Speicher schützen" "Apps benötigen die Berechtigung zum Lesen des USB-Speichers" "USB-Speicher schützen?" - "Wenn der USB-Speicher geschützt ist, benötigen Apps die Berechtigung zum Lesen von Daten aus dem externen Speicher."\n\n"Einige Apps funktionieren eventuell erst nach der Aktualisierung durch ihre Entwickler." + "Wenn der USB-Speicher geschützt ist, benötigen Apps die Berechtigung zum Lesen von Daten aus dem externen Speicher.\n\nEinige Apps funktionieren eventuell erst nach der Aktualisierung durch ihre Entwickler." "SD-Karte schützen" "Apps benötigen die Berechtigung zum Lesen der SD-Karte" "SD-Karte schützen?" - "Wenn die SD-Karte geschützt ist, benötigen Apps die Berechtigung zum Lesen von Daten aus dem externen Speicher."\n\n"Einige Apps funktionieren eventuell erst nach der Aktualisierung durch ihre Entwickler." + "Wenn die SD-Karte geschützt ist, benötigen Apps die Berechtigung zum Lesen von Daten aus dem externen Speicher.\n\nEinige Apps funktionieren eventuell erst nach der Aktualisierung durch ihre Entwickler." + "Lokales Terminal" + "Terminal-App mit Zugriff auf lokale Shell aktivieren" "Gadget auswählen" "Widget auswählen" "Widget erstellen und Zugriff erlauben?" @@ -1341,11 +1347,11 @@ "Dienste" "System" "Vergrößerungsbewegungen" - "Wenn diese Funktion aktiviert ist, können Sie heranzoomen und herauszoomen, indem Sie drei Mal auf den Bildschirm tippen."\n\n"Wenn Sie herangezoomt haben, können Sie:"\n
    • "Schwenken: mindestens 2 Finger über den Bildschirm ziehen"
    • \n
    • "Zoomstufe anpassen: mindestens 2 Finger zusammen- oder auseinanderziehen"
    \n\n"Sie können auch das, was sich unter Ihrem Finger befindet, vorübergehend vergrößern, indem Sie drei Mal tippen und halten. In diesem vergrößerten Zustand können Sie Ihren Finger ziehen, um verschiedene Bereiche des Bildschirms zu erkunden. Heben Sie Ihren Finger an, um zum vorherigen Zustand zurückzukehren."\n\n"Hinweis: Das dreimalige Tippen zur Vergrößerung funktioniert überall außer in der Tastatur und in der Navigationsleiste."
    + "Wenn diese Funktion aktiviert ist, können Sie heranzoomen und herauszoomen, indem Sie drei Mal auf den Bildschirm tippen.\n\nWenn Sie herangezoomt haben, können Sie:\n"
    • "Schwenken: mindestens 2 Finger über den Bildschirm ziehen"
    • \n
    • "Zoomstufe anpassen: mindestens 2 Finger zusammen- oder auseinanderziehen"
    \n\n"Sie können auch das, was sich unter Ihrem Finger befindet, vorübergehend vergrößern, indem Sie drei Mal tippen und halten. In diesem vergrößerten Zustand können Sie Ihren Finger ziehen, um verschiedene Bereiche des Bildschirms zu erkunden. Heben Sie Ihren Finger an, um zum vorherigen Zustand zurückzukehren.\n\nHinweis: Das dreimalige Tippen zur Vergrößerung funktioniert überall außer in der Tastatur und in der Navigationsleiste."
    "Bedienungshilfenverknüpfung" "An" "Aus" - "Wenn diese Funktion aktiviert ist, können Sie Bedienungshilfen schnell in zwei Schritten aktivieren:"\n\n"Schritt 1: Drücken und halten Sie die Ein-/Austaste, bis Sie einen Ton hören oder eine Vibration spüren."\n\n"Schritt 2: Berühren und halten Sie mit zwei Fingern, bis Sie eine Audiobestätigung hören."\n\n"Falls das Gerät mehrere Nutzer hat, werden die Bedienungshilfen durch Verwendung dieser Verknüpfung in der Bildschirmsperre solange aktiviert, bis das Gerät entsperrt ist." + "Wenn diese Funktion aktiviert ist, können Sie Bedienungshilfen schnell in zwei Schritten aktivieren:\n\nSchritt 1: Drücken und halten Sie die Ein-/Austaste, bis Sie einen Ton hören oder eine Vibration spüren.\n\nSchritt 2: Berühren und halten Sie mit zwei Fingern, bis Sie eine Audiobestätigung hören.\n\nFalls das Gerät mehrere Nutzer hat, werden die Bedienungshilfen durch Verwendung dieser Verknüpfung in der Bildschirmsperre solange aktiviert, bis das Gerät entsperrt ist." "Großer Text" "Bildschirmvergrößerung" "Vergrößerung autom. aktualisieren" @@ -1367,6 +1373,16 @@ "TalkBack bietet blinden Nutzern und Nutzern mit eingeschränktem Sehvermögen gesprochenes Feedback. Möchten Sie diese Funktion kostenlos von Android Market installieren?" "Es wurde keine Beschreibung bereitgestellt." "Einstellungen" + "Drucken" + "Druckeinstellungen" + "Dienste" + "%1$s verwenden?" + "%1$s kann Ihre Druckdokumente empfangen. Diese Dokumente können vertrauliche Daten enthalten." + "Keine Dienste installiert" + "Einstellungen" + "Drucker hinzufügen" + "An" + "Aus" "Akku" "Was zum Akkuverbrauch beiträgt" "Keine Daten zum Akkuverbrauch" @@ -1406,8 +1422,10 @@ "WLAN aktiv" "Tablet" "Telefon" - "Gesendete Daten" - "Empfangene Daten" + "Mobildaten gesendet" + "Mobildaten empfangen" + "WLAN-Daten gesendet" + "WLAN-Daten empfangen" "Audio" "Video" "Laufzeit" @@ -1461,6 +1479,7 @@ "Tonlage" "Beeinflusst den Klang des gesprochenen Textes" "Sprache" + "Keine Sprache ausgewählt" "Legt die sprachspezifische Stimme für den gesprochenen Text fest" "Beispiel anhören" "Kurze Demonstration der Sprachsynthese abspielen" @@ -1561,7 +1580,7 @@ "Geräteadministrator aktivieren?" "Aktivieren" "Geräteadministrator" - "Die Aktivierung dieses Administrators ermöglicht der App %1$s, folgende Vorgänge auszuführen:" + "Die Aktivierung dieses Administrators ermöglicht der App \"%1$s\", folgende Vorgänge auszuführen:" "Dieser Administrator ist aktiv und ermöglicht der App %1$s, folgende Vorgänge auszuführen:" "Unbenannt" "Allgemein" @@ -1595,7 +1614,7 @@ "EAP wird nicht unterstützt." "Während der Einrichtung können Sie keine EAP-WLAN-Verbindung konfigurieren. Sie können dies anschließend in den Einstellungen unter \"Drahtlos &amp Netzwerke\" vornehmen." "Der Verbindungsaufbau kann einige Minuten dauern..." - "Berühren Sie ""Weiter"", um mit der Einrichtung fortzufahren."\n\n"Tippen Sie auf ""Zurück"", um eine Verbindung zu einem anderen WLAN-Netzwerk herzustellen." + "Berühren Sie ""Weiter"", um mit der Einrichtung fortzufahren.\n\nTippen Sie auf ""Zurück"", um eine Verbindung zu einem anderen WLAN-Netzwerk herzustellen." "Synchronisierung aktiviert" "Synchronisierung deaktiviert" "Synchronisierungsfehler" @@ -1677,8 +1696,7 @@ "Flash-Ansicht im Fenster, wenn mit GPU dargestellt" "Hardwareebenen-Updates" "Hardwareebenen blinken beim Aktualisieren grün" - "GPU-Überlastung anzeigen" - "Niedrig nach hoch: blau, grün, hellrot, rot" + "Debugging – GPU-Überschneidung" "HW-Overlays deaktivieren" "GPU immer für Bildschirmaufbau verwenden" "OpenGL-Traces aktivieren" @@ -1739,11 +1757,11 @@ "Hintergrunddaten in Mobilfunknetzen deaktivieren und sofern verfügbar andere als Mobilfunknetze verwenden" "Legen Sie zur Beschränkung der App-Hintergrunddaten zuerst ein Mobildatenlimit fest." "Hintergrunddaten beschränken?" - "Diese Funktion kann dazu führen, dass eine auf Hintergrunddaten basierende App nicht mehr funktioniert, wenn nur Mobilfunknetze verfügbar sind."\n\n"Geeignetere Kontrollmechanismen für den Datenverbrauch finden Sie in den Einstellungen der App." + "Diese Funktion kann dazu führen, dass eine auf Hintergrunddaten basierende App nicht mehr funktioniert, wenn nur Mobilfunknetze verfügbar sind.\n\nGeeignetere Kontrollmechanismen für den Datenverbrauch finden Sie in den Einstellungen der App." "Hintergrunddaten können nur beschränkt werden, wenn Sie ein Mobilfunklimit festgelegt haben." "Autom. Synchronisierung aktivieren?" - "Änderungen, die Sie im Web an Ihren Konten vornehmen, werden automatisch auf Ihrem Tablet übernommen."\n\n"Für einige Konten werden möglicherweise auch Änderungen, die Sie auf Ihrem Tablet vornehmen, im Web übernommen. Dies ist die Funktionsweise von Google Konten."\n\n"Unter \"Einstellungen > Konten\" können Sie auswählen, welche Informationen in den einzelnen Konten synchronisiert werden sollen." - "Änderungen, die Sie im Web an Ihren Konten vornehmen, werden automatisch auf Ihrem Telefon übernommen."\n\n"Für einige Konten werden eventuell auch Änderungen, die Sie auf Ihrem Telefon vornehmen, im Web übernommen. Dies ist die Funktionsweise von Google Konten."\n\n"Unter \"Einstellungen > Konten\" können Sie auswählen, welche Informationen in den einzelnen Konten synchronisiert werden sollen." + "Änderungen, die Sie im Web an Ihren Konten vornehmen, werden automatisch auf Ihrem Tablet übernommen.\n\nFür einige Konten werden möglicherweise auch Änderungen, die Sie auf Ihrem Tablet vornehmen, im Web übernommen. Dies ist die Funktionsweise von Google Konten.\n\nUnter \"Einstellungen > Konten\" können Sie auswählen, welche Informationen in den einzelnen Konten synchronisiert werden sollen." + "Änderungen, die Sie im Web an Ihren Konten vornehmen, werden automatisch auf Ihrem Telefon übernommen.\n\nFür einige Konten werden eventuell auch Änderungen, die Sie auf Ihrem Telefon vornehmen, im Web übernommen. Dies ist die Funktionsweise von Google Konten.\n\nUnter \"Einstellungen > Konten\" können Sie auswählen, welche Informationen in den einzelnen Konten synchronisiert werden sollen." "Autom. Synchronisierung deaktivieren?" "So reduzieren Sie den Datenverbrauch und schonen den Akku, müssen jedoch jedes einzelne Konto manuell synchronisieren, um neue Informationen abzurufen. Außerdem erhalten Sie keine Benachrichtigungen, wenn Aktualisierungen erfolgen." "Datum für Zurücksetzung der Nutzungszyklen" @@ -1752,12 +1770,12 @@ "Warnung für Datenverbrauch festlegen" "Limit festlegen" "Datenverbrauch begrenzen" - "Ihre mobile Datenverbindung wird deaktiviert, sobald das angegebene Limit erreicht ist."\n\n"Der Datenverbrauch wird von Ihrem Tablet berechnet und kann von der Abrechnung Ihres Mobilfunkanbieters abweichen. Ziehen Sie deshalb die Verwendung eines niedrigen Limits in Betracht." - "Ihre mobile Datenverbindung wird deaktiviert, sobald das angegebene Limit erreicht ist."\n\n"Der Datenverbrauch wird von Ihrem Telefon berechnet und kann von der Abrechnung Ihres Mobilfunkanbieters abweichen. Ziehen Sie deshalb die Verwendung eines niedrigen Limits in Betracht." + "Ihre mobile Datenverbindung wird deaktiviert, sobald das angegebene Limit erreicht ist.\n\nDer Datenverbrauch wird von Ihrem Tablet berechnet und kann von der Abrechnung Ihres Mobilfunkanbieters abweichen. Ziehen Sie deshalb die Verwendung eines niedrigen Limits in Betracht." + "Ihre mobile Datenverbindung wird deaktiviert, sobald das angegebene Limit erreicht ist.\n\nDer Datenverbrauch wird von Ihrem Telefon berechnet und kann von der Abrechnung Ihres Mobilfunkanbieters abweichen. Ziehen Sie deshalb die Verwendung eines niedrigen Limits in Betracht." "Hintergrunddaten beschränken?" "Wenn Sie mobile Hintergrunddaten beschränken, funktionieren einige Apps und Dienste nur bei WLAN-Verbindung." - "Wenn Sie die mobilen Hintergrunddaten beschränken, funktionieren einige Apps und Dienste nur bei WLAN-Verbindung."\n\n"Diese Einstellung betrifft alle Nutzer auf diesem Tablet." - "Wenn Sie die mobilen Hintergrunddaten beschränken, funktionieren einige Apps und Dienste nur bei WLAN-Verbindung."\n\n"Diese Einstellung betrifft alle Nutzer auf diesem Telefon." + "Wenn Sie die mobilen Hintergrunddaten beschränken, funktionieren einige Apps und Dienste nur bei WLAN-Verbindung.\n\nDiese Einstellung betrifft alle Nutzer auf diesem Tablet." + "Wenn Sie die mobilen Hintergrunddaten beschränken, funktionieren einige Apps und Dienste nur bei WLAN-Verbindung.\n\nDiese Einstellung betrifft alle Nutzer auf diesem Telefon." "^1""^2"\n"Warnung" "^1""^2"\n"-Limit" "Entfernte Apps" @@ -1844,8 +1862,8 @@ "Nutzer" "Eingeschränkte Profile" "Neuen Nutzer hinzufügen" - "Sie können dieses Gerät mit anderen Personen teilen und dazu zusätzliche Nutzer erstellen. Jeder Nutzer hat seinen eigenen Bereich, in dem er unter anderem eigene Apps oder Hintergründe installieren kann. Nutzer können auch Tablet-Einstellungen wie WLAN anpassen, die jeden Nutzer betreffen."\n\n"Nachdem Sie einen neuen Nutzer erstellt haben, muss dieser einen Einrichtungsprozess durchlaufen."\n\n"Jeder Nutzer kann aktualisierte App-Berechtigungen im Namen aller anderen Nutzer akzeptieren." - "Nachdem Sie einen neuen Nutzer erstellt haben, muss dieser einen Einrichtungsprozess durchlaufen."\n\n"Jeder Nutzer kann aktualisierte App-Berechtigungen im Namen aller anderen Nutzer akzeptieren." + "Sie können dieses Gerät mit anderen Personen teilen und dazu zusätzliche Nutzer erstellen. Jeder Nutzer hat seinen eigenen Bereich, in dem er unter anderem eigene Apps oder Hintergründe installieren kann. Nutzer können auch Tablet-Einstellungen wie WLAN anpassen, die jeden Nutzer betreffen.\n\nNachdem Sie einen neuen Nutzer erstellt haben, muss dieser einen Einrichtungsprozess durchlaufen.\n\nJeder Nutzer kann aktualisierte App-Berechtigungen im Namen aller anderen Nutzer akzeptieren." + "Nachdem Sie einen neuen Nutzer erstellt haben, muss dieser einen Einrichtungsprozess durchlaufen.\n\nJeder Nutzer kann aktualisierte App-Berechtigungen im Namen aller anderen Nutzer akzeptieren." "Nutzer jetzt einrichten?" "Der Nutzer muss Zugang zu dem Tablet haben und seinen Speicherplatz einrichten." "Profil jetzt einrichten?" @@ -1876,6 +1894,9 @@ "Diese Einstellung betrifft alle Nutzer auf diesem Telefon." "Sprache ändern" "Schriftgröße ändern" + "Einschränkungen" + "Einschränkungen aufheben" + "PIN ändern" "Benachrichtigungen zeigen" "Hilfe" "Konto für Inhalte" diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml index 6a2ceb177ad..e51007eee7a 100644 --- a/res/values-el/arrays.xml +++ b/res/values-el/arrays.xml @@ -233,7 +233,8 @@ "Τοποθεσία" "Προσωπικό" "Ανταλλαγή μηνυμάτων" - "Συσκευή" + "Μέσα" + "Συσκευή"
    "τοποθεσία κατά προσέγγιση" @@ -267,6 +268,17 @@ "αναπαραγωγή ήχου" "ανάγνωση περιεχόμενων προχείρου" "τροποποίηση περιεχομένων προχείρου" + "κουμπιά μέσων" + "εστίαση ήχου" + "κύρια ένταση ήχου" + "έντασης ήχου φωνής" + "ένταση ήχου κλήσης" + "ένταση ήχου μέσων" + "ένταση ήχου ξυπνητηριού" + "ένταση ήχου ειδοποιήσεων" + "ένταση ήχου Bluetooth" + "διατήρηση λειτουργίας" + "παρακολούθηση τοποθεσίας" "Τοποθεσία" @@ -300,12 +312,33 @@ "Αναπαραγωγή ήχου" "Ανάγνωση περιεχομένων προχείρου" "Τροποποίηση περιεχομένων προχείρου" + "Κουμπιά μέσων" + "Εστίαση ήχου" + "Κύρια ένταση ήχου" + "Έντασης ήχου φωνής" + "Ένταση ήχου κλήσης" + "Ένταση ήχου πολυμέσων" + "Ένταση ήχου ξυπνητηριού" + "Ένταση ήχου ειδοποιήσεων" + "Ένταση ήχου Bluetooth" + "Διατήρηση λειτουργίας" + "Τοποθεσία" "Σύντομο" "Μεσαία" "Παρατεταμένο" + + "Dalvik" + "ART" + "ART (εντοπισμός σφαλμάτων)" + + + "Χρήση Dalvik" + "Χρήση ART" + "Χρήση της έκδοσης εντοπισμού σφαλμάτων ART" + "Να μην γίνεται ποτέ έλεγχος" "Έλεγχος μόνο για περιεχόμενο DRM" @@ -367,6 +400,11 @@ "Στην οθόνη ως γραμμές" "Σε adb shell dumpsys gfxinfo" + + "Ανενεργές" + "Εμφάνιση περιοχών υπέρβασης" + "Εμφάνιση μετρητή υπέρβασης" + "Τυπικό όριο" "Δεν υπάρχουν διεργασίες παρασκηνίου" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index 7eaca177685..6bc8648434e 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -275,8 +275,8 @@ "Χάσατε τη σύνδεση δεδομένων επειδή φύγατε από το οικείο δίκτυο έχοντας την περιαγωγή δεδομένων απενεργοποιημένη." "Ενεργοποίηση" "Όταν επιτρέπετε την περιαγωγή δεδομένων, ενδέχεται να επιβαρυνθείτε με σημαντικές χρεώσεις περιαγωγής!" - "Όταν επιτρέπετε την περιαγωγή δεδομένων, ενδέχεται να ισχύσουν σημαντικές χρεώσεις περιαγωγής!"\n\n"Αυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο tablet." - "Όταν επιτρέπετε την περιαγωγή δεδομένων, ενδέχεται να ισχύσουν σημαντικές χρεώσεις περιαγωγής!"\n\n"Αυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο τηλέφωνο." + "Όταν επιτρέπετε την περιαγωγή δεδομένων, ενδέχεται να ισχύσουν σημαντικές χρεώσεις περιαγωγής!\n\nΑυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο tablet." + "Όταν επιτρέπετε την περιαγωγή δεδομένων, ενδέχεται να ισχύσουν σημαντικές χρεώσεις περιαγωγής!\n\nΑυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο τηλέφωνο." "Να επιτρέπεται η περιαγωγή δεδομένων;" "Επιλογή παρόχου" "Επιλέξτε μια εταιρεία δικτύου" @@ -322,8 +322,8 @@ "Να απαιτείται ένας αριθμητικός κωδικός PIN ή ένας κωδικός πρόσβασης για την αποκρυπτογράφηση του tablet κάθε φορά που το ενεργοποιείτε" "Να απαιτείται ένας αριθμητικός κωδικός PIN ή ένας κωδικός πρόσβασης για την αποκρυπτογράφηση του τηλεφώνου σας κάθε φορά που το ενεργοποιείτε" "Κρυπτογραφημένο" - "Μπορείτε να κρυπτογραφήσετε τους λογαριασμούς, τις ρυθμίσεις, τις εφαρμογές των οποίων έχετε πραγματοποιήσει λήψη και τα δεδομένα τους, τα μέσα και άλλα αρχεία σας. Αφού κρυπτογραφήσετε το tablet σας, θα πρέπει κάθε φορά που το ενεργοποιείτε να πληκτρολογείτε ένα αριθμητικό PIN ή έναν κωδικό πρόσβασης για την αποκρυπτογράφησή του. Δεν είναι δυνατή η αποκρυπτογράφηση του tablet σας, εκτός αν πραγματοποιήσετε επαναφορά εργοστασιακών ρυθμίσεων, διαγράφοντας όλα τα δεδομένα σας."\n\n"Η κρυπτογράφηση διαρκεί μια ώρα ή και περισσότερο. Θα πρέπει να την ξεκινήσετε με την μπαταρία σας φορτισμένη και το tablet σας θα πρέπει να είναι συνδεδεμένο σε πρίζα, έως ότου ολοκληρωθεί η κρυπτογράφηση. Αν διακόψετε τη διαδικασία κρυπτογράφησης, θα χάσετε ορισμένα ή όλα τα δεδομένα σας." - "Μπορείτε να κρυπτογραφήσετε τους λογαριασμούς, τις ρυθμίσεις, τις εφαρμογές των οποίων έχετε πραγματοποιήσει λήψη και τα δεδομένα τους, τα μέσα και άλλα αρχεία σας. Αφού κρυπτογραφήσετε το τηλέφωνό σας, θα πρέπει κάθε φορά που το ενεργοποιείτε να πληκτρολογείτε ένα αριθμητικό PIN ή έναν κωδικό πρόσβασης για την αποκρυπτογράφησή του. Δεν είναι δυνατή η αποκρυπτογράφηση του τηλεφώνου σας, εκτός αν πραγματοποιήσετε επαναφορά εργοστασιακών ρυθμίσεων, διαγράφοντας όλα τα δεδομένα σας."\n\n"Η κρυπτογράφηση διαρκεί μια ώρα ή και περισσότερο. Θα πρέπει να την ξεκινήσετε με την μπαταρία σας φορτισμένη, ενώ το τηλέφωνό σας θα πρέπει να είναι συνδεδεμένο σε πρίζα, έως ότου ολοκληρωθεί η κρυπτογράφηση. Αν διακόψετε τη διαδικασία κρυπτογράφησης, θα χάσετε ορισμένα ή όλα τα δεδομένα σας." + "Μπορείτε να κρυπτογραφήσετε τους λογαριασμούς, τις ρυθμίσεις, τις εφαρμογές των οποίων έχετε πραγματοποιήσει λήψη και τα δεδομένα τους, τα μέσα και άλλα αρχεία σας. Αφού κρυπτογραφήσετε το tablet σας, θα πρέπει κάθε φορά που το ενεργοποιείτε να πληκτρολογείτε ένα αριθμητικό PIN ή έναν κωδικό πρόσβασης για την αποκρυπτογράφησή του. Δεν είναι δυνατή η αποκρυπτογράφηση του tablet σας, εκτός αν πραγματοποιήσετε επαναφορά εργοστασιακών ρυθμίσεων, διαγράφοντας όλα τα δεδομένα σας.\n\nΗ κρυπτογράφηση διαρκεί μια ώρα ή και περισσότερο. Θα πρέπει να την ξεκινήσετε με την μπαταρία σας φορτισμένη και το tablet σας θα πρέπει να είναι συνδεδεμένο σε πρίζα, έως ότου ολοκληρωθεί η κρυπτογράφηση. Αν διακόψετε τη διαδικασία κρυπτογράφησης, θα χάσετε ορισμένα ή όλα τα δεδομένα σας." + "Μπορείτε να κρυπτογραφήσετε τους λογαριασμούς, τις ρυθμίσεις, τις εφαρμογές των οποίων έχετε πραγματοποιήσει λήψη και τα δεδομένα τους, τα μέσα και άλλα αρχεία σας. Αφού κρυπτογραφήσετε το τηλέφωνό σας, θα πρέπει κάθε φορά που το ενεργοποιείτε να πληκτρολογείτε ένα αριθμητικό PIN ή έναν κωδικό πρόσβασης για την αποκρυπτογράφησή του. Δεν είναι δυνατή η αποκρυπτογράφηση του τηλεφώνου σας, εκτός αν πραγματοποιήσετε επαναφορά εργοστασιακών ρυθμίσεων, διαγράφοντας όλα τα δεδομένα σας.\n\nΗ κρυπτογράφηση διαρκεί μια ώρα ή και περισσότερο. Θα πρέπει να την ξεκινήσετε με την μπαταρία σας φορτισμένη, ενώ το τηλέφωνό σας θα πρέπει να είναι συνδεδεμένο σε πρίζα, έως ότου ολοκληρωθεί η κρυπτογράφηση. Αν διακόψετε τη διαδικασία κρυπτογράφησης, θα χάσετε ορισμένα ή όλα τα δεδομένα σας." "Κρυπτογράφηση tablet" "Κρυπτογράφηση τηλεφώνου" "Φορτίστε την μπαταρία σας και δοκιμάστε ξανά." @@ -339,8 +339,8 @@ "Προσπαθήστε ξανά σε ^1 δευτερόλεπτα." "Πληκτρολογήστε τον κωδικό πρόσβασής σας" "Η κρυπτογράφηση απέτυχε" - "Η κρυπτογράφηση διακόπηκε και δεν είναι δυνατή η ολοκλήρωσή της. Κατά συνέπεια, δεν είναι πλέον δυνατή η πρόσβαση στα δεδομένα στο tablet σας. "\n\n" Για να συνεχίσετε να χρησιμοποιείτε το tablet σας θα πρέπει να πραγματοποιήσετε επαναφορά των εργοστασιακών ρυθμίσεων. Όταν ρυθμίσετε το tablet σας μετά από την επαναφορά, θα μπορείτε να επαναφέρετε τα αντίγραφα ασφαλείας των δεδομένων σας από το Λογαριασμό σας Google." - "Η κρυπτογράφηση διακόπηκε και δεν είναι δυνατή η ολοκλήρωσή της. Κατά συνέπεια, δεν είναι πλέον δυνατή η πρόσβαση στα δεδομένα στο τηλέφωνό σας. "\n\n"Για να συνεχίσετε να χρησιμοποιείτε το τηλέφωνό σας θα πρέπει να πραγματοποιήσετε επαναφορά των εργοστασιακών ρυθμίσεων. Όταν ρυθμίσετε το τηλέφωνό σας μετά από την επαναφορά, θα μπορείτε να επαναφέρετε τα αντίγραφα ασφαλείας των δεδομένων σας από τον Λογαριασμό σας Google." + "Η κρυπτογράφηση διακόπηκε και δεν είναι δυνατή η ολοκλήρωσή της. Κατά συνέπεια, δεν είναι πλέον δυνατή η πρόσβαση στα δεδομένα στο tablet σας. \n\n Για να συνεχίσετε να χρησιμοποιείτε το tablet σας θα πρέπει να πραγματοποιήσετε επαναφορά των εργοστασιακών ρυθμίσεων. Όταν ρυθμίσετε το tablet σας μετά από την επαναφορά, θα μπορείτε να επαναφέρετε τα αντίγραφα ασφαλείας των δεδομένων σας από το Λογαριασμό σας Google." + "Η κρυπτογράφηση διακόπηκε και δεν είναι δυνατή η ολοκλήρωσή της. Κατά συνέπεια, δεν είναι πλέον δυνατή η πρόσβαση στα δεδομένα στο τηλέφωνό σας. \n\nΓια να συνεχίσετε να χρησιμοποιείτε το τηλέφωνό σας θα πρέπει να πραγματοποιήσετε επαναφορά των εργοστασιακών ρυθμίσεων. Όταν ρυθμίσετε το τηλέφωνό σας μετά από την επαναφορά, θα μπορείτε να επαναφέρετε τα αντίγραφα ασφαλείας των δεδομένων σας από τον Λογαριασμό σας Google." "Εναλλαγή μεθόδου εισαγωγής" "Επιλογή κλειδ. οθόνης" "Επιλ. εφεδρ. κλειδώμ." @@ -514,6 +514,7 @@ "Γίνεται σύνδεση" "Έχει συνδεθεί" "Διαθέσιμη" + "Σε χρήση" "Ρυθμίσεις προβολής" "Αποσύνδεση;" "Με αυτόν τον τρόπο θα τερματιστεί η σύνδεσή σας με τη συσκευή:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Απενεργοποίηση" "Δεν διατίθεται, επειδή η ΕΚΠ είναι απενεργοποιημένη" "Android Beam" - "Όταν αυτή η λειτουργία ειναι ενεργοποιημένη, μπορείτε να μεταδώσετε περιεχόμενο εφαρμογών σε άλλη συσκευή με δυνατότητα ΕΚΠ, διατηρώντας τις συσκευές σε κοντινή απόσταση μεταξύ τους. Για παράδειγμα, μπορείτε να μεταδώσετε σελίδες του προγράμματος περιήγησης, βίντεο του YouTube, επαφές και άλλα."\n\n"Απλώς φέρετε τις συσκευές σε κοντινή απόσταση μεταξύ τους (συνήθως πλάτη με πλάτη) και, στη συνέχεια, αγγίξτε την οθόνη. Η εφαρμογή καθορίζει τι θα μεταδοθεί." + "Όταν αυτή η λειτουργία ειναι ενεργοποιημένη, μπορείτε να μεταδώσετε περιεχόμενο εφαρμογών σε άλλη συσκευή με δυνατότητα ΕΚΠ, διατηρώντας τις συσκευές σε κοντινή απόσταση μεταξύ τους. Για παράδειγμα, μπορείτε να μεταδώσετε σελίδες του προγράμματος περιήγησης, βίντεο του YouTube, επαφές και άλλα.\n\nΑπλώς φέρετε τις συσκευές σε κοντινή απόσταση μεταξύ τους (συνήθως πλάτη με πλάτη) και, στη συνέχεια, αγγίξτε την οθόνη. Η εφαρμογή καθορίζει τι θα μεταδοθεί." "Εντοπισμός υπηρεσίας δικτύου" "Να επιτρέπεται σε εφαρμογές ή σε άλλες συσκευές να εντοπίζουν εφαρμογές σε αυτήν τη συσκευή" "Wi-Fi" @@ -620,7 +621,7 @@ "Ασφαλισμένα με %1$s" ", ασφαλισμένο με %1$s" "Καμία" - "Για τη βελτίωση της ακρίβειας της τοποθεσίας σας και για άλλους σκοπούς, η εφαρμογή %1$s επιθυμεί να ενεργοποιήσει τη σάρωση δικτύων, ακόμη και όταν το Wi-Fi είναι απενεργοποιημένο."\n\n"Να επιτρέπεται αυτή η ενέργεια για όλες τις εφαρμογές που επιθυμούν σάρωση;" + "Για τη βελτίωση της ακρίβειας της τοποθεσίας σας και για άλλους σκοπούς, η εφαρμογή %1$s επιθυμεί να ενεργοποιήσει τη σάρωση δικτύων, ακόμη και όταν το Wi-Fi είναι απενεργοποιημένο.\n\nΝα επιτρέπεται αυτή η ενέργεια για όλες τις εφαρμογές που επιθυμούν σάρωση;" "Να επιτραπεί" "Απόρριψη" "Σύνδεση" @@ -632,8 +633,8 @@ "Ακύρωση" "Παράλειψη" "Χωρίς παράλειψη" - "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να ισχύουν επιπλέον χρεώσεις από την εταιρεία κινητής τηλεφωνίας."\n\n"Η ρύθμιση του tablet μπορεί να προκαλέσει μεγάλη δραστηριότητα δικτύου." - "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να ισχύουν επιπλέον χρεώσεις από την εταιρεία κινητής τηλεφωνίας."\n\n"Η ρύθμιση του τηλεφώνου μπορεί να προκαλέσει μεγάλη δραστηριότητα δικτύου." + "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να ισχύουν επιπλέον χρεώσεις από την εταιρεία κινητής τηλεφωνίας.\n\nΗ ρύθμιση του tablet μπορεί να προκαλέσει μεγάλη δραστηριότητα δικτύου." + "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: ενδέχεται να ισχύουν επιπλέον χρεώσεις από την εταιρεία κινητής τηλεφωνίας.\n\nΗ ρύθμιση του τηλεφώνου μπορεί να προκαλέσει μεγάλη δραστηριότητα δικτύου." "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Μέχρι να αποκτήσετε σύνδεση στο διαδίκτυο, το tablet δεν θα μπορεί να ελέγξει αν το λογισμικό είναι ενημερωμένο." "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Μέχρι να αποκτήσετε σύνδεση στο διαδίκτυο, το τηλέφωνο δεν θα μπορεί να ελέγξει αν το λογισμικό είναι ενημερωμένο." "Δεν ήταν δυνατή η σύνδεση του tablet σε αυτό το δίκτυο Wi-Fi." @@ -773,9 +774,9 @@ "Αριθμός PIN κάρτας SIM" "Εσφαλμένο PIN" "Οι αριθμοί PIN δεν ταιριάζουν" - "Δεν είναι δυνατή η αλλαγή PIN."\n"Πιθανόν ο αριθμός PIN να είναι εσφαλμένος." + "Δεν είναι δυνατή η αλλαγή PIN.\nΠιθανόν ο αριθμός PIN να είναι εσφαλμένος." "Ο αριθμός PIN της κάρτας SIM άλλαξε επιτυχώς" - "Δεν είναι δυνατή η αλλαγή της κατάστασης κλειδώματος της κάρτας SIM."\n"Πιθανόν ο αριθμός PIN να είναι εσφαλμένος." + "Δεν είναι δυνατή η αλλαγή της κατάστασης κλειδώματος της κάρτας SIM.\nΠιθανόν ο αριθμός PIN να είναι εσφαλμένος." "OK" "Ακύρωση" "Κατάσταση tablet" @@ -918,9 +919,9 @@ "Επαναφορά εργοστασιακών δεδομένων" "Διαγραφή όλων των δεδομένων στο tablet" "Διαγραφή όλων των δεδομένων στο τηλέφωνο" - "Με αυτόν τον τρόπο, θα διαγραφούν όλα τα δεδομένα από τον ""εσωτερικό χώρο αποθήκευσης"" της συσκευής σας tablet, συμπεριλαμβανομένων:"\n\n"Των δεδομένων και των ρυθμίσεων συστήματος "
  • "του Λογαριασμού σας Google "
  • \n
  • \n
  • "Ληφθείσες εφαρμογές"
  • - "Με αυτόν τον τρόπο, θα διαγραφούν όλα τα δεδομένα από τον ""εσωτερικό χώρο αποθήκευσης"" της συσκευής σας tablet, συμπεριλαμβανομένων:"\n\n"Των δεδομένων και των ρυθμίσεων συστήματος "
  • "του Λογαριασμού σας Google "
  • \n
  • \n
  • "Ληφθείσες εφαρμογές"
  • - \n\n"Αυτήν τη στιγμή είστε συνδεδεμένοι στους παρακάτω λογαριασμούς:"\n + "Με αυτόν τον τρόπο, θα διαγραφούν όλα τα δεδομένα από τον ""εσωτερικό χώρο αποθήκευσης"" της συσκευής σας tablet, συμπεριλαμβανομένων:\n\nΤων δεδομένων και των ρυθμίσεων συστήματος "
  • "του Λογαριασμού σας Google "
  • \n
  • \n
  • "Ληφθείσες εφαρμογές"
  • + "Με αυτόν τον τρόπο, θα διαγραφούν όλα τα δεδομένα από τον ""εσωτερικό χώρο αποθήκευσης"" της συσκευής σας tablet, συμπεριλαμβανομένων:\n\nΤων δεδομένων και των ρυθμίσεων συστήματος "
  • "του Λογαριασμού σας Google "
  • \n
  • \n
  • "Ληφθείσες εφαρμογές"
  • + \n\n"Αυτήν τη στιγμή είστε συνδεδεμένοι στους παρακάτω λογαριασμούς:\n"
  • "Μουσική"
  • \n
  • "Φωτογραφίες"
  • \n
  • "Άλλα δεδομένα χρήστη"
  • \n\n"Πρέπει να γίνει διαγραφή του ""χώρου αποθήκευσης USB"" για να γίνει, επίσης, εκκαθάριση της μουσικής, των εικόνων και άλλων δεδομένων." \n\n"Πρέπει να γίνει εκκαθάριση της ""κάρτας SD"" για να γίνει, επίσης, εκκαθάριση της μουσικής, των εικόνων και άλλων δεδομένων." @@ -1105,7 +1106,7 @@ "Εμφ. διαδ. προσωρ. μνήμης" "Επαναφ. προτιμ. εφαρμ." "Επαναφ. προτιμ. εφαρμ;" - "Η ενέργεια αυτή θα επαναφέρει όλες τις προτιμήσεις για:"\n\n" "
  • "Απενεργοποιημένες εφαρμογές"
  • \n" "
  • "Απενεργοποιημένες ειδοποιήσεις εφαρμογών"
  • \n" "
  • "Προεπιλεγμένες εφαρμογές για ενέργειες"
  • \n" "
  • "Περιορισμοί δεδομένων παρασκηνίου για εφαρμογές"
  • \n\n" Δεν θα χάσετε τα δεδομένα εφαρμογών."
    + "Η ενέργεια αυτή θα επαναφέρει όλες τις προτιμήσεις για:\n\n "
  • "Απενεργοποιημένες εφαρμογές"
  • \n" "
  • "Απενεργοποιημένες ειδοποιήσεις εφαρμογών"
  • \n" "
  • "Προεπιλεγμένες εφαρμογές για ενέργειες"
  • \n" "
  • "Περιορισμοί δεδομένων παρασκηνίου για εφαρμογές"
  • \n\n" Δεν θα χάσετε τα δεδομένα εφαρμογών."
    "Επαναφορά εφαρμογών" "Διαχείριση χώρου" "Φίλτρο" @@ -1240,9 +1241,7 @@ "Για εναλ., πατ. Control-Πληκ.διαστ." "Προεπιλογή" "Διατάξεις πληκτρολογίου" - "Λεξικό χρήστη" - "Προσωπικό λεξικό" - "Προσωπικά λεξικά" + "Προσωπικό λεξικό" "Προσθήκη" "Προσθήκη στο λεξικό" @@ -1303,6 +1302,11 @@ "Συμπερίληψη επιλογής στο μενού λειτουργίας για λήψη αναφοράς σφαλμάτων" "Παραμονή σε κανονική κατάσταση λειτουργίας" "Η οθόνη δεν θα μεταβαίνει ποτέ σε κατάσταση αδράνειας κατά τη φόρτιση" + "Ενεργοποίηση αρχείου καταγραφής παρακολούθησης Bluetooth HCI" + "Καταγραφή όλων των πακέτων bluetooth HCI σε ένα αρχείο" + "Επιλογή χρόνου εκτέλεσης" + "Επιλογή χρόνου εκτέλεσης" + "Να γίνει επανεκκίνηση για την αλλαγή του χρόνου εκτέλεσης από %1$s σε %2$s;" "Να επιτρέπονται ψευδείς τοποθεσίες" "Να επιτρέπονται ψευδείς τοποθεσίες" "Να επιτρέπεται ο εντοπισμός σφαλμάτων USB;" @@ -1315,11 +1319,13 @@ "Προστασία χώρου αποθήκευσης USB" "Οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση χώρου αποθήκευσης USB" "Να προστατεύεται ο χώρος αποθήκευσης USB;" - "Όταν ένας χώρος αποθήκευσης USB προστατεύεται, οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση δεδομένων από τον εξωτερικό χώρο αποθήκευσης."\n\n"Ορισμένες εφαρμογές ενδέχεται να μην λειτουργούν μέχρι να ενημερωθούν από τους προγραμματιστές τους." + "Όταν ένας χώρος αποθήκευσης USB προστατεύεται, οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση δεδομένων από τον εξωτερικό χώρο αποθήκευσης.\n\nΟρισμένες εφαρμογές ενδέχεται να μην λειτουργούν μέχρι να ενημερωθούν από τους προγραμματιστές τους." "Προστασία κάρτας SD" "Οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση κάρτας SD" "Να προστατεύεται η κάρτα SD;" - "Όταν μια κάρτα SD προστατεύεται, οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση δεδομένων από τον εξωτερικό χώρο αποθήκευσης."\n\n"Ορισμένες εφαρμογές ενδέχεται να μην λειτουργούν μέχρι να ενημερωθούν από τους προγραμματιστές τους." + "Όταν μια κάρτα SD προστατεύεται, οι εφαρμογές πρέπει να ζητούν άδεια για την ανάγνωση δεδομένων από τον εξωτερικό χώρο αποθήκευσης.\n\nΟρισμένες εφαρμογές ενδέχεται να μην λειτουργούν μέχρι να ενημερωθούν από τους προγραμματιστές τους." + "Τοπική τερματική εφαρμογή" + "Ενεργοπ.τερμ.εφαρμογής που προσφέρει πρόσβαση στο τοπικό κέλυφος" "Επιλογή gadget" "Επιλογή γραφικού στοιχείου" "Να γίνει δημιουργία γραφικού στοιχείου και να επιτρέπεται η πρόσβαση;" @@ -1340,11 +1346,11 @@ "Υπηρεσίες" "Σύστημα" "Κινήσεις μεγέθυνσης" - "Όταν είναι ενεργοποιημένη αυτή η λειτουργία, μπορείτε να κάνετε μεγέθυνση και σμίκρυνση πατώντας τρεις φορές την οθόνη."\n\n"Κατά τη μεγέθυνση, μπορείτε να κάνετε:"\n
    • "Πανοραμική λήψη: σύρετε δύο ή περισσότερα δάχτυλα κατά μήκος της οθόνης."
    • \n
    • "Προσαρμογή του επιπέδου μεγέθυνσης: πλησιάστε δύο ή περισσότερα δάχτυλα ή απομακρύνετέ τα."
    \n\n"Μπορείτε επίσης να μεγεθύνετε προσωρινά το περιεχόμενο που βρίσκεται κάτω από το δάχτυλό σας πατώντας τρεις φορές και κρατώντας παρατεταμένα. Κατά τη μεγέθυνση, μπορείτε να σύρετε το δάχτυλό σας για να εξερευνήσετε διάφορα τμήματα της οθόνης. Σηκώστε το δάχτυλό σας για να επιστρέψετε στην προηγούμενη κατάσταση."\n\n"Σημείωση: το πάτημα τρεις φορές για μεγέθυνση λειτουργεί παντού εκτός από το πληκτρολόγιο και τη γραμμή πλοήγησης."
    + "Όταν είναι ενεργοποιημένη αυτή η λειτουργία, μπορείτε να κάνετε μεγέθυνση και σμίκρυνση πατώντας τρεις φορές την οθόνη.\n\nΚατά τη μεγέθυνση, μπορείτε να κάνετε:\n"
    • "Πανοραμική λήψη: σύρετε δύο ή περισσότερα δάχτυλα κατά μήκος της οθόνης."
    • \n
    • "Προσαρμογή του επιπέδου μεγέθυνσης: πλησιάστε δύο ή περισσότερα δάχτυλα ή απομακρύνετέ τα."
    \n\n"Μπορείτε επίσης να μεγεθύνετε προσωρινά το περιεχόμενο που βρίσκεται κάτω από το δάχτυλό σας πατώντας τρεις φορές και κρατώντας παρατεταμένα. Κατά τη μεγέθυνση, μπορείτε να σύρετε το δάχτυλό σας για να εξερευνήσετε διάφορα τμήματα της οθόνης. Σηκώστε το δάχτυλό σας για να επιστρέψετε στην προηγούμενη κατάσταση.\n\nΣημείωση: το πάτημα τρεις φορές για μεγέθυνση λειτουργεί παντού εκτός από το πληκτρολόγιο και τη γραμμή πλοήγησης."
    "Συντόμευση προσβασιμότητας" "Ενεργό" "Απενεργοποίηση" - "Όταν είναι ενεργοποιημένη αυτή η λειτουργία, μπορείτε να ενεργοποιήσετε γρήγορα τις λειτουργίες προσβασιμότητας με δύο βήματα:"\n\n"Βήμα 1: πατήστε παρατεταμένα το κουμπί ενεργοποίησης έως ότου ακούσετε έναν ήχο ή νιώσετε μια δόνηση."\n\n"Βήμα 2: αγγίξτε παρατεταμένα με δύο δάχτυλα έως ότου ακούσετε την ηχητική επιβεβαίωση."\n\n"Εάν η συσκευή διαθέτει πολλούς χρήστες, η χρήση αυτής της συντόμευσης στην οθόνη κλειδώματος ενεργοποιεί προσωρινά την προσβασιμότητα έως ότου ξεκλειδωθεί η συσκευή." + "Όταν είναι ενεργοποιημένη αυτή η λειτουργία, μπορείτε να ενεργοποιήσετε γρήγορα τις λειτουργίες προσβασιμότητας με δύο βήματα:\n\nΒήμα 1: πατήστε παρατεταμένα το κουμπί ενεργοποίησης έως ότου ακούσετε έναν ήχο ή νιώσετε μια δόνηση.\n\nΒήμα 2: αγγίξτε παρατεταμένα με δύο δάχτυλα έως ότου ακούσετε την ηχητική επιβεβαίωση.\n\nΕάν η συσκευή διαθέτει πολλούς χρήστες, η χρήση αυτής της συντόμευσης στην οθόνη κλειδώματος ενεργοποιεί προσωρινά την προσβασιμότητα έως ότου ξεκλειδωθεί η συσκευή." "Μεγάλο κείμενο" "Μεγέθυνση οθόνης" "Αυτόματη ενημέρωση μεγέθυνσης οθόν." @@ -1366,6 +1372,16 @@ "Το TalkBack παρέχει σχόλια σε μορφή ομιλίας για να διευκολύνει χρήστες με προβλήματα όρασης. Θέλετε να το εγκαταστήσετε δωρεάν από το Android Market;" "Δεν υπάρχει περιγραφή." "Ρυθμίσεις" + "Εκτύπωση" + "Ρυθμίσεις εκτύπωσης" + "Υπηρεσίες" + "Χρήση υπηρεσίας %1$s;" + "Η υπηρεσία %1$s μπορεί να λάβει τα έγγραφα που εκτυπώνετε. Τα έγγραφα αυτού του είδους ενδέχεται να περιέχουν ευαίσθητα δεδομένα." + "Δεν έχουν εγκατασταθεί υπηρεσίες" + "Ρυθμίσεις" + "Προσθήκη εκτυπωτών" + "Ενεργό" + "Ανενεργό" "Μπαταρία" "Τι χρησιμοποιούσε την μπαταρία" "Μη διαθέσιμα δεδ. χρήσ. μπατ." @@ -1405,8 +1421,10 @@ "Το Wi-Fi είναι ενεργό" "Tablet" "Τηλέφωνο" - "Τα δεδομένα εστάλησαν" - "Τα δεδομένα ελήφθησαν" + "Αποστολή δεδομ. κιν. τηλεφωνίας" + "Λήψη δεδομ. κινητής τηλεφωνίας" + "Αποστολή δεδομένων Wi‑Fi" + "Λήψη δεδομένων Wi‑Fi" "Ήχος" "Βίντεο" "Η ώρα είναι ενεργοποιημένη" @@ -1460,6 +1478,7 @@ "Τόνος" "Επηρεάζει τον τόνο του προφορικού κειμένου" "Γλώσσα" + "Δεν έχει επιλεγεί γλώσσα" "Ορίζει τη φωνή που σχετίζεται με τη γλώσσα για το κείμενο ομιλίας" "Ακούστε ένα παράδειγμα" "Αναπαραγωγή μιας σύντομης αναπαράστασης σύνθεσης λόγου" @@ -1594,7 +1613,7 @@ "Το EAP δεν υποστηρίζεται." "Δεν είναι δυνατή η διαμόρφωση σύνδεσης EAP Wi-Fi κατά τη διάρκεια της εγκατάστασης. Μετά την εγκατάσταση, μπορείτε να τη διαμορφώσετε από το στοιχείο Ρυθμίσεις > Ασύρματο και δίκτυα." "Η σύνδεση μπορεί να διαρκέσει αρκετά λεπτά..." - "Αγγίξτε το στοιχείο ""Επόμενο"" για να συνεχίσετε την εγκατάσταση."\n\n"Αγγίξτε το στοιχείο ""Πίσω""για να συνδεθείτε σε διαφορετικό δίκτυο Wi-Fi." + "Αγγίξτε το στοιχείο ""Επόμενο"" για να συνεχίσετε την εγκατάσταση.\n\nΑγγίξτε το στοιχείο ""Πίσω""για να συνδεθείτε σε διαφορετικό δίκτυο Wi-Fi." "Ενεργοποιημένος συγχρονισμός" "Συγχρονισμός είναι απενεργοποιημένος" "Σφάλμα συγχρονισμού." @@ -1622,7 +1641,7 @@ "Gmail" "Ημερολόγιο" "Επαφές" - "Καλώς ορίσατε στο Google Sync!"" "\n"Πρόκειται για μια προσέγγιση της Google στον συγχρονισμό δεδομένων, η οποία επιτρέπει την πρόσβαση στις επαφές, στις συναντήσεις σας και σε πολλά άλλα, όπου και αν βρίσκεστε." + "Καλώς ορίσατε στο Google Sync!"" \nΠρόκειται για μια προσέγγιση της Google στον συγχρονισμό δεδομένων, η οποία επιτρέπει την πρόσβαση στις επαφές, στις συναντήσεις σας και σε πολλά άλλα, όπου και αν βρίσκεστε." "Ρυθμίσεις συγχρονισμού εφαρμογής" "Δεδομένα και συγχρονισμός" "Αλλαγή κωδικού πρόσβασης" @@ -1676,8 +1695,7 @@ "Προβολές Flash εντός παραθύρων όταν γίνεται σχεδιασμός με το GPU" "Εμφ. ενημ. επιπ. υλικού" "Επισήμ. επιπέδων υλικού με πράσινο κατά την ενημ." - "Εμφάνιση μεγέθους υπερανάληψης σε GPU" - "Από το καλύτερο στο χειρότερο: μπλε, πράσινο, απαλό κόκκινο, κόκκινο" + "Κατάρ.σφαλμ.υπέρβ.GPU" "Απενεργ. επικαλύψεων HW" "Να γίνεται πάντα χρήση του GPU για σύνθεση οθόνης" "Ενεργοποίηση ιχνών OpenGL" @@ -1738,11 +1756,11 @@ "Απενεργ. δεδ. παρασκ. σε δίκτυα κινητής. Θα χρησιμ. άλλα δίκτυα." "Ορίστε ένα όριο δεδ. κιν. τηλ. για να περιορ. τα δεδ. παρασκ." "Περιορ.δεδομ.παρασκην.;" - "Αυτή η λειτουργία μπορεί να κάνει μια εφαρμογή που βασίζεται στα δεδομένα παρασκηνίου να πάψει να λειτουργεί σωστά όταν διατίθενται μόνο δίκτυα κινητής τηλεφωνίας ."\n\n"Μπορείτε να βρείτε περισσότερα κατάλληλα στοιχεία ελέγχου χρήσης δεδομένων στις ρυθμίσεις που διατίθενται στην εφαρμογή." + "Αυτή η λειτουργία μπορεί να κάνει μια εφαρμογή που βασίζεται στα δεδομένα παρασκηνίου να πάψει να λειτουργεί σωστά όταν διατίθενται μόνο δίκτυα κινητής τηλεφωνίας .\n\nΜπορείτε να βρείτε περισσότερα κατάλληλα στοιχεία ελέγχου χρήσης δεδομένων στις ρυθμίσεις που διατίθενται στην εφαρμογή." "Ο περιορισμός των δεδομένων παρασκηνίου είναι δυνατός μόνο όταν έχετε ορίσει ένα όριο δεδομένων κινητής τηλεφωνίας." "Ενεργοπ. αυτόμ. συγχρ. δεδομ.;" - "Θα γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στους λογαριασμούς σας στον ιστό στο tablet σας."\n\n"Σε ορισμένους λογαριασμούς ενδέχεται να γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στο tablet σας στον ιστό. Ένας Λογαριασμός Google λειτουργεί με αυτόν τον τρόπο."\n\n"Για να επιλέξετε το είδος των πληροφοριών που συγχρονίζονται σε κάθε λογαριασμό, μεταβείτε στην περιοχή Ρυθμίσεις > Λογαριασμοί." - "Θα γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στους λογαριασμούς σας στον ιστό στο τηλέφωνό σας."\n\n"Σε ορισμένους λογαριασμούς ενδέχεται να γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στο τηλέφωνό σας στον ιστό. Ένας Λογαριασμός Google λειτουργεί με αυτόν τον τρόπο."\n\n"Για να επιλέξετε το είδος των πληροφοριών που συγχρονίζονται σε κάθε λογαριασμό, μεταβείτε στην περιοχή Ρυθμίσεις > Λογαριασμοί." + "Θα γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στους λογαριασμούς σας στον ιστό στο tablet σας.\n\nΣε ορισμένους λογαριασμούς ενδέχεται να γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στο tablet σας στον ιστό. Ένας Λογαριασμός Google λειτουργεί με αυτόν τον τρόπο.\n\nΓια να επιλέξετε το είδος των πληροφοριών που συγχρονίζονται σε κάθε λογαριασμό, μεταβείτε στην περιοχή Ρυθμίσεις > Λογαριασμοί." + "Θα γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στους λογαριασμούς σας στον ιστό στο τηλέφωνό σας.\n\nΣε ορισμένους λογαριασμούς ενδέχεται να γίνεται αυτόματη αντιγραφή τυχόν αλλαγών που πραγματοποιείτε στο τηλέφωνό σας στον ιστό. Ένας Λογαριασμός Google λειτουργεί με αυτόν τον τρόπο.\n\nΓια να επιλέξετε το είδος των πληροφοριών που συγχρονίζονται σε κάθε λογαριασμό, μεταβείτε στην περιοχή Ρυθμίσεις > Λογαριασμοί." "Απενεργ. αυτόμ. συγχρ. δεδομ.;" "Με αυτόν τον τρόπο θα εξοικονομήσετε δεδομένα και χρήση μπαταρίας, αλλά θα πρέπει να συγχρονίσετε κάθε λογαριασμό με μη αυτόματο τρόπο για να συλλέξετε πρόσφατες πληροφορίες. Δεν θα λαμβάνετε ειδοποιήσεις κατά τη διάρκεια των ενημερώσεων." "Ημερομηνία επαναφοράς κύκλου χρήσης" @@ -1751,13 +1769,13 @@ "Ορισμός προειδοποίησης χρήσης δεδομένων" "Ορισμός ορίου χρήσης δεδομένων" "Περιορισμός χρήσης δεδομένων" - "Η σύνδεση των δεδομένων του κινητού τηλεφώνου σας θα απενεργοποιηθεί μόλις συμπληρωθεί το καθορισμένο όριο."\n\n"Επειδή η χρήση δεδομένων υπολογίζεται από το tablet σας και ενδέχεται η εταιρεία κινητής τηλεφωνίας να την υπολογίζει με διαφορετικό τρόπο, καλό θα ήταν να χρησιμοποιήσετε ένα συντηρητικό όριο." - "Η σύνδεση των δεδομένων του κινητού τηλεφώνου σας θα απενεργοποιηθεί μόλις συμπληρωθεί το καθορισμένο όριο."\n\n"Επειδή η χρήση δεδομένων υπολογίζεται από το τηλέφωνό σας και ενδέχεται η εταιρεία κινητής τηλεφωνίας να την υπολογίζει με διαφορετικό τρόπο, σκεφτείτε το ενδεχόμενο να χρησιμοποιήσετε ένα συντηρητικό όριο." + "Η σύνδεση των δεδομένων του κινητού τηλεφώνου σας θα απενεργοποιηθεί μόλις συμπληρωθεί το καθορισμένο όριο.\n\nΕπειδή η χρήση δεδομένων υπολογίζεται από το tablet σας και ενδέχεται η εταιρεία κινητής τηλεφωνίας να την υπολογίζει με διαφορετικό τρόπο, καλό θα ήταν να χρησιμοποιήσετε ένα συντηρητικό όριο." + "Η σύνδεση των δεδομένων του κινητού τηλεφώνου σας θα απενεργοποιηθεί μόλις συμπληρωθεί το καθορισμένο όριο.\n\nΕπειδή η χρήση δεδομένων υπολογίζεται από το τηλέφωνό σας και ενδέχεται η εταιρεία κινητής τηλεφωνίας να την υπολογίζει με διαφορετικό τρόπο, σκεφτείτε το ενδεχόμενο να χρησιμοποιήσετε ένα συντηρητικό όριο." "Περιορ.δεδομ.παρασκην.;" "Αν περιορίσετε τα δεδομένα παρασκηνίου κινητής τηλεφωνίας, ορισμένες εφαρμογές και υπηρεσίες δεν θα λειτουργούν εκτός και αν έχετε συνδεθεί σε δίκτυο Wi-Fi." - "Αν περιορίσετε τη χρήση των δεδομένων κινητής τηλεφωνίας στο παρασκήνιο, ορισμένες εφαρμογές και υπηρεσίες δεν θα λειτουργούν, εκτός εάν είστε συνδεδεμένοι σε δίκτυο Wi-Fi."\n\n"Αυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο tablet." - "Αν περιορίσετε τη χρήση των δεδομένων κινητής τηλεφωνίας στο παρασκήνιο, ορισμένες εφαρμογές και υπηρεσίες δεν θα λειτουργούν, εκτός εάν είστε συνδεδεμένοι σε δίκτυο Wi-Fi."\n\n"Αυτή η ρύθμιση επηρεάζει όλους τους χρήστες που χρησιμοποιούν το συγκεκριμένο τηλέφωνο." - " ^1 "" "" ^2 "" "\n" "" προειδοποίηση " + "Αν περιορίσετε τη χρήση των δεδομένων κινητής τηλεφωνίας στο παρασκήνιο, ορισμένες εφαρμογές και υπηρεσίες δεν θα λειτουργούν, εκτός εάν είστε συνδεδεμένοι σε δίκτυο Wi-Fi.\n\nΑυτή η ρύθμιση επηρεάζει όλους τους χρήστες στο συγκεκριμένο tablet." + "Αν περιορίσετε τη χρήση των δεδομένων κινητής τηλεφωνίας στο παρασκήνιο, ορισμένες εφαρμογές και υπηρεσίες δεν θα λειτουργούν, εκτός εάν είστε συνδεδεμένοι σε δίκτυο Wi-Fi.\n\nΑυτή η ρύθμιση επηρεάζει όλους τους χρήστες που χρησιμοποιούν το συγκεκριμένο τηλέφωνο." + " ^1 "" "" ^2 "" \n "" προειδοποίηση " "^1""^2"\n"όριο" "Εφαρμογές που καταργήθηκαν" "Εφαρμογές και χρήστες που έχουν καταργηθεί" @@ -1843,8 +1861,8 @@ "Χρήστης" "Προφίλ περιορ. πρόσβασης" "Προσθήκη νέου χρήστη" - "Μπορείτε να μοιραστείτε αυτή τη συσκευή με άλλους χρήστες δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης διαθέτει τον δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, την ταπετσαρία και ούτω καθεξής. Οι χρήστες μπορούν επίσης να προσαρμόσουν τις ρυθμίσεις tablet όπως το Wi-Fi που επηρεάζουν τους πάντες."\n\n"Αφού δημιουργήσετε έναν νέο χρήστη, αυτό το άτομο θα πρέπει να ολοκληρώσει τη διαδικασία ρύθμισης."\n\n"Οποιοδήποτε χρήστης μπορεί να αποδεχτεί ενημερωμένα δικαιώματα εφαρμογών εκ μέρους άλλων χρηστών." - "Αφού δημιουργήσετε έναν νέο χρήστη, αυτό το άτομο θα πρέπει να ολοκληρώσει τη διαδικασία ρύθμισης."\n\n"Οποιοδήποτε χρήστης μπορεί να αποδεχτεί ενημερωμένα δικαιώματα εφαρμογών εκ μέρους των άλλων χρηστών." + "Μπορείτε να μοιραστείτε αυτή τη συσκευή με άλλους χρήστες δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης διαθέτει τον δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, την ταπετσαρία και ούτω καθεξής. Οι χρήστες μπορούν επίσης να προσαρμόσουν τις ρυθμίσεις tablet όπως το Wi-Fi που επηρεάζουν τους πάντες.\n\nΑφού δημιουργήσετε έναν νέο χρήστη, αυτό το άτομο θα πρέπει να ολοκληρώσει τη διαδικασία ρύθμισης.\n\nΟποιοδήποτε χρήστης μπορεί να αποδεχτεί ενημερωμένα δικαιώματα εφαρμογών εκ μέρους άλλων χρηστών." + "Αφού δημιουργήσετε έναν νέο χρήστη, αυτό το άτομο θα πρέπει να ολοκληρώσει τη διαδικασία ρύθμισης.\n\nΟποιοδήποτε χρήστης μπορεί να αποδεχτεί ενημερωμένα δικαιώματα εφαρμογών εκ μέρους των άλλων χρηστών." "Να γίνει ρύθμιση χρήστη τώρα;" "Βεβαιωθείτε ότι ο χρήστης έχει τη δυνατότητα να ρυθμίσει το χώρο του στο tablet" "Να γίνει ρύθμιση προφίλ τώρα;" @@ -1875,6 +1893,9 @@ "Αυτή η χρήση επηρεάζει όλους τους χρήστες στο συγκεκριμένο τηλέφωνο." "Αλλαγή γλώσσας" "Αλλαγή μεγέθους γραμματοσειράς" + "Περιορισμοί" + "Κατάργηση περιορισμών" + "Αλλαγή κωδικού PIN" "Εμφάν. ειδοποιήσεων" "Βοήθεια" "Λογαριασμός για περιεχόμενο" diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml index 6576fa7139a..cff546a4f24 100644 --- a/res/values-en-rGB/arrays.xml +++ b/res/values-en-rGB/arrays.xml @@ -233,7 +233,8 @@ "Location" "Personal" "Messaging" - "Device" + "Media" + "Device"
    "coarse location" @@ -246,7 +247,7 @@ "modify call log" "read calendar" "modify calendar" - "wi-fi scan" + "Wi-Fi scan" "notification" "cell scan" "call phone" @@ -267,6 +268,17 @@ "play audio" "read clipboard" "modify clipboard" + "media buttons" + "audio focus" + "master volume" + "voice volume" + "ring volume" + "media volume" + "alarm volume" + "notification volume" + "Bluetooth volume" + "keep awake" + "monitor location" "Location" @@ -300,12 +312,33 @@ "Play audio" "Read clipboard" "Modify clipboard" + "Media buttons" + "Audio focus" + "Master volume" + "Voice volume" + "Ring volume" + "Media volume" + "Alarm volume" + "Notification volume" + "Bluetooth volume" + "Keep awake" + "Location" "Short" "Medium" "Long" + + "Dalvik" + "ART" + "ART (debug)" + + + "Use Dalvik" + "Use ART" + "Use ART debug build" + "Never check" "Check for DRM content only" @@ -367,6 +400,11 @@ "On screen as lines" "In adb shell dumpsys gfxinfo" + + "Off" + "Show overdraw areas" + "Show overdraw counter" + "Standard limit" "No background processes" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index ff599859d17..b9da9f91af9 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -275,8 +275,8 @@ "You have lost data connectivity because you left your home network with data roaming turned off." "Turn it on" "When you allow data roaming, you may incur significant roaming charges!" - "When you allow data roaming, you may incur significant roaming charges!"\n\n"This setting affects all users on this tablet." - "When you allow data roaming, you may incur significant roaming charges!"\n\n"This setting affects all users on this phone." + "When you allow data roaming, you may incur significant roaming charges!\n\nThis setting affects all users on this tablet." + "When you allow data roaming, you may incur significant roaming charges!\n\nThis setting affects all users on this phone." "Allow data roaming?" "Operator selection" "Choose a network operator" @@ -322,8 +322,8 @@ "Require a numerical PIN or password to decrypt your tablet each time that you turn it on" "Require a numerical PIN or password to decrypt your phone each time that you turn it on" "Encrypted" - "You can encrypt your accounts, settings, downloaded apps and their data, media and other files. Once you encrypt your tablet, you need to type a numeric PIN or password to decrypt it each time you switch it on. You can only decrypt your tablet by performing a factory data reset, erasing all your data."\n\n"Encryption takes an hour or more. You must start with a charged battery and keep your tablet plugged in until encryption is complete. If you interrupt the encryption process, you will lose some or all of your data." - "You can encrypt your accounts, settings, downloaded apps and their data, media and other files. Once you encrypt your phone, you need to type a numeric PIN or password to decrypt it each time you switch it on. You can\'t decrypt your phone except by performing a factory data reset, erasing all your data."\n\n"Encryption takes an hour or more. You must start with a charged battery and keep your phone plugged in until encryption is complete. If you interrupt the encryption process, you will lose some or all of your data." + "You can encrypt your accounts, settings, downloaded apps and their data, media and other files. Once you encrypt your tablet, you need to type a numeric PIN or password to decrypt it each time you switch it on. You can only decrypt your tablet by performing a factory data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with a charged battery and keep your tablet plugged in until encryption is complete. If you interrupt the encryption process, you will lose some or all of your data." + "You can encrypt your accounts, settings, downloaded apps and their data, media and other files. Once you encrypt your phone, you need to type a numeric PIN or password to decrypt it each time you switch it on. You can\'t decrypt your phone except by performing a factory data reset, erasing all your data.\n\nEncryption takes an hour or more. You must start with a charged battery and keep your phone plugged in until encryption is complete. If you interrupt the encryption process, you will lose some or all of your data." "Encrypt tablet" "Encrypt phone" "Please charge your battery and try again." @@ -339,8 +339,8 @@ "Try again in ^1 seconds." "Type your password" "Encryption unsuccessful" - "Encryption was interrupted and can\'t be completed. As a result, the data on your tablet is no longer accessible. "\n\n" To resume using your tablet, you need to perform a factory reset. When you set up your tablet after the reset, you\'ll have an opportunity to restore any data that was backed up to your Google Account." - "Encryption was interrupted and can\'t be completed. As a result, the data on your phone is no longer accessible. "\n\n"To resume using your phone, you need to perform a factory reset. When you set up your phone after the reset, you\'ll have an opportunity to restore any data that was backed up to your Google Account." + "Encryption was interrupted and can\'t be completed. As a result, the data on your tablet is no longer accessible. \n\n To resume using your tablet, you need to perform a factory reset. When you set up your tablet after the reset, you\'ll have an opportunity to restore any data that was backed up to your Google Account." + "Encryption was interrupted and can\'t be completed. As a result, the data on your phone is no longer accessible. \n\nTo resume using your phone, you need to perform a factory reset. When you set up your phone after the reset, you\'ll have an opportunity to restore any data that was backed up to your Google Account." "Switch input method" "Choose screen lock" "Choose backup lock" @@ -514,6 +514,7 @@ "Connecting" "Connected" "Available" + "In use" "Display settings" "Disconnect?" "This will end your connection with:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Off" "Unavailable because NFC is turned off" "Android Beam" - "When this feature is turned on, you can beam app content to another NFC-capable device by holding the devices close together. For example, you can beam Browser pages, YouTube videos, People contacts and more."\n\n"Just bring the devices together (typically back to back) and then touch your screen. The app determines what gets beamed." + "When this feature is turned on, you can beam app content to another NFC-capable device by holding the devices close together. For example, you can beam Browser pages, YouTube videos, People contacts and more.\n\nJust bring the devices together (typically back to back) and then touch your screen. The app determines what gets beamed." "Network service discovery" "Allow apps on other devices to discover apps on this device" "Wi‑Fi" @@ -620,7 +621,7 @@ "Secured with %1$s" ", secured with %1$s" "None" - "To improve location accuracy and for other purposes, %1$s wants to turn on network scanning, even when Wi-Fi is off."\n\n"Allow this for all apps that want to scan?" + "To improve location accuracy and for other purposes, %1$s wants to turn on network scanning, even when Wi-Fi is off.\n\nAllow this for all apps that want to scan?" "Allow" "Deny" "Connect" @@ -632,8 +633,8 @@ "Cancel" "Skip anyway" "Don\'t skip" - "WARNING: You may incur extra carrier data charges."\n\n"Tablet setup can require significant network activity." - "WARNING: You may incur extra carrier data charges."\n\n"Phone setup can require significant network activity." + "WARNING: You may incur extra carrier data charges.\n\nTablet setup can require significant network activity." + "WARNING: You may incur extra carrier data charges.\n\nPhone setup can require significant network activity." "WARNING: Until you have an internet connection, the tablet won\'t be able to verify that your software is up to date." "WARNING: Until you have an internet connection, the phone won\'t be able to verify that your software is up to date." "The tablet was unable to connect to this Wi‑Fi network." @@ -773,9 +774,9 @@ "SIM PIN" "Incorrect PIN" "PINs don\'t match" - "Can\'t change PIN."\n"Possibly incorrect PIN." + "Can\'t change PIN.\nPossibly incorrect PIN." "SIM PIN changed successfully" - "Can\'t change SIM card lock state."\n"Possibly incorrect PIN." + "Can\'t change SIM card lock state.\nPossibly incorrect PIN." "OK" "Cancel" "Tablet status" @@ -918,9 +919,9 @@ "Factory data reset" "Erases all data on tablet" "Erases all data on phone" - "This will erase all data from your tablet\'s ""internal storage"", including:"\n\n
  • "Your Google account"
  • \n
  • "System and app data and settings"
  • \n
  • "Downloaded apps"
  • - "This will erase all data from your phone\'s ""internal storage"", including:"\n\n
  • "Your Google account"
  • \n
  • "System and app data and settings"
  • \n
  • "Downloaded apps"
  • - \n\n"You are currently signed in to the following accounts:"\n + "This will erase all data from your tablet\'s ""internal storage"", including:\n\n"
  • "Your Google account"
  • \n
  • "System and app data and settings"
  • \n
  • "Downloaded apps"
  • + "This will erase all data from your phone\'s ""internal storage"", including:\n\n"
  • "Your Google account"
  • \n
  • "System and app data and settings"
  • \n
  • "Downloaded apps"
  • + \n\n"You are currently signed in to the following accounts:\n"
  • "Music"
  • \n
  • "Photos"
  • \n
  • "Other user data"
  • \n\n"To clear music, pictures and other user data, the ""USB storage"" needs to be erased." \n\n"To clear music, pictures and other user data, the ""SD card"" needs to be erased." @@ -1105,7 +1106,7 @@ "Show cached processes" "Reset app preferences" "Reset app preferences?" - "This will reset all preferences for:"\n\n" "
  • "Disabled apps"
  • \n" "
  • "Disabled app notifications"
  • \n" "
  • "Default applications for actions"
  • \n" "
  • "Background data restrictions for apps"
  • \n\n" You will not lose any app data."
    + "This will reset all preferences for:\n\n "
  • "Disabled apps"
  • \n" "
  • "Disabled app notifications"
  • \n" "
  • "Default applications for actions"
  • \n" "
  • "Background data restrictions for apps"
  • \n\n" You will not lose any app data."
    "Reset apps" "Manage space" "Filter" @@ -1240,9 +1241,7 @@ "To switch, press Control-Spacebar" "Default" "Keyboard layouts" - "User dictionary" - "Personal dictionary" - "Personal dictionaries" + "Personal dictionary" "Add" "Add to dictionary" @@ -1303,6 +1302,11 @@ "Include option in power menu for taking a bug report" "Stay awake" "Screen will never sleep while charging" + "Enable Bluetooth HCI snoop log" + "Capture all Bluetooth HCI packets in a file" + "Select runtime" + "Select runtime" + "Reboot to change runtime from %1$s to %2$s?" "Allow mock locations" "Allow mock locations" "Allow USB debugging?" @@ -1315,11 +1319,13 @@ "Protect USB storage" "Apps must request permission to read USB storage" "Protect USB storage?" - "When USB storage is protected, apps must request permission to read data from external storage."\n\n"Some apps may not work until updated by their developers." + "When USB storage is protected, apps must request permission to read data from external storage.\n\nSome apps may not work until updated by their developers." "Protect SD card" "Apps must request permission to read SD card" "Protect SD card?" - "When SD card is protected, apps must request permission to read data from external storage."\n\n"Some apps may not work until updated by their developers." + "When SD card is protected, apps must request permission to read data from external storage.\n\nSome apps may not work until updated by their developers." + "Local terminal" + "Enable terminal app that offers local shell access" "Choose gadget" "Choose widget" "Create widget and allow access?" @@ -1340,11 +1346,11 @@ "Services" "System" "Magnification gestures" - "When this feature is turned on, you can zoom in and out by triple-tapping the screen."\n\n"While zoomed in, you can:"\n
    • "Pan: Drag two or more fingers across the screen."
    • \n
    • "Adjust zoom level: Pinch two or more fingers together or spread them apart."
    \n\n"You can also temporarily magnify what\'s under your finger by triple-tapping and holding. In this magnified state, you can drag your finger to explore different parts of the screen. Lift your finger to return to your previous state."\n\n"Note: Triple-tap for magnification works everywhere except the keyboard and navigation bar."
    + "When this feature is turned on, you can zoom in and out by triple-tapping the screen.\n\nWhile zoomed in, you can:\n"
    • "Pan: Drag two or more fingers across the screen."
    • \n
    • "Adjust zoom level: Pinch two or more fingers together or spread them apart."
    \n\n"You can also temporarily magnify what\'s under your finger by triple-tapping and holding. In this magnified state, you can drag your finger to explore different parts of the screen. Lift your finger to return to your previous state.\n\nNote: Triple-tap for magnification works everywhere except the keyboard and navigation bar."
    "Accessibility shortcut" "On" "Off" - "When this feature is turned on, you can quickly enable accessibility features in two steps:"\n\n"Step 1: Press and hold the power button until you hear a sound or feel a vibration."\n\n"Step 2: Touch and hold two fingers until you hear audio confirmation."\n\n"If the device has multiple users, using this shortcut on the lock screen temporarily enables accessibility until the device is unlocked." + "When this feature is turned on, you can quickly enable accessibility features in two steps:\n\nStep 1: Press and hold the power button until you hear a sound or feel a vibration.\n\nStep 2: Touch and hold two fingers until you hear audio confirmation.\n\nIf the device has multiple users, using this shortcut on the lock screen temporarily enables accessibility until the device is unlocked." "Large text" "Screen magnification" "Auto update screen magnification" @@ -1366,6 +1372,16 @@ "TalkBack provides spoken feedback to help blind and low-vision users. Do you want to install it for free from Android Market?" "No description provided." "Settings" + "Printing" + "Printing settings" + "Services" + "Use %1$s?" + "%1$s can receive documents you print. Such documents may contain sensitive data." + "No services installed" + "Settings" + "Add printers" + "On" + "Off" "Battery" "What has been using the battery" "Battery usage data isn\'t available." @@ -1405,8 +1421,10 @@ "Wi‑Fi running" "Tablet" "Phone" - "Data sent" - "Data received" + "Mobile data sent" + "Mobile data received" + "Wi‑Fi data sent" + "Wi‑Fi data received" "Audio" "Video" "Time on" @@ -1460,6 +1478,7 @@ "Pitch" "Affects the tone of the spoken text" "Language" + "Language not selected" "Sets the language-specific voice for the spoken text" "Listen to an example" "Play a short demonstration of speech synthesis" @@ -1594,7 +1613,7 @@ "EAP isn\'t supported." "You can\'t configure an EAP Wi‑Fi connection during setup. After setup, you can do that in Settings > Wireless & networks." "Connecting can take a few minutes..." - "Touch ""Next"" to continue with setup."\n\n"Touch ""Back"" to connect to a different Wi‑Fi network." + "Touch ""Next"" to continue with setup.\n\nTouch ""Back"" to connect to a different Wi‑Fi network." "Sync enabled" "Sync disabled" "Sync error..." @@ -1622,7 +1641,7 @@ "Gmail" "Calendar" "Contacts" - "Welcome to Google sync!"" "\n"A Google approach to syncing data to allow access to your contacts, appointments and more from wherever you are." + "Welcome to Google sync!"" \nA Google approach to syncing data to allow access to your contacts, appointments and more from wherever you are." "App sync settings" "Data & synchronisation" "Change password" @@ -1676,8 +1695,7 @@ "Flash views inside windows when drawn with the GPU" "Show hardware layers updates" "Flash hardware layers green when they update" - "Show GPU overdraw" - "From best to worst: blue, green, light red, red" + "Debug GPU overdraw" "Disable HW overlays" "Always use GPU for screen compositing" "Enable OpenGL traces" @@ -1738,11 +1756,11 @@ "Disable background data on mobile networks. Non-mobile networks will be used if available." "To restrict background data for this app, first set a mobile data limit." "Restrict background data?" - "This feature may cause an app that depends on background data to stop working when only mobile networks are available."\n\n"You can find more appropriate data usage controls in the settings available within the app." + "This feature may cause an app that depends on background data to stop working when only mobile networks are available.\n\nYou can find more appropriate data usage controls in the settings available within the app." "Restricting background data is possible only when you\'ve set a mobile data limit." "Turn auto-sync data on?" - "Any changes you make to your accounts on the web will be automatically copied to your tablet."\n\n"Some accounts may also automatically copy any changes you make on the tablet to the web. A Google Account works this way."\n\n"To choose which kinds of information to sync within each account, go to Settings > Accounts." - "Any changes you make to your accounts on the web will be automatically copied to your phone."\n\n"Some accounts may also automatically copy any changes you make on the phone to the web. A Google Account works this way."\n\n"To choose which kinds of information to sync within each account, go to Settings > Accounts." + "Any changes you make to your accounts on the web will be automatically copied to your tablet.\n\nSome accounts may also automatically copy any changes you make on the tablet to the web. A Google Account works this way.\n\nTo choose which kinds of information to sync within each account, go to Settings > Accounts." + "Any changes you make to your accounts on the web will be automatically copied to your phone.\n\nSome accounts may also automatically copy any changes you make on the phone to the web. A Google Account works this way.\n\nTo choose which kinds of information to sync within each account, go to Settings > Accounts." "Turn auto-sync data off?" "This will conserve data and battery usage, but you\'ll need to sync each account manually to collect recent information. And you won\'t receive notifications when updates occur." "Usage cycle reset date" @@ -1751,12 +1769,12 @@ "Set data usage warning" "Set data usage limit" "Limiting data usage" - "Your mobile data connection will be disabled when the specified limit is reached."\n\n"Since data usage is measured by your tablet, and your carrier may account for usage differently, consider using a conservative limit." - "Your mobile data connection will be disabled when the specified limit is reached."\n\n"Since data usage is measured by your phone, and your carrier may account for usage differently, consider using a conservative limit." + "Your mobile data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your tablet, and your carrier may account for usage differently, consider using a conservative limit." + "Your mobile data connection will be disabled when the specified limit is reached.\n\nSince data usage is measured by your phone, and your carrier may account for usage differently, consider using a conservative limit." "Restrict background data?" "If you restrict background mobile data, some apps and services won\'t work unless you\'re connected to a Wi‑Fi network." - "If you restrict background mobile data, some apps and services won\'t work unless you\'re connected to a Wi‑Fi network."\n\n"This setting affects all users on this tablet." - "If you restrict background mobile data, some apps and services won\'t work unless you\'re connected to a Wi‑Fi network."\n\n"This setting affects all users on this phone." + "If you restrict background mobile data, some apps and services won\'t work unless you\'re connected to a Wi‑Fi network.\n\nThis setting affects all users on this tablet." + "If you restrict background mobile data, some apps and services won\'t work unless you\'re connected to a Wi‑Fi network.\n\nThis setting affects all users on this phone." "^1"" ""^2"\n"warning" "^1"" ""^2"\n"limit" "Removed apps" @@ -1843,8 +1861,8 @@ "User" "Restricted profile" "Add new user" - "You can share this device with other people by creating additional users. Each user has their own space, which they can customise with their own apps, wallpaper and so on. Users can also adjust tablet settings like Wi‑Fi that affect everyone."\n\n"After you create a new user, that person needs to go through a set-up process."\n\n"Any user can accept updated app permissions on behalf of all other users." - "After you create a new user, that person needs to go through a setup process."\n\n"Any user can accept updated app permissions on behalf of all other users." + "You can share this device with other people by creating additional users. Each user has their own space, which they can customise with their own apps, wallpaper and so on. Users can also adjust tablet settings like Wi‑Fi that affect everyone.\n\nAfter you create a new user, that person needs to go through a set-up process.\n\nAny user can accept updated app permissions on behalf of all other users." + "After you create a new user, that person needs to go through a setup process.\n\nAny user can accept updated app permissions on behalf of all other users." "Set up user now?" "Make sure the person is available to take the tablet and set up their space" "Set up profile now?" @@ -1875,6 +1893,9 @@ "This setting affects all users on this phone." "Change language" "Change font size" + "Restrictions:" + "Remove restrictions" + "Change PIN" "Show notifications" "Help" "Account for content" diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml index ce76840c532..420ddaff008 100644 --- a/res/values-es-rUS/arrays.xml +++ b/res/values-es-rUS/arrays.xml @@ -72,7 +72,7 @@ "Rápido" "A mayor velocidad" "A velocidad muy alta" - "Rápido" + "Veloz" "Muy rápido" "A velocidad máxima"
    @@ -233,7 +233,8 @@ "Ubicación" "Personal" "Mensajería" - "Dispositivo" + "Medios" + "Dispositivo"
    "ubicación aproximada" @@ -267,6 +268,17 @@ "reproducir audio" "leer portapapeles" "modificar portapapeles" + "botones de medios" + "enfoque de audio" + "volumen principal" + "volumen de voz" + "volumen de tono" + "volumen de medios" + "volumen de alarma" + "volumen de notificación" + "volumen de bluetooth" + "mantener en funcionamiento" + "controlar ubicación" "Ubicación" @@ -300,12 +312,33 @@ "Reproducir audio" "Leer portapapeles" "Modificar portapapeles" + "Botones de medios" + "Enfoque de audio" + "Volumen principal" + "Volumen de voz" + "Volumen de tono" + "Volumen de medios" + "Volumen de alarma" + "Volumen de notificación" + "Volumen de Bluetooth" + "Mantener en funcionamiento" + "Ubicación" "Corto" "Medio" "Largo" + + "Dalvik" + "ART" + "ART (depuración)" + + + "Usar Dalvik" + "Usar ART" + "Usar compilación de depuración de ART" + "Nunca comprobar" "Comprobar contenido DRM solamente" @@ -367,9 +400,14 @@ "En pantalla como líneas" "En adb shell dumpsys gfxinfo" + + "Desactivado" + "Mostrar áreas superpuestas" + "Mostrar contador de superposiciones" + "Límite estándar" - "No hay procesos de fondo." + "Ningún proceso en 2do plano" "Máximo 1 proceso" "Máximo 2 procesos" "Máximo 3 procesos" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 15305e882c7..a31a045f7b8 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -275,8 +275,8 @@ "Has perdido la conectividad de los datos porque has dejado la red doméstica con roaming de datos desactivado." "Enciéndelo" "Al permitir el roaming de datos, puedes incurrir en gastos de roaming importantes." - "Al permitir el roaming de datos, los costos de roaming que deberás asumir pueden ser altos."\n\n"Esta configuración afecta a todos los usuarios de esta tablet." - "Al permitir el roaming de datos, los costos de roaming que deberás asumir pueden ser altos."\n\n"Esta configuración afecta a todos los usuarios de este dispositivo." + "Al permitir el roaming de datos, los costos de roaming que deberás asumir pueden ser altos.\n\nEsta configuración afecta a todos los usuarios de esta tablet." + "Al permitir el roaming de datos, los costos de roaming que deberás asumir pueden ser altos.\n\nEsta configuración afecta a todos los usuarios de este dispositivo." "¿Deseas permitir el roaming de datos?" "Selección de operador" "Elegir un operador de red" @@ -322,8 +322,8 @@ "Necesitas un PIN numérico o contraseña para descifrar tu tablet cada vez que la enciendes" "Se necesita un PIN numérico o contraseña para descifrar tu dispositivo cada vez que lo enciendes" "Encriptado" - "Puedes encriptar tus cuentas, tus parámetros de configuración, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Una vez que hayas encriptado la tablet, debes ingresar un PIN o una contraseña numérica para desencriptarla cada vez que la enciendas. No puedes desencriptar tu tablet a menos que restablezcas su configuración de fábrica y borres, así, todos tus datos."\n\n"El proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con la batería cargada y mantener la tablet conectada hasta que finalice. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." - "Puedes encriptar tus cuentas, tus parámetros de configuración, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Luego de encriptar tu dispositivo, tienes que escribir un PIN o contraseña numéricos cada vez que lo enciendes para desencriptarlo. No puedes desencriptar tu dispositivo a menos que restablezcas su configuración de fábrica y borres, así, todos tus datos."\n\n"El proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con la batería cargada y mantener el dispositivo conectado hasta que finalice. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." + "Puedes encriptar tus cuentas, tus parámetros de configuración, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Una vez que hayas encriptado la tablet, debes ingresar un PIN o una contraseña numérica para desencriptarla cada vez que la enciendas. No puedes desencriptar tu tablet a menos que restablezcas su configuración de fábrica y borres, así, todos tus datos.\n\nEl proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con la batería cargada y mantener la tablet conectada hasta que finalice. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." + "Puedes encriptar tus cuentas, tus parámetros de configuración, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Luego de encriptar tu dispositivo, tienes que escribir un PIN o contraseña numéricos cada vez que lo enciendes para desencriptarlo. No puedes desencriptar tu dispositivo a menos que restablezcas su configuración de fábrica y borres, así, todos tus datos.\n\nEl proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con la batería cargada y mantener el dispositivo conectado hasta que finalice. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." "Encriptar tablet" "Encriptar dispositivo" "Carga tu batería e inténtalo nuevamente." @@ -339,8 +339,8 @@ "Vuelve a intentarlo en ^1 segundos." "Escribe la contraseña" "Encriptación incorrecta" - "La encriptación se interrumpió y no se puede completar. Por esta razón, ya no es posible acceder a los datos de tu tablet. "\n\n" Para reanudar el uso de tu tablet, debes restablecer los datos de fábrica. Cuando configures tu tablet luego de restablecer los datos de fábrica, tendrás la posibilidad de restaurar los datos de los que tengas una copia de seguridad en tu cuenta de Google." - "La encriptación se interrumpió y no se puede completar. Por esta razón, ya no es posible acceder a los datos de tu dispositivo. "\n\n"Para reanudar el uso de tu dispositivo, debes restablecer los datos de fábrica. Cuando configures tu dispositivo luego de restablecer los datos de fábrica, tendrás la posibilidad de restaurar los datos de los que tengas una copia de seguridad en tu cuenta de Google." + "La encriptación se interrumpió y no se puede completar. Por esta razón, ya no es posible acceder a los datos de tu tablet. \n\n Para reanudar el uso de tu tablet, debes restablecer los datos de fábrica. Cuando configures tu tablet luego de restablecer los datos de fábrica, tendrás la posibilidad de restaurar los datos de los que tengas una copia de seguridad en tu cuenta de Google." + "La encriptación se interrumpió y no se puede completar. Por esta razón, ya no es posible acceder a los datos de tu dispositivo. \n\nPara reanudar el uso de tu dispositivo, debes restablecer los datos de fábrica. Cuando configures tu dispositivo luego de restablecer los datos de fábrica, tendrás la posibilidad de restaurar los datos de los que tengas una copia de seguridad en tu cuenta de Google." "Cambiar método de introducción" "Elegir bloqueo pant." "Bloqueo alternativo" @@ -514,6 +514,7 @@ "Conectando" "Conectada" "Disponible" + "En uso" "Configuración de visualización" "¿Desconectar?" "Finalizará tu conexión con<br><b>%1$s</b>." @@ -532,7 +533,7 @@ "Desactivada" "No disponible porque NFC está desactivada" "Android Beam" - "Cuando esta función está activada, puedes transmitir el contenido de las aplicaciones a otro dispositivo con la función NFC al juntar los dispositivos. Por ejemplo, puedes transmitir páginas del navegador, videos de YouTube, contactos y mucho más."\n\n"Solo tienes que unir los dispositivos (normalmente, por la parte trasera) y, a continuación, tocar la pantalla de tu dispositivo. La aplicación determina el contenido que se transmite." + "Cuando esta función está activada, puedes transmitir el contenido de las aplicaciones a otro dispositivo con la función NFC al juntar los dispositivos. Por ejemplo, puedes transmitir páginas del navegador, videos de YouTube, contactos y mucho más.\n\nSolo tienes que unir los dispositivos (normalmente, por la parte trasera) y, a continuación, tocar la pantalla de tu dispositivo. La aplicación determina el contenido que se transmite." "Detección del servicio de red" "Permitir a las aplicaciones de otros dispositivos ver las de este" "Wi-Fi" @@ -620,7 +621,7 @@ "Protegida con %1$s" ", protegida con %1$s" "Ninguna" - "Para mejorar la precisión de la ubicación y para otros fines, %1$s quiere activar la búsqueda de redes, incluso cuando la conexión Wi-Fi esté desactivada."\n\n"¿Quieres permitir esto para todas las aplicaciones que deseen buscar redes?" + "Para mejorar la precisión de la ubicación y para otros fines, %1$s quiere activar la búsqueda de redes, incluso cuando la conexión Wi-Fi esté desactivada.\n\n¿Quieres permitir esto para todas las aplicaciones que deseen buscar redes?" "Permitir" "Denegar" "Conectar" @@ -632,8 +633,8 @@ "Cancelar" "Omitir de todos modos" "No omitir" - "ADVERTENCIA: Es posible que tu proveedor te cobre cargos adicionales por el uso de datos."\n\n"La configuración de la tablet puede requerir una significativa actividad de la red." - "ADVERTENCIA: Es posible que tu proveedor te cobre cargos adicionales por el uso de datos."\n\n"La configuración del dispositivo puede requerir una significativa actividad de la red." + "ADVERTENCIA: Es posible que tu proveedor te cobre cargos adicionales por el uso de datos.\n\nLa configuración de la tablet puede requerir una significativa actividad de la red." + "ADVERTENCIA: Es posible que tu proveedor te cobre cargos adicionales por el uso de datos.\n\nLa configuración del dispositivo puede requerir una significativa actividad de la red." "ADVERTENCIA: Hasta que no te conectes a Internet, la tablet no podrá verificar si el software está actualizado." "ADVERTENCIA: Hasta que no te conectes a Internet, el dispositivo no podrá verificar si el software está actualizado." "La tablet no pudo conectarse a esta red Wi-Fi." @@ -773,9 +774,9 @@ "PIN de tarjeta SIM" "PIN incorrecto" "Los PIN no coinciden" - "No se puede cambiar el PIN."\n"PIN posiblemente incorrecto." + "No se puede cambiar el PIN.\nPIN posiblemente incorrecto." "El PIN de la tarjeta SIM se ha cambiado correctamente" - "No se puede cambiar el estado de bloqueo de la tarjeta SIM."\n"PIN posiblemente incorrecto." + "No se puede cambiar el estado de bloqueo de la tarjeta SIM.\nPIN posiblemente incorrecto." "Aceptar" "Cancelar" "Estado del tablet" @@ -918,9 +919,9 @@ "Restablecer valores de fábrica" "Borra todos los datos de la tablet" "Borra todos los datos del dispositivo" - "Esto borrará todos los datos del ""almacenamiento interno"" de tu tablet, por ejemplo:"\n\n
  • "tu cuenta de Google"
  • \n
  • "los datos y la configuración del sistema y de las aplicaciones"
  • \n
  • "las aplicaciones descargadas"
  • - "Se borrarán todos los datos del ""almacenamiento interno"" del dispositivo, por ejemplo:"\n\n
  • "tu cuenta de Google,"
  • \n
  • "datos de aplicaciones y ajustes del sistema,"
  • \n
  • "las aplicaciones descargadas."
  • - \n\n"Actualmente has accedido a las siguientes cuentas:"\n + "Esto borrará todos los datos del ""almacenamiento interno"" de tu tablet, por ejemplo:\n\n"
  • "tu cuenta de Google"
  • \n
  • "los datos y la configuración del sistema y de las aplicaciones"
  • \n
  • "las aplicaciones descargadas"
  • + "Se borrarán todos los datos del ""almacenamiento interno"" del dispositivo, por ejemplo:\n\n"
  • "tu cuenta de Google,"
  • \n
  • "datos de aplicaciones y ajustes del sistema,"
  • \n
  • "las aplicaciones descargadas."
  • + \n\n"Actualmente has accedido a las siguientes cuentas:\n"
  • "Música"
  • \n
  • "Fotos"
  • \n
  • "Otros datos de usuario"
  • \n\n"Para borrar la música, las imágenes y otros datos de usuario, debes borrar el ""almacenamiento USB""." \n\n"Para borrar música, imágenes y otros datos del usuario, debes borrar la ""tarjeta SD""." @@ -1105,7 +1106,7 @@ "Mostrar procesos almacenados en la memoria caché" "Restablecer preferencias" "¿Restablec. preferencias?" - "Se restablecerán las preferencias de:"\n\n" "
  • "aplicaciones desactivadas,"
  • \n" "
  • "notificaciones de aplicaciones desactivadas,"
  • \n" "
  • "aplicaciones predeterminadas para diferentes acciones,"
  • \n" "
  • "restricciones de datos en segundo plano para las aplicaciones."
  • \n\n" No perderás los datos de ninguna aplicación."
    + "Se restablecerán las preferencias de:\n\n "
  • "aplicaciones desactivadas,"
  • \n" "
  • "notificaciones de aplicaciones desactivadas,"
  • \n" "
  • "aplicaciones predeterminadas para diferentes acciones,"
  • \n" "
  • "restricciones de datos en segundo plano para las aplicaciones."
  • \n\n" No perderás los datos de ninguna aplicación."
    "Restablecer aplicaciones" "Administrar el espacio" "Filtro" @@ -1240,9 +1241,7 @@ "Para cambiar, presiona Ctrl+espacio." "Predeterminado" "Diseños de teclado" - "Diccionario del usuario" - "Diccionario personal" - "Diccionarios personales" + "Diccionario personal" "Agregar" "Agregar al diccionario" @@ -1303,6 +1302,11 @@ "Incluir opción de realizar un informe de errores en el menú de encendido" "Permanecer activo" "La pantalla nunca quedará inactiva mientras el dispositivo se esté cargando." + "Habilitar el registro de búsqueda de HCI de Bluetooth" + "Capturar todos los paquetes de HCI de Bluetooth en un archivo" + "Tiempo de ejecución" + "Tiempo de ejecución" + "¿Reiniciar para cambiar el tiempo de ejecución de %1$s a %2$s?" "Ubicaciones de prueba" "Permitir ubicaciones de prueba" "¿Permitir depuración por USB?" @@ -1315,11 +1319,13 @@ "Proteger almacenamiento USB" "Las aplicaciones deben pedir permiso para leer el USB." "¿Proteger almacenamiento USB?" - "Cuando el almacenamiento USB está protegido, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo."\n\n"Es posible que algunas aplicaciones no funcionen hasta que los programadores las actualicen." + "Cuando el almacenamiento USB está protegido, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo.\n\nEs posible que algunas aplicaciones no funcionen hasta que los programadores las actualicen." "Proteger tarjeta SD" "Las aplicaciones deben pedir permiso para leer la tarjeta SD." "¿Proteger tarjeta SD?" - "Cuando la tarjeta SD está protegida, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo."\n\n"Es posible que algunas aplicaciones no funcionen hasta que los programadores las actualicen." + "Cuando la tarjeta SD está protegida, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo.\n\nEs posible que algunas aplicaciones no funcionen hasta que los programadores las actualicen." + "Terminal local" + "Habilitar aplicac. de terminal que ofrece acceso al shell local" "Elegir gadget" "Elegir control" "¿Deseas crear el widget y permitir el acceso?" @@ -1340,11 +1346,11 @@ "Servicios" "Sistema" "Gestos de ampliación" - "Cuando esta función está activada, puedes acercar y alejar la imagen con solo tocar tres veces la pantalla."\n\n"A continuación se indican las acciones que puedes hacer con la imagen acercada."\n
    • "Desplazar la imagen: arrastra dos o más dedos por la pantalla."
    • \n
    • "Modificar el nivel de zoom: une dos o más dedos o sepáralos."
    \n\n"También puedes ampliar el contenido seleccionado de forma temporal con solo tocar la pantalla tres veces y mantenerla presionada. Con el contenido ampliado, puedes arrastrar el dedo para explorar diferentes partes de la pantalla. Levanta el dedo para volver al estado anterior."\n\n"Nota: Puedes tocar tres veces la pantalla para ampliar el contenido en cualquier parte, excepto en el teclado y en la barra de navegación."
    + "Cuando esta función está activada, puedes acercar y alejar la imagen con solo tocar tres veces la pantalla.\n\nA continuación se indican las acciones que puedes hacer con la imagen acercada.\n"
    • "Desplazar la imagen: arrastra dos o más dedos por la pantalla."
    • \n
    • "Modificar el nivel de zoom: une dos o más dedos o sepáralos."
    \n\n"También puedes ampliar el contenido seleccionado de forma temporal con solo tocar la pantalla tres veces y mantenerla presionada. Con el contenido ampliado, puedes arrastrar el dedo para explorar diferentes partes de la pantalla. Levanta el dedo para volver al estado anterior.\n\nNota: Puedes tocar tres veces la pantalla para ampliar el contenido en cualquier parte, excepto en el teclado y en la barra de navegación."
    "Acceso directo a la accesibilidad" "Encendido" "Desactivada" - "Cuando esta función está activada, puedes activar las funciones de accesibilidad rápidamente en dos pasos."\n\n"Paso 1: mantén presionado el botón de encendido hasta que oigas un sonido o notes una vibración."\n\n"Paso 2: mantén la pantalla presionada con dos dedos hasta que oigas una confirmación."\n\n"Si el dispositivo tiene varios usuarios, este acceso directo en la pantalla bloqueada permite habilitar la accesibilidad de forma temporal hasta que el dispositivo se desbloquea." + "Cuando esta función está activada, puedes activar las funciones de accesibilidad rápidamente en dos pasos.\n\nPaso 1: mantén presionado el botón de encendido hasta que oigas un sonido o notes una vibración.\n\nPaso 2: mantén la pantalla presionada con dos dedos hasta que oigas una confirmación.\n\nSi el dispositivo tiene varios usuarios, este acceso directo en la pantalla bloqueada permite habilitar la accesibilidad de forma temporal hasta que el dispositivo se desbloquea." "Texto grande" "Ampliación de pantalla" "Actualizar automáticamente la ampliación de pantalla" @@ -1366,6 +1372,16 @@ "TalkBack permite que los usuarios con baja visión y no videntes oigan en voz alta las acciones que realizan. ¿Deseas instalarlo gratis desde Android Market?" "No se proporcionó ninguna descripción." "Configuración" + "Impresión" + "Config. de impresión" + "Servicios" + "¿Quieres usar %1$s?" + "%1$s puede recibir los documentos que imprimes. Estos documentos pueden contener información confidencial." + "No se instaló ningún servicio." + "Configuración" + "Agregar impresoras" + "Sí" + "No" "Batería" "Lo que ha utilizado la batería" "Sin datos de uso de batería" @@ -1405,8 +1421,10 @@ "Wi-Fi en funcionamiento" "Tablet" "Teléfono" - "Datos enviados" - "Datos recibidos" + "Datos móviles enviados" + "Datos móviles recibidos" + "Datos Wi‑Fi enviados" + "Datos Wi‑Fi recibidos" "Audio" "Video" "Tiempo de activación" @@ -1460,6 +1478,7 @@ "Sonido" "Afecta el tono del texto hablado" "Idioma" + "Idioma no seleccionado" "Establece la voz específica de un idioma para el texto hablado" "Escucha un ejemplo:" "Reproducir una pequeña demostración de síntesis de voz" @@ -1594,7 +1613,7 @@ "EAP no es compatible." "No puedes configurar una conexión Wi-Fi con EAP durante la configuración. Luego, puedes hacerlo en Conexiones inalámbricas y redes, en Configuración." "La conexión puede demorar unos minutos..." - "Toca ""Siguiente"" para continuar con la configuración."\n\n"Toca ""Volver"" para conectarte a otra red Wi‑Fi." + "Toca ""Siguiente"" para continuar con la configuración.\n\nToca ""Volver"" para conectarte a otra red Wi‑Fi." "Sincronización habilitada" "Sincronización inhabilitada" "Error de sincronización" @@ -1622,7 +1641,7 @@ "Gmail" "Calendario" "Contactos" - "Te damos la bienvenida a Google Sync"" "\n"Con este software de Google, puedes sincronizar tus datos y acceder a tus contactos, citas y más desde cualquier lugar." + "Te damos la bienvenida a Google Sync"" \nCon este software de Google, puedes sincronizar tus datos y acceder a tus contactos, citas y más desde cualquier lugar." "Conf. de sincronización de aplicación" "Sincronización y datos" "Cambiar contraseña" @@ -1676,8 +1695,7 @@ "Mostrar vistas de ventanas procesadas con GPU" "Ver actualiz. de capas de hardware" "Luz verde en capas de hardware al actualizarse" - "Mostrar superposición GPU" - "De mejor a peor: azul, verde, rojo claro, rojo" + "Depurar superpos. con GPU" "Desactivar superpos. HW" "Usar GPU para combinar pantallas" "Seguimientos de OpenGL" @@ -1738,11 +1756,11 @@ "Desactivar datos ref. en redes móviles (usará redes no móviles)" "Para restringir datos en 2.° plano aquí, limita datos móviles." "¿Restringir el uso de datos en segundo plano?" - "Esta función puede hacer que deje de funcionar una aplicación que tenga que utilizar datos en segundo plano cuando solo estén disponibles redes móviles."\n\n"Puedes encontrar controles de uso de datos más adecuados en las opciones de configuración disponibles en la aplicación." + "Esta función puede hacer que deje de funcionar una aplicación que tenga que utilizar datos en segundo plano cuando solo estén disponibles redes móviles.\n\nPuedes encontrar controles de uso de datos más adecuados en las opciones de configuración disponibles en la aplicación." "Solo se pueden restringir los datos en segundo plano si estableciste un límite de datos móviles." "¿Activar sinc. automática?" - "Cualquier cambio que sufran tus cuentas en la Web se copiará automáticamente en tu tablet."\n\n"Algunas cuentas también pueden copiar automáticamente en la Web los cambios que sufre tu tablet. Una cuenta de Google funciona de esta manera."\n\n"Para elegir qué tipo de información sincronizar dentro de cada cuenta, ve a Configuración > Cuentas." - "Cualquier cambio que sufran tus cuentas en la Web se copiará automáticamente en tu dispositivo."\n\n"Algunas cuentas también pueden copiar automáticamente en la Web los cambios que sufre tu dispositivo. Una cuenta de Google funciona de esta manera."\n\n"Para elegir qué tipo de información sincronizar dentro de cada cuenta, ve a Configuración > Cuentas." + "Cualquier cambio que sufran tus cuentas en la Web se copiará automáticamente en tu tablet.\n\nAlgunas cuentas también pueden copiar automáticamente en la Web los cambios que sufre tu tablet. Una cuenta de Google funciona de esta manera.\n\nPara elegir qué tipo de información sincronizar dentro de cada cuenta, ve a Configuración > Cuentas." + "Cualquier cambio que sufran tus cuentas en la Web se copiará automáticamente en tu dispositivo.\n\nAlgunas cuentas también pueden copiar automáticamente en la Web los cambios que sufre tu dispositivo. Una cuenta de Google funciona de esta manera.\n\nPara elegir qué tipo de información sincronizar dentro de cada cuenta, ve a Configuración > Cuentas." "¿Desactivar sinc. automática?" "Así ahorrarás datos y energía, pero tendrás que sincronizar cada cuenta manualmente para recopilar la información reciente. Por otro lado, no se te notificarán las actualizaciones." "Fecha de restablecimiento del ciclo de uso" @@ -1751,12 +1769,12 @@ "Configurar advertencia acerca del uso de datos" "Establecer el límite de uso de datos" "Limitar el uso de datos" - "Tu conexión de datos móvil se desactivará cuando se alcance el límite especificado."\n\n"Debido a que el uso de datos medido por tu tablet puede diferir del cálculo de uso de tu proveedor, considera usar un límite prudente." - "Tu conexión de datos móvil se desactivará cuando se alcance el límite especificado."\n\n"Debido a que el uso de datos medido por tu teléfono puede diferir del cálculo de uso de tu proveedor, considera usar un límite prudente." + "Tu conexión de datos móvil se desactivará cuando se alcance el límite especificado.\n\nDebido a que el uso de datos medido por tu tablet puede diferir del cálculo de uso de tu proveedor, considera usar un límite prudente." + "Tu conexión de datos móvil se desactivará cuando se alcance el límite especificado.\n\nDebido a que el uso de datos medido por tu teléfono puede diferir del cálculo de uso de tu proveedor, considera usar un límite prudente." "¿Restringir el uso de datos en segundo plano?" "Si restringes los datos móviles en segundo plano, algunas aplicaciones y servicios no funcionarán a menos que te conectes a una red Wi-Fi." - "Si restringes los datos móviles en segundo plano, algunos servicios y aplicaciones no funcionarán a menos que te conectes a una red Wi-Fi."\n\n"Esta configuración afecta a todos los usuarios de esta tablet." - "Si restringes los datos móviles en segundo plano, algunos servicios y aplicaciones no funcionarán a menos que te conectes a una red Wi-Fi."\n\n"Esta configuración afecta a todos los usuarios de este dispositivo." + "Si restringes los datos móviles en segundo plano, algunos servicios y aplicaciones no funcionarán a menos que te conectes a una red Wi-Fi.\n\nEsta configuración afecta a todos los usuarios de esta tablet." + "Si restringes los datos móviles en segundo plano, algunos servicios y aplicaciones no funcionarán a menos que te conectes a una red Wi-Fi.\n\nEsta configuración afecta a todos los usuarios de este dispositivo." "^1""^2"\n"advertencia" "^1"" ""^2"\n"límite" "Aplicaciones eliminadas" @@ -1843,8 +1861,8 @@ "Usuario" "Perfil restringido" "Agregar usuario nuevo" - "Puedes crear usuarios adicionales para compartir este dispositivo con otras personas. Cada usuario cuenta con su propio espacio y puede personalizarlo con sus propios fondos de pantalla, aplicaciones, etc. Los usuarios también pueden cambiar ciertos parámetros de configuración de la tablet como, por ejemplo, la red Wi-Fi, que afectan a todos."\n\n"Luego de que crees un usuario nuevo, este tiene que pasar por un proceso de configuración."\n\n"Cualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." - "Luego de que crees un usuario nuevo, este tiene que pasar por un proceso de configuración."\n\n"Cualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." + "Puedes crear usuarios adicionales para compartir este dispositivo con otras personas. Cada usuario cuenta con su propio espacio y puede personalizarlo con sus propios fondos de pantalla, aplicaciones, etc. Los usuarios también pueden cambiar ciertos parámetros de configuración de la tablet como, por ejemplo, la red Wi-Fi, que afectan a todos.\n\nLuego de que crees un usuario nuevo, este tiene que pasar por un proceso de configuración.\n\nCualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." + "Luego de que crees un usuario nuevo, este tiene que pasar por un proceso de configuración.\n\nCualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." "¿Configurar el usuario ahora?" "Asegúrate de que la persona esté disponible para aceptar la tablet y configurar su espacio." "¿Quieres configurar tu perfil ahora?" @@ -1875,6 +1893,9 @@ "Esta configuración afecta a todos los usuarios de este dispositivo." "Cambiar idioma" "Cambiar tamaño de fuente" + "Restricciones" + "Eliminar restricciones" + "Cambiar PIN" "Mostrar notificaciones" "Ayuda" "Cuenta para contenido" diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml index fe1cf2ee284..7616c68786f 100644 --- a/res/values-es/arrays.xml +++ b/res/values-es/arrays.xml @@ -72,9 +72,9 @@ "Rápida" "Más rápida" "Muy rápida" - "Rápida" - "Muy rápida" - "La más rápida" + "Superrápida" + "Hiperrrápida" + "Lo más rápido posible"
    "Muy bajo" @@ -128,7 +128,7 @@ "PWD" - "Botón push" + "Botón WPS" "PIN del otro dispositivo" "PIN del dispositivo" @@ -233,7 +233,8 @@ "Ubicación" "Personal" "Mensajes" - "Dispositivo" + "Multimedia" + "Dispositivo" "ubicación común" @@ -267,6 +268,17 @@ "reproducir audio" "leer portapapeles" "modificar portapapeles" + "botones multimedia" + "foco de audio" + "volumen principal" + "volumen de la voz" + "volumen del tono" + "volumen multimedia" + "volumen de la alarma" + "volumen de las notificaciones" + "volumen de Bluetooth" + "mantener activo" + "controlar ubicación" "Ubicación" @@ -300,12 +312,33 @@ "Reproducir audio" "Leer portapapeles" "Modificar portapapeles" + "Botones multimedia" + "Foco de audio" + "Volumen principal" + "Volumen de la voz" + "Volumen del tono" + "Volumen multimedia" + "Volumen de alarma" + "Volumen de notificaciones" + "Volumen de Bluetooth" + "Mantener activo" + "Ubicación" "Corto" "Medio" "Largo" + + "Dalvik" + "ART" + "ART (depuración)" + + + "Usar Dalvik" + "Usar ART" + "Usar compilación de depuración de ART" + "No comprobar" "Buscar solo contenido DRM" @@ -367,6 +400,11 @@ "En pantalla como líneas" "En adb shell dumpsys gfxinfo" + + "No" + "Mostrar áreas sobredibujadas" + "Mostrar contador de sobredibujos" + "Límite estándar" "Sin procesos en segundo plano" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index b6565b3729a..e3593a04fb5 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -275,8 +275,8 @@ "Has perdido la conectividad de datos porque has dejado desactivada la itinerancia de datos de tu red doméstica." "Activarla" "Al permitir la itinerancia de datos, es posible que te facturen cargos adicionales elevados." - "Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos."\n\n"Esta configuración afecta a todos los usuarios de este tablet." - "Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos."\n\n"Esta configuración afecta a todos los usuarios de este teléfono." + "Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos.\n\nEsta configuración afecta a todos los usuarios de este tablet." + "Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos.\n\nEsta configuración afecta a todos los usuarios de este teléfono." "¿Permitir itinerancia de datos?" "Selección de operador" "Seleccionar un operador de red" @@ -322,8 +322,8 @@ "Solicitar una contraseña o un PIN numérico para descifrar el tablet cada vez que se encienda" "Solicitar una contraseña o un PIN numérico para descifrar el teléfono cada vez que se encienda" "Encriptado" - "Puedes encriptar tus cuentas, tus ajustes, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Cuando hayas encriptado el tablet, debes introducir un PIN o una contraseña para descifrarlo cada vez que lo enciendas. Solo podrás deshacer la operación restableciendo los datos de fábrica y borrando todos los datos del tablet."\n\n"El proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con una batería cargada y mantener el tablet conectado hasta que acabe. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." - "Puedes encriptar tus cuentas, tus ajustes, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Cuando hayas encriptado el teléfono, debes introducir un PIN o una contraseña para descifrarlo cada vez que lo enciendas. Solo podrás deshacer la operación restableciendo los datos de fábrica y borrando todos los datos del teléfono."\n\n"El proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con una batería cargada y mantener el teléfono conectado hasta que acabe. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." + "Puedes encriptar tus cuentas, tus ajustes, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Cuando hayas encriptado el tablet, debes introducir un PIN o una contraseña para descifrarlo cada vez que lo enciendas. Solo podrás deshacer la operación restableciendo los datos de fábrica y borrando todos los datos del tablet.\n\nEl proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con una batería cargada y mantener el tablet conectado hasta que acabe. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." + "Puedes encriptar tus cuentas, tus ajustes, las aplicaciones descargadas y sus datos, archivos multimedia y otros tipos de archivos. Cuando hayas encriptado el teléfono, debes introducir un PIN o una contraseña para descifrarlo cada vez que lo enciendas. Solo podrás deshacer la operación restableciendo los datos de fábrica y borrando todos los datos del teléfono.\n\nEl proceso de encriptación tarda aproximadamente una hora. Debes iniciar este proceso con una batería cargada y mantener el teléfono conectado hasta que acabe. Si se interrumpe el proceso de encriptación, perderás tus datos total o parcialmente." "Encriptar tablet" "Encriptar teléfono" "Carga la batería y vuelve a intentarlo." @@ -339,8 +339,8 @@ "Espera ^1 segundos y vuelve a intentarlo." "Escribe tu contraseña" "Error en la encriptación" - "El proceso de encriptación se ha interrumpido y no se puede completar. Por tanto, no podrás volver a acceder a los datos del tablet. "\n\n"Debes restablecer los datos de fábrica para volver a usar el tablet. Cuando configures el tablet después de este proceso, podrás restaurar los datos de los que hayas hecho una copia de seguridad en tu cuenta de Google." - "La encriptación se ha interrumpido y no se puede completar. Por tanto, no podrás volver a acceder a los datos del teléfono. "\n\n"Debes restablecer los datos de fábrica para volver a usar el teléfono. Cuando configures el teléfono después de este proceso, podrás restaurar los datos de los que hayas hecho una copia de seguridad en tu cuenta de Google." + "El proceso de encriptación se ha interrumpido y no se puede completar. Por tanto, no podrás volver a acceder a los datos del tablet. \n\nDebes restablecer los datos de fábrica para volver a usar el tablet. Cuando configures el tablet después de este proceso, podrás restaurar los datos de los que hayas hecho una copia de seguridad en tu cuenta de Google." + "La encriptación se ha interrumpido y no se puede completar. Por tanto, no podrás volver a acceder a los datos del teléfono. \n\nDebes restablecer los datos de fábrica para volver a usar el teléfono. Cuando configures el teléfono después de este proceso, podrás restaurar los datos de los que hayas hecho una copia de seguridad en tu cuenta de Google." "Cambiar método de entrada" "Elegir bloqueo de pantalla" "Bloqueo alternativo" @@ -514,6 +514,7 @@ "Conectando" "Conectada" "Disponible" + "En uso" "Ajustes de pantalla" "¿Desconectar?" "Finalizará la conexión con<br><b>%1$s</b>." @@ -532,7 +533,7 @@ "Desactivada" "No disponible porque la función NFC está desactivada" "Android Beam" - "Si la función Android Beam está activada, puedes juntar tu dispositivo con otro compatible con la tecnología NFC para compartir el contenido de las aplicaciones. Por ejemplo, puedes transferir páginas del navegador, vídeos de YouTube, contactos y mucho más."\n\n"Solo tienes que unir los dispositivos (normalmente, por la parte trasera) y, a continuación, tocar la pantalla de tu dispositivo. Las aplicaciones determinan el contenido que puede compartirse." + "Si la función Android Beam está activada, puedes juntar tu dispositivo con otro compatible con la tecnología NFC para compartir el contenido de las aplicaciones. Por ejemplo, puedes transferir páginas del navegador, vídeos de YouTube, contactos y mucho más.\n\nSolo tienes que unir los dispositivos (normalmente, por la parte trasera) y, a continuación, tocar la pantalla de tu dispositivo. Las aplicaciones determinan el contenido que puede compartirse." "Detección de aplicaciones" "Permitir que las aplicaciones de otros dispositivos puedan ver las aplicaciones de este dispositivo" "Wi-Fi" @@ -620,7 +621,7 @@ "Protegida con %1$s" ", protegida con %1$s" "Ninguna" - "Para mejorar la precisión de la ubicación y para otros fines, %1$s quiere activar la búsqueda de redes aunque la conexión Wi-Fi esté desactivada."\n\n"¿Permitir para todas las aplicaciones que quieran buscar redes?" + "Para mejorar la precisión de la ubicación y para otros fines, %1$s quiere activar la búsqueda de redes aunque la conexión Wi-Fi esté desactivada.\n\n¿Permitir para todas las aplicaciones que quieran buscar redes?" "Permitir" "Rechazar" "Establecer conexión" @@ -632,8 +633,8 @@ "Cancelar" "Omitir de todas formas" "No omitir" - "ADVERTENCIA: es posible que se facturen cargos de datos adicionales."\n\n"La configuración del tablet puede requerir una gran cantidad de actividad de red." - "ADVERTENCIA: es posible que se facturen cargos de datos adicionales."\n\n"La configuración del teléfono puede requerir una gran cantidad de actividad de red." + "ADVERTENCIA: es posible que se facturen cargos de datos adicionales.\n\nLa configuración del tablet puede requerir una gran cantidad de actividad de red." + "ADVERTENCIA: es posible que se facturen cargos de datos adicionales.\n\nLa configuración del teléfono puede requerir una gran cantidad de actividad de red." "ADVERTENCIA: hasta que no tengas conexión a Internet, el tablet no podrá verificar si el software está actualizado." "ADVERTENCIA: hasta que no tengas conexión a Internet, el teléfono no podrá verificar si el software está actualizado." "El tablet no se ha podido conectar a esta red Wi-Fi." @@ -773,9 +774,9 @@ "PIN de tarjeta SIM" "PIN incorrecto" "Los números PIN no coinciden." - "No se puede modificar el PIN."\n"Es posible que el PIN no sea correcto." + "No se puede modificar el PIN.\nEs posible que el PIN no sea correcto." "El PIN de la tarjeta SIM se ha modificado correctamente." - "No se puede modificar el estado de bloqueo de la tarjeta SIM."\n"Es posible que el PIN no sea correcto." + "No se puede modificar el estado de bloqueo de la tarjeta SIM.\nEs posible que el PIN no sea correcto." "Aceptar" "Cancelar" "Estado del tablet" @@ -918,9 +919,9 @@ "Restablecer datos de fábrica" "Borra todos los datos del tablet." "Borrar todos los datos del teléfono" - "Se borrarán todos los datos del ""almacenamiento interno"" del tablet, como:"\n\n
  • "Tu cuenta de Google"
  • \n
  • "Los ajustes y los datos de aplicaciones y del sistema"
  • \n
  • "Las aplicaciones descargadas"
  • - "Se borrarán todos los datos del ""almacenamiento interno"" del teléfono, como:"\n\n
  • "Tu cuenta de Google"
  • \n
  • "Los ajustes y los datos de aplicaciones y del sistema"
  • \n
  • "Las aplicaciones descargadas"
  • - \n\n"Has accedido a las cuentas que se indican a continuación:"\n + "Se borrarán todos los datos del ""almacenamiento interno"" del tablet, como:\n\n"
  • "Tu cuenta de Google"
  • \n
  • "Los ajustes y los datos de aplicaciones y del sistema"
  • \n
  • "Las aplicaciones descargadas"
  • + "Se borrarán todos los datos del ""almacenamiento interno"" del teléfono, como:\n\n"
  • "Tu cuenta de Google"
  • \n
  • "Los ajustes y los datos de aplicaciones y del sistema"
  • \n
  • "Las aplicaciones descargadas"
  • + \n\n"Has accedido a las cuentas que se indican a continuación:\n"
  • "Música"
  • \n
  • "Fotos"
  • \n
  • "Otros datos de usuario"
  • \n\n"Para eliminar la música, las imágenes y otros datos de usuario, debes borrar el ""almacenamiento USB""." \n\n"Para eliminar la música, las imágenes y otros datos de usuario, deber borrar la ""tarjeta SD""." @@ -1105,7 +1106,7 @@ "Procesos en caché" "Restablecer preferencias" "¿Restablecer preferencias?" - "Se restablecerán todas las preferencias de:"\n\n" "
  • "Aplicaciones inhabilitadas"
  • \n" "
  • "Notificaciones de aplicaciones inhabilitadas"
  • \n" "
  • "Aplicaciones para acciones predeterminadas"
  • \n" "
  • "Restricciones de conexiones automáticas para aplicaciones"
  • \n\n"No perderás los datos de las aplicaciones."
    + "Se restablecerán todas las preferencias de:\n\n "
  • "Aplicaciones inhabilitadas"
  • \n" "
  • "Notificaciones de aplicaciones inhabilitadas"
  • \n" "
  • "Aplicaciones para acciones predeterminadas"
  • \n" "
  • "Restricciones de conexiones automáticas para aplicaciones"
  • \n\n"No perderás los datos de las aplicaciones."
    "Restablecer aplicaciones" "Administrar espacio" "Filtrar" @@ -1240,9 +1241,7 @@ "Para cambiar, pulsa Ctrl+espacio." "Predeterminado" "Diseños de teclado" - "Diccionario del usuario" - "Diccionario personal" - "Diccionarios personales" + "Diccionario personal" "Añadir" "Añadir al diccionario" @@ -1303,6 +1302,11 @@ "Incluir opción en el menú de encendido para generar un informe de error" "Pantalla activa" "La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando" + "Habilitar registro de búsqueda de HCI de Bluetooth" + "Capturar todos los paquetes de HCI de Bluetooth HCI en un archivo" + "Elegir tiempo de ejecución" + "Elegir tiempo de ejecución" + "¿Reiniciar para cambiar el tiempo de ejecución de %1$s a %2$s?" "Ubicaciones simuladas" "Permitir ubicaciones simuladas" "¿Permitir depuración USB?" @@ -1315,11 +1319,13 @@ "Proteger almacenamiento USB" "Las aplicaciones deben solicitar permiso para leer el almacenamiento USB" "¿Proteger almacenamiento USB?" - "Cuando el almacenamiento USB está protegido, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo."\n\n"Es posible que algunas aplicaciones no funcionen hasta que los desarrolladores las actualicen." + "Cuando el almacenamiento USB está protegido, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo.\n\nEs posible que algunas aplicaciones no funcionen hasta que los desarrolladores las actualicen." "Proteger tarjeta SD" "Las aplicaciones deben solicitar permiso para leer la tarjeta SD" "¿Proteger tarjeta SD?" - "Cuando la tarjeta SD está protegida, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo."\n\n"Es posible que algunas aplicaciones no funcionen hasta que los desarrolladores las actualicen." + "Cuando la tarjeta SD está protegida, las aplicaciones deben solicitar permiso para leer los datos del almacenamiento externo.\n\nEs posible que algunas aplicaciones no funcionen hasta que los desarrolladores las actualicen." + "Terminal local" + "Habilitar aplicación de terminal que ofrece acceso a shell local" "Seleccionar gadget" "Seleccionar widget" "¿Crear widget y permitir acceso?" @@ -1340,11 +1346,11 @@ "Servicios" "Sistema" "Gestos de ampliación" - "Cuando esta función está activada, puedes acercar y alejar la imagen con solo tocar tres veces la pantalla."\n\n"A continuación se indican las acciones que puedes hacer con la imagen acercada."\n
    • "Desplazar la imagen: arrastra dos o más dedos por la pantalla."
    • \n
    • "Modificar el nivel de zoom: une dos o más dedos o sepáralos."
    \n\n"También puedes ampliar el contenido seleccionado de forma temporal con solo tocar la pantalla tres veces y mantenerla pulsada. Con el contenido ampliado, puedes arrastrar el dedo para explorar diferentes partes de la pantalla. Levanta el dedo para volver al estado anterior."\n\n"Nota: puedes tocar tres veces la pantalla para ampliar el contenido en cualquier parte, excepto en el teclado y en la barra de navegación."
    + "Cuando esta función está activada, puedes acercar y alejar la imagen con solo tocar tres veces la pantalla.\n\nA continuación se indican las acciones que puedes hacer con la imagen acercada.\n"
    • "Desplazar la imagen: arrastra dos o más dedos por la pantalla."
    • \n
    • "Modificar el nivel de zoom: une dos o más dedos o sepáralos."
    \n\n"También puedes ampliar el contenido seleccionado de forma temporal con solo tocar la pantalla tres veces y mantenerla pulsada. Con el contenido ampliado, puedes arrastrar el dedo para explorar diferentes partes de la pantalla. Levanta el dedo para volver al estado anterior.\n\nNota: puedes tocar tres veces la pantalla para ampliar el contenido en cualquier parte, excepto en el teclado y en la barra de navegación."
    "Acceso directo a accesibilidad" "Sí" "Desactivada" - "Cuando esta función está activada, puedes habilitar las funciones de accesibilidad rápidamente en dos pasos."\n\n"Paso 1: mantén pulsado el botón de encendido hasta que escuches un sonido o notes una vibración."\n\n"Paso 2: mantén la pantalla pulsada con dos dedos hasta que escuches una confirmación."\n\n"Si hay varios usuarios en el dispositivo, este acceso directo en la pantalla de bloqueo permite habilitar la accesibilidad de forma temporal hasta que el dispositivo se desbloquea." + "Cuando esta función está activada, puedes habilitar las funciones de accesibilidad rápidamente en dos pasos.\n\nPaso 1: mantén pulsado el botón de encendido hasta que escuches un sonido o notes una vibración.\n\nPaso 2: mantén la pantalla pulsada con dos dedos hasta que escuches una confirmación.\n\nSi hay varios usuarios en el dispositivo, este acceso directo en la pantalla de bloqueo permite habilitar la accesibilidad de forma temporal hasta que el dispositivo se desbloquea." "Texto grande" "Ampliación de pantalla" "Actualizar ampliación automáticamente" @@ -1366,6 +1372,16 @@ "TalkBack ofrece mensajes de voz para usuarios con discapacidades visuales. ¿Quieres instalarlo de forma gratuita desde Android Market?" "No se ha especificado ninguna descripción." "Ajustes" + "Impresión" + "Ajustes de impresión" + "Servicios" + "¿Usar %1$s?" + "%1$s puede recibir los documentos que imprimes. Esos documentos pueden contener información confidencial." + "No se ha instalado ningún servicio." + "Ajustes" + "Añadir impresoras" + "On" + "Off" "Batería" "Consumo de la batería" "Los datos de uso de la batería no están disponibles" @@ -1405,8 +1421,10 @@ "Wi‑Fi activado" "Tablet" "Teléfono" - "Datos enviados" - "Datos recibidos" + "Datos móviles enviados" + "Datos móviles recibidos" + "Datos Wi‑Fi enviados" + "Datos Wi‑Fi recibidos" "Audio" "Vídeo" "Tiempo encendida" @@ -1460,6 +1478,7 @@ "Tono" "Afecta al tono del texto hablado." "Idioma" + "Idioma no seleccionado" "Establecer la voz del idioma específico para el texto hablado" "Escuchar un ejemplo" "Reproducir una breve demostración de síntesis de voz" @@ -1594,7 +1613,7 @@ "EAP no compatible" "No puedes definir una conexión Wi-Fi EAP durante la configuración, pero puedes hacerlo cuando haya finalizado a través de Ajustes > Conexiones inalámbricas y redes." "Conectando (puede tardar unos minutos)…" - "Toca ""Siguiente"" para continuar con el proceso de configuración."\n\n"Toca ""Atrás"" para conectarte a otra red Wi-Fi." + "Toca ""Siguiente"" para continuar con el proceso de configuración.\n\nToca ""Atrás"" para conectarte a otra red Wi-Fi." "Sincronización habilitada" "Sincronización inhabilitada" "Error de sincronización" @@ -1622,7 +1641,7 @@ "Gmail" "Calendar" "Contactos" - "Te damos la bienvenida a Google Sync,"" "\n"un servicio de Google que te permite sincronizar datos para que puedas acceder a tus contactos, a tus citas, etc., desde cualquier ubicación." + "Te damos la bienvenida a Google Sync,"" \nun servicio de Google que te permite sincronizar datos para que puedas acceder a tus contactos, a tus citas, etc., desde cualquier ubicación." "Ajustes de sincronización de la aplicación" "Datos y sincronización" "Cambiar contraseña" @@ -1676,8 +1695,7 @@ "Actualizar vistas de las ventanas creadas con GPU" "Ver actualizaciones capas" "Iluminar capas de hardware en verde al actualizarse" - "Mostrar superación de GPU" - "De mejor a peor: azul, verde, rojo claro, rojo" + "Depurar sobredibujos de GPU" "Inhabilitar superposiciones HW" "Usar siempre GPU para combinar pantallas" "Habilitar seguimiento OpenGL" @@ -1738,11 +1756,11 @@ "Inhabilitar conexiones automáticas en redes móviles (si es posible, se usarán otras)." "Para restringir las conexiones automáticas, establece un límite de datos móviles." "¿Restringir conexiones automáticas?" - "Esta función puede hacer que deje de funcionar una aplicación que tenga que utilizar conexiones automáticas cuando solo haya disponibles redes móviles."\n\n"Puedes encontrar controles de uso de datos más adecuados en las opciones de configuración disponibles en la aplicación." + "Esta función puede hacer que deje de funcionar una aplicación que tenga que utilizar conexiones automáticas cuando solo haya disponibles redes móviles.\n\nPuedes encontrar controles de uso de datos más adecuados en las opciones de configuración disponibles en la aplicación." "Solo puedes restringir las conexiones automáticas si estableces un límite de datos móviles." "¿Activar sincronización automática?" - "Los cambios que hagas en tus cuentas en la Web se reflejarán automáticamente en el tablet."\n\n"Algunas cuentas como, por ejemplo, las cuentas de Google, también reflejarán en la Web los cambios que hagas en el tablet. "\n\n"Para seleccionar qué tipo de información se sincronizará con cada cuenta, accede a Ajustes > Cuentas." - "Los cambios que hagas en tus cuentas en la Web se reflejarán automáticamente en el teléfono."\n\n"Algunas cuentas como, por ejemplo, las cuentas de Google, también reflejarán en la Web los cambios que hagas en el teléfono. "\n\n"Para seleccionar qué tipo de información se sincronizará con cada cuenta, accede a Ajustes > Cuentas." + "Los cambios que hagas en tus cuentas en la Web se reflejarán automáticamente en el tablet.\n\nAlgunas cuentas como, por ejemplo, las cuentas de Google, también reflejarán en la Web los cambios que hagas en el tablet. \n\nPara seleccionar qué tipo de información se sincronizará con cada cuenta, accede a Ajustes > Cuentas." + "Los cambios que hagas en tus cuentas en la Web se reflejarán automáticamente en el teléfono.\n\nAlgunas cuentas como, por ejemplo, las cuentas de Google, también reflejarán en la Web los cambios que hagas en el teléfono. \n\nPara seleccionar qué tipo de información se sincronizará con cada cuenta, accede a Ajustes > Cuentas." "¿Desactivar sincronización automática?" "Esto te permitirá ahorrar datos y batería, pero tendrás que sincronizar cada cuenta de forma manual para recopilar información reciente y no recibirás notificaciones cuando se produzcan actualizaciones." "Elige el día en el que empezará cada ciclo" @@ -1751,12 +1769,12 @@ "Establecer advertencia de uso de datos" "Limitar uso de datos" "Limitar uso de datos" - "Tu conexión de datos se inhabilitará cuando se alcance el límite especificado."\n\n"Como el tablet es el que calcula el uso de los datos y el cálculo del operador puede ser diferente, te recomendamos que uses un límite moderado." - "Tu conexión de datos se inhabilitará cuando se alcance el límite especificado."\n\n"Como el teléfono es el que calcula los datos y el cálculo del operador puede ser diferente, te recomendamos que uses un límite moderado." + "Tu conexión de datos se inhabilitará cuando se alcance el límite especificado.\n\nComo el tablet es el que calcula el uso de los datos y el cálculo del operador puede ser diferente, te recomendamos que uses un límite moderado." + "Tu conexión de datos se inhabilitará cuando se alcance el límite especificado.\n\nComo el teléfono es el que calcula los datos y el cálculo del operador puede ser diferente, te recomendamos que uses un límite moderado." "¿Restringir conexiones automáticas?" "Si restringes las conexiones automáticas, algunas aplicaciones y algunos servicios no funcionarán sin conexión Wi-Fi." - "Si restringes las conexiones automáticas, algunas aplicaciones y algunos servicios no funcionarán sin conexión Wi-Fi."\n\n"Esta configuración afecta a todos los usuarios del tablet." - "Si restringes las conexiones automáticas, algunas aplicaciones y algunos servicios no funcionarán sin conexión Wi-Fi."\n\n"Esta configuración afecta a todos los usuarios del teléfono." + "Si restringes las conexiones automáticas, algunas aplicaciones y algunos servicios no funcionarán sin conexión Wi-Fi.\n\nEsta configuración afecta a todos los usuarios del tablet." + "Si restringes las conexiones automáticas, algunas aplicaciones y algunos servicios no funcionarán sin conexión Wi-Fi.\n\nEsta configuración afecta a todos los usuarios del teléfono." "^1"" ""^2"\n"aviso" "^1"" ""^2"\n"límite" "Aplicaciones eliminadas" @@ -1843,8 +1861,8 @@ "Usuario" "Perfil limitado" "Añadir nuevo usuario" - "Puedes crear más usuarios para compartir este dispositivo con otras personas. Cada usuario tiene su propio espacio y puede personalizarlo con sus propias aplicaciones, fondos de pantalla y muchas otras cosas. Asimismo, los usuarios pueden modificar las opciones de configuración del tablet, como la conexión Wi-Fi, que afectan a todos los usuarios."\n\n"Después de crear un nuevo usuario, este debe completar un proceso de configuración."\n\n"Cualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." - "Cuendo añadas a un nuevo usuario, deberá completar un proceso de configuración."\n\n"Cualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de usuarios." + "Puedes crear más usuarios para compartir este dispositivo con otras personas. Cada usuario tiene su propio espacio y puede personalizarlo con sus propias aplicaciones, fondos de pantalla y muchas otras cosas. Asimismo, los usuarios pueden modificar las opciones de configuración del tablet, como la conexión Wi-Fi, que afectan a todos los usuarios.\n\nDespués de crear un nuevo usuario, este debe completar un proceso de configuración.\n\nCualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de los usuarios." + "Cuendo añadas a un nuevo usuario, deberá completar un proceso de configuración.\n\nCualquier usuario puede aceptar permisos de aplicaciones actualizados en nombre del resto de usuarios." "¿Configurar usuario ahora?" "Comprueba que el usuario tiene acceso al tablet y puede configurar su espacio." "¿Quieres configurar un perfil ahora?" @@ -1875,6 +1893,9 @@ "Esta configuración afecta a todos los usuarios de este teléfono." "Cambiar idioma" "Cambiar tamaño de fuente" + "Restricciones" + "Eliminar restricciones" + "Cambiar PIN" "Mostrar notificaciones" "Ayuda" "Cuenta para contenido" diff --git a/res/values-et/arrays.xml b/res/values-et/arrays.xml index e72eb1d4b44..9ad5ef18390 100644 --- a/res/values-et/arrays.xml +++ b/res/values-et/arrays.xml @@ -233,7 +233,8 @@ "Asukoht" "Isiklik" "Sõnumside" - "Seade" + "Meedia" + "Seade"
    "üldine asukoht" @@ -267,6 +268,17 @@ "heli esitamine" "lõikelaua lugemine" "lõikelaua muutmine" + "meedianupud" + "helifookus" + "põhihelitugevus" + "hääle helitugevus" + "helina helitugevus" + "meedia helitugevus" + "äratuse helitugevus" + "märguande helitugevus" + "Bluetoothi helitugevus" + "hoia ärkvel" + "monitori asukoht" "Asukoht" @@ -300,12 +312,33 @@ "Heli esitamine" "Lõikelaua lugemine" "Lõikelaua muutmine" + "Meedianupud" + "Helifookus" + "Põhihelitugevus" + "Hääle helitugevus" + "Helina helitugevus" + "Meedia helitugevus" + "Alarmi helitugevus" + "Märguande helitugevus" + "Bluetoothi helitugevus" + "Hoia ärkvel" + "Asukoht" "Lühike" "Keskmine" "Pikk" + + "Dalvik" + "ART" + "ART (silumine)" + + + "Kasuta tarkvara Dalvik" + "Kasuta valikut ART" + "Kasuta valiku ART silumisjärku" + "Ära kunagi kontrolli" "Kontrolli ainult DRM-sisu" @@ -367,6 +400,11 @@ "Ekraanil joontena" "Adb-kestas dumpsys gfxinfo" + + "Väljas" + "Kuva ülejoonistatud alad" + "Kuva ülejoonistuse loendur" + "Standardpiir" "Taustaprotsessideta" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index ef834188174..f8b0201de03 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -275,8 +275,8 @@ "Kaotasite andmesideühenduse, kuna jätsite oma koduvõrgu andmerändluse väljalülitatuks." "Lülita sisse" "Kui lubate andmeside rändluse, siis võidakse teilt küsida suuri rändlustasusid." - "Kui lubate andmeside rändluse, siis võivad sellega kaasneda rändlustasud!"\n\n"Seade mõjutab tahvelarvuti kõiki kasutajaid." - "Kui lubate andmeside rändluse, siis võivad sellega kaasneda rändlustasud!"\n\n"Seade mõjutab telefoni kõiki kasutajaid." + "Kui lubate andmeside rändluse, siis võivad sellega kaasneda rändlustasud!\n\nSeade mõjutab tahvelarvuti kõiki kasutajaid." + "Kui lubate andmeside rändluse, siis võivad sellega kaasneda rändlustasud!\n\nSeade mõjutab telefoni kõiki kasutajaid." "Kas lubada andmeside rändlus?" "Operaatori valik" "Võrguoperaatori valimine" @@ -322,8 +322,8 @@ "Igal telefoni sisselülitamisel on vaja numbrilist PIN-koodi või parooli tahvelarvuti dekrüpteerimiseks" "Igal telefoni sisselülitamisel on vaja numbrilist PIN-koodi või parooli telefoni dekrüpteerimiseks" "Krüpteeritud" - "Saate krüpteerida oma kontosid, seadeid, allalaaditud rakendusi ja nende andmeid ning meediumi- ja muid faile. Kui tahvelarvuti on krüpteeritud, peate iga kord seadet sisse lülitades selle dekrüpteerimiseks sisestama numbrilise PIN-koodi või parooli. Tahvelarvuti krüpteeringut ei saa tühistada, välja arvatud tehaseandmete lähtestamisega, millega kustutatakse kõik teie andmed."\n\n"Krüpteerimine võtab aega tunni või rohkem. Aku peab olema täis ja tahvelarvuti sisse lülitatud, kuni krüpteerimine on lõpule viidud. Kui katkestate krüpteerimistoimingu, kaotate osa või kõik oma andmed." - "Saate krüpteerida oma kontosid, seadeid, allalaaditud rakendusi ja nende andmeid ning meediumi- ja muid faile. Kui telefon on krüpteeritud, peate iga kord seda sisse lülitades sisestama dekrüpteerimiseks numbrilise PIN-koodi või parooli. Telefoni krüpteeringut ei saa tühistada, välja arvatud tehaseandmete lähtestamisega, millega kustutatakse kõik teie andmed."\n\n"Krüpteerimine võtab aega tunni või rohkem. Aku peab olema täis ja telefon sisse lülitatud, kuni krüpteerimine on lõpule viidud. Kui katkestate krüpteerimistoimingu, kaotate osa andmeid või kõik andmed." + "Saate krüpteerida oma kontosid, seadeid, allalaaditud rakendusi ja nende andmeid ning meediumi- ja muid faile. Kui tahvelarvuti on krüpteeritud, peate iga kord seadet sisse lülitades selle dekrüpteerimiseks sisestama numbrilise PIN-koodi või parooli. Tahvelarvuti krüpteeringut ei saa tühistada, välja arvatud tehaseandmete lähtestamisega, millega kustutatakse kõik teie andmed.\n\nKrüpteerimine võtab aega tunni või rohkem. Aku peab olema täis ja tahvelarvuti sisse lülitatud, kuni krüpteerimine on lõpule viidud. Kui katkestate krüpteerimistoimingu, kaotate osa või kõik oma andmed." + "Saate krüpteerida oma kontosid, seadeid, allalaaditud rakendusi ja nende andmeid ning meediumi- ja muid faile. Kui telefon on krüpteeritud, peate iga kord seda sisse lülitades sisestama dekrüpteerimiseks numbrilise PIN-koodi või parooli. Telefoni krüpteeringut ei saa tühistada, välja arvatud tehaseandmete lähtestamisega, millega kustutatakse kõik teie andmed.\n\nKrüpteerimine võtab aega tunni või rohkem. Aku peab olema täis ja telefon sisse lülitatud, kuni krüpteerimine on lõpule viidud. Kui katkestate krüpteerimistoimingu, kaotate osa andmeid või kõik andmed." "Krüpteeri tahvelarvuti" "Krüpteeri telefon" "Laadige akut ja proovige uuesti." @@ -339,8 +339,8 @@ "Proovige uuesti ^1 sekundi pärast." "Sisestage parool" "Krüptimine ebaõnnestus" - "Krüpteerimine katkestati ja seda ei saa lõpule viia. Seetõttu ei pääse te enam oma tahvelarvutis olevatele andmetele juurde. "\n\n" Tahvelarvuti kasutamise jätkamiseks peate lähtestama selle tehaseseadetele. Kui seadistate tahvelarvutit pärast lähtestamist, saate taastada kõik andmed, mis olid varundatud teie Google\'i kontole." - "Krüpteerimine katkestati ja seda ei saa lõpule viia. Seetõttu ei pääse te enam oma telefonis olevatele andmetele juurde. "\n\n"Telefoni kasutamise jätkamiseks peate selle lähtestama tehaseseadetele. Kui seadistate telefoni pärast lähtestamist, saate taastada kõik andmed, mis olid varundatud teie Google\'i kontole." + "Krüpteerimine katkestati ja seda ei saa lõpule viia. Seetõttu ei pääse te enam oma tahvelarvutis olevatele andmetele juurde. \n\n Tahvelarvuti kasutamise jätkamiseks peate lähtestama selle tehaseseadetele. Kui seadistate tahvelarvutit pärast lähtestamist, saate taastada kõik andmed, mis olid varundatud teie Google\'i kontole." + "Krüpteerimine katkestati ja seda ei saa lõpule viia. Seetõttu ei pääse te enam oma telefonis olevatele andmetele juurde. \n\nTelefoni kasutamise jätkamiseks peate selle lähtestama tehaseseadetele. Kui seadistate telefoni pärast lähtestamist, saate taastada kõik andmed, mis olid varundatud teie Google\'i kontole." "Sisestusmeetodi vahetamine" "Ekraaniluku valimine" "Valige varukoopia lukk" @@ -514,6 +514,7 @@ "Ühendamine" "Ühendatud" "Saadaval" + "Kasutusel" "Kuvaseaded" "Kas katkestada ühendus?" "See lõpetab teie ühenduse seadmega:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Väljas" "Pole saadaval, kuna NFC on välja lülitatud" "Android Beam" - "Kui see funktsioon on sisse lülitatud, saate rakenduse sisu teise NFC-suutlikku seadmesse kiirega saata, hoides seadmeid üksteise lähedal. Nii saate edastada näiteks brauserilehti, YouTube\'i videoid, inimeste kontakte ja muud."\n\n"Lihtsalt hoidke seadmeid lähestikku (tavaliselt tagused koos) ja siis puudutage seadme ekraani. Rakendus otsustab, mida kiirega edastatakse." + "Kui see funktsioon on sisse lülitatud, saate rakenduse sisu teise NFC-suutlikku seadmesse kiirega saata, hoides seadmeid üksteise lähedal. Nii saate edastada näiteks brauserilehti, YouTube\'i videoid, inimeste kontakte ja muud.\n\nLihtsalt hoidke seadmeid lähestikku (tavaliselt tagused koos) ja siis puudutage seadme ekraani. Rakendus otsustab, mida kiirega edastatakse." "Võrguteenuse avastus" "Luba muudes seadmetes olevatel rakendustel selle seadme rakendusi leida" "WiFi" @@ -620,7 +621,7 @@ "Kaitstud turbega %1$s" ", kaitstud turbega %1$s" "Puudub" - "Täpsema asukoha ja muude toimingute jaoks tahab rakendus %1$s võrkude skannimise sisse lülitada, isegi kui WiFi on välja lülitatud."\n\n"Kas lubada see kõigi rakenduste jaoks, mis skannida tahavad?" + "Täpsema asukoha ja muude toimingute jaoks tahab rakendus %1$s võrkude skannimise sisse lülitada, isegi kui WiFi on välja lülitatud.\n\nKas lubada see kõigi rakenduste jaoks, mis skannida tahavad?" "Luba" "Keela" "Ühenda" @@ -632,8 +633,8 @@ "Tühista" "Jäta siiski vahele" "Ära jäta vahele" - "HOIATUS: operaatoril võib andmeedastusele kehtida lisahind."\n\n"Tahvelarvuti seadistamiseks võib olla vajalik suur võrguaktiivsus." - "HOIATUS: operaatoril võib andmeedastusele kehtida lisahind."\n\n"Telefoni seadistamiseks võib olla vajalik suur võrguaktiivsus." + "HOIATUS: operaatoril võib andmeedastusele kehtida lisahind.\n\nTahvelarvuti seadistamiseks võib olla vajalik suur võrguaktiivsus." + "HOIATUS: operaatoril võib andmeedastusele kehtida lisahind.\n\nTelefoni seadistamiseks võib olla vajalik suur võrguaktiivsus." "HOIATUS. Kuni teil puudub Interneti-ühendus, ei saa tahvelarvuti teie tarkvara ajakohasust kontrollida." "HOIATUS. Kuni teil puudub Interneti-ühendus, ei saa te tarkvara ajakohasust kontrollida." "Tahvelarvutil ei õnnestunud luua ühendust selle WiFi-võrguga." @@ -773,9 +774,9 @@ "SIM-i PIN-kood" "Vale PIN-kood" "PIN-koodid ei kattu" - "PIN-koodi ei saa muuta."\n"PIN-kood võib vale olla." + "PIN-koodi ei saa muuta.\nPIN-kood võib vale olla." "SIM-i PIN-koodi muutmine õnnestus" - "SIM-kaardi lukustusolekut ei saa muuta."\n"Võimalik, et PIN-kood on vale." + "SIM-kaardi lukustusolekut ei saa muuta.\nVõimalik, et PIN-kood on vale." "OK" "Tühista" "Tahvelarvuti olek" @@ -918,9 +919,9 @@ "Tehaseandmete lähtestamine" "Kustutab kõik tahvelarvutis olevad andmed" "Kustutab kõik andmed telefonis" - "See kustutab kõik andmed teie tahvelarvuti ""sisemälust"", sh:"\n\n
  • "teie Google\'i konto"
  • \n
  • "süsteemi ja rakenduste andmed ning seaded"
  • \n
  • "Allalaaditud rakendused"
  • - "See kustutab kõik andmed telefoni ""sisemälust"", sh:"\n\n
  • "teie Google\'i konto"
  • \n
  • "süsteemi ja rakenduse andmed ning seaded"
  • \n
  • "Allalaaditud rakendused"
  • - \n\n"Olete praegu sisse logitud järgmistele kontodele:"\n + "See kustutab kõik andmed teie tahvelarvuti ""sisemälust"", sh:\n\n"
  • "teie Google\'i konto"
  • \n
  • "süsteemi ja rakenduste andmed ning seaded"
  • \n
  • "Allalaaditud rakendused"
  • + "See kustutab kõik andmed telefoni ""sisemälust"", sh:\n\n"
  • "teie Google\'i konto"
  • \n
  • "süsteemi ja rakenduse andmed ning seaded"
  • \n
  • "Allalaaditud rakendused"
  • + \n\n"Olete praegu sisse logitud järgmistele kontodele:\n"
  • "Muusika"
  • \n
  • "Fotod"
  • \n
  • "Muud kasutajaandmed"
  • \n\n"Muusika, piltide ja muu kasutajateabe kustutamiseks tuleb tühjendada ka ""USB-mäluseade""." \n\n"Muusika, piltide ja muude kasutajaandmete kustutamiseks tuleb tühjendada ka ""SD-kaart""." @@ -1105,7 +1106,7 @@ "Kuva vahemällu salvestatud protsessid" "Läht. rakend. eelistused" "Läht. rakend. eelistused?" - "See lähtestab kõik eelistused rakendusele:"\n\n" "
  • "Keelatud rakendused"
  • \n" "
  • "Keelatud rakenduste teatised"
  • \n" "
  • "Vaikerakendused toimingutele"
  • \n" "
  • "Taustaandmete piirangud rakendustele"
  • \n\n" Te ei kaota mingeid rakenduse andmeid."
    + "See lähtestab kõik eelistused rakendusele:\n\n "
  • "Keelatud rakendused"
  • \n" "
  • "Keelatud rakenduste teatised"
  • \n" "
  • "Vaikerakendused toimingutele"
  • \n" "
  • "Taustaandmete piirangud rakendustele"
  • \n\n" Te ei kaota mingeid rakenduse andmeid."
    "Lähtesta rakendused" "Halda ruumi" "Filter" @@ -1240,9 +1241,7 @@ "Vahetamiseks vajutage Ctrl+tühikut" "Vaikepaigutus" "Klaviatuuri paigutused" - "Kasutajasõnastik" - "Isiklik sõnastik" - "Isiklikud sõnastikud" + "Isiklik sõnaraamat" "Lisa" "Lisa sõnastikku" @@ -1303,6 +1302,11 @@ "Kaasa toitemenüüs veaaruande tegemise valik" "Jää sisselülitatuks" "Ekraan ei lähe kunagi laadimise ajal unerežiimi" + "Luba Bluetoothi HCI jälgimise logi" + "Hõiva kõik faili Bluetoothi HCI paketid" + "Käitusaja valimine" + "Käitusaja valimine" + "Taaskäivitage, et käitusaeg oleks %1$s, mitte %2$s?" "Luba võltsasukohti" "Luba võltsasukohti" "Luban USB silumise?" @@ -1315,11 +1319,13 @@ "Kaitse USB-salvestusruumi" "Rakendused peavad USB-salvestusruumi lugemiseks loa taotlema" "Kas kaitsta USB-salvestusruumi?" - "Kui USB-salvestusruum on kaitstud, peavad rakendused välismäluseadmelt andmete lugemiseks loa taotlema."\n\n"Mõned rakendused ei pruugi töötada enne, kui arendaja on need värskendanud." + "Kui USB-salvestusruum on kaitstud, peavad rakendused välismäluseadmelt andmete lugemiseks loa taotlema.\n\nMõned rakendused ei pruugi töötada enne, kui arendaja on need värskendanud." "Kaitse SD-kaarti" "Rakendused peavad SD-kaardi lugemiseks loa taotlema" "Kas kaitsta SD-kaarti?" - "Kui SD-kaart on kaitstud, peavad rakendused välismäluseadmelt andmete lugemiseks loa taotlema."\n\n"Mõned rakendused ei pruugi töötada enne, kui arendaja on need värskendanud." + "Kui SD-kaart on kaitstud, peavad rakendused välismäluseadmelt andmete lugemiseks loa taotlema.\n\nMõned rakendused ei pruugi töötada enne, kui arendaja on need värskendanud." + "Kohalik terminal" + "Luba kohalikku turvalist juurdepääsu pakkuv terminalirakendus" "Valige vidin" "Valige vidin" "Kas luua vidin ja lubada juurdepääs?" @@ -1340,11 +1346,11 @@ "Teenused" "Süsteem" "Suurendamisliigutused" - "Kui see funktsioon on sisse lülitatud, saate suurendada ja vähendada, kolmikpuudutades ekraani."\n\n"Suurendatult saab teha järgmist."\n
    • "Paanida: lohistage kahe või enama sõrmega üle ekraani."
    • \n
    • "Korrigeerida suumitaset: liigutage kahte või enamat sõrme kokku või lahku."
    \n\n"Saate ka ajutiselt suurendada sõrme all olevat kujutist, kolmikpuudutades ekraani ja hoides sõrme ekraanil. Selles suurendatud olekus saate sõrme ekraanil lohistada, et vaadata kuva erinevaid osi. Eelmisesse olekusse naasmiseks tõstke sõrm ekraanilt."\n\n"Märkus: kolmikpuudutamine suurendamiseks toimib kõikjal, v.a klaviatuur ja navigeerimisriba."
    + "Kui see funktsioon on sisse lülitatud, saate suurendada ja vähendada, kolmikpuudutades ekraani.\n\nSuurendatult saab teha järgmist.\n"
    • "Paanida: lohistage kahe või enama sõrmega üle ekraani."
    • \n
    • "Korrigeerida suumitaset: liigutage kahte või enamat sõrme kokku või lahku."
    \n\n"Saate ka ajutiselt suurendada sõrme all olevat kujutist, kolmikpuudutades ekraani ja hoides sõrme ekraanil. Selles suurendatud olekus saate sõrme ekraanil lohistada, et vaadata kuva erinevaid osi. Eelmisesse olekusse naasmiseks tõstke sõrm ekraanilt.\n\nMärkus: kolmikpuudutamine suurendamiseks toimib kõikjal, v.a klaviatuur ja navigeerimisriba."
    "Hõlbustuse otsetee" "Sees" "Välja" - "Kui see funktsioon sisse lülitatud, saate kiiresti lubada juurdepääsetavuse funktsiooni kahe sammuga:"\n\n"1. samm: vajutage ja hoidke all toitenuppu, kuni kuulete heli või tunnete vibratsiooni."\n\n"2. samm: puudutage ja hoidke kahe sõrmega, kuni kuulete helikinnitust."\n\n"Kui seadmel on mitu kasutajat, kasutage lukustusekraanil seda otseteed, et ajutiselt lubada juurdepääs seadme avamiseni." + "Kui see funktsioon sisse lülitatud, saate kiiresti lubada juurdepääsetavuse funktsiooni kahe sammuga:\n\n1. samm: vajutage ja hoidke all toitenuppu, kuni kuulete heli või tunnete vibratsiooni.\n\n2. samm: puudutage ja hoidke kahe sõrmega, kuni kuulete helikinnitust.\n\nKui seadmel on mitu kasutajat, kasutage lukustusekraanil seda otseteed, et ajutiselt lubada juurdepääs seadme avamiseni." "Suur tekst" "Ekraanisuurendus" "Ekraanisuurenduse värskendus" @@ -1366,6 +1372,16 @@ "TalkBack esitab tagasiside suulise kõnena, mis aitab pimedaid ja vaegnägijaid. Kas soovite selle Android Marketist tasuta installida?" "Kirjeldust ei ole sisestatud." "Seaded" + "Printimine" + "Prindiseaded" + "Teenused" + "Kas soovite kasutada teenust %1$s?" + "%1$s saab teie prinditavaid dokumente vastu võtta. Sellised dokumendid võivad sisaldada tundlikku teavet." + "Ühtki teenust pole installitud" + "Seaded" + "Printerite lisamine" + "Sees" + "Väljas" "Aku" "Mis on akut kasutanud" "Aku andmed pole saadaval." @@ -1405,8 +1421,10 @@ "WiFi töötab" "Tahvelarvuti" "Telefon" - "Saadetud andmed" - "Vastuvõetud andmed" + "Saadetud mobiilsideandmed" + "Vastuvõetud mobiilsideandmed" + "Saadetud WiFi-andmed" + "Vastuvõetud WiFi-andmed" "Heli" "Video" "Kestus" @@ -1460,6 +1478,7 @@ "Helikõrgus" "Mõjutab räägitava teksti tooni" "Keel" + "Keelt pole valitud" "Määrab räägitud teksti keelespetsiifilise hääle" "Kuulake näidet" "Esita lühike kõnesünteesi demo" @@ -1594,7 +1613,7 @@ "EAP-d ei toetata." "Seadistamise ajal ei saa seadistada EAP WiFi-ühendust. Saate seda teha pärast seadistamise lõppu. Selleks tehke valikud Seaded > Traadita ühendus ja võrgud." "Ühendamiseks võib kuluda mõni minut ..." - "Seadistamise jätkamiseks puudutage nuppu ""Edasi""."\n\n"Teise WiFi-võrguga ühenduse loomiseks puudutage valikut ""Tagasi""." + "Seadistamise jätkamiseks puudutage nuppu ""Edasi"".\n\nTeise WiFi-võrguga ühenduse loomiseks puudutage valikut ""Tagasi""." "Sünkroonimine lubatud" "Sünkroonimine keelatud" "Sünkroonimise viga" @@ -1622,7 +1641,7 @@ "Gmail" "Kalender" "Kontaktid" - "Tere tulemast Google Synci!"" "\n"See on Google\'i meetod andmete sünkroonimiseks, mis tagab teile kõikjal juurdepääsu kontaktisikutele, kokkusaamistele ja muule." + "Tere tulemast Google Synci!"" \nSee on Google\'i meetod andmete sünkroonimiseks, mis tagab teile kõikjal juurdepääsu kontaktisikutele, kokkusaamistele ja muule." "Rakenduse sünkroonimisseaded" "Andmed ja sünkroonimine" "Parooli muutmine" @@ -1676,8 +1695,7 @@ "GPU-ga joonistades kirjuta akende kuvad üle" "Kuva riistv. kiht. värsk." "Riistvara kihid vilguvad värskendamisel roheliselt" - "Kuva GPU ülejoonistamine" - "Parimast halvimani: sin., roh., helepunane, punane" + "Silu GPU ülejoonistust" "Keela HW ülekatted" "Kasuta alati GPU-d kuva koostamisel" "Luba OpenGL-i jälgimine" @@ -1738,11 +1756,11 @@ "Keelab mobiilsidevõrkude taustaandmed. Võimalusel kasutatakse muid võrke." "Rakend. taustandm. piiramiseks määrake mob. andmeside piirang." "Kas soovite taustandmeid piirata?" - "Funktsiooni tõttu võivad taustaandmetel põhinev rakendus töötamast lakata, kui saadaval on ainult mobiilsidevõrgud."\n\n"Andmekasutuse täpsemad juhtelemendid leiate rakenduse seadetest." + "Funktsiooni tõttu võivad taustaandmetel põhinev rakendus töötamast lakata, kui saadaval on ainult mobiilsidevõrgud.\n\nAndmekasutuse täpsemad juhtelemendid leiate rakenduse seadetest." "Taustandmete piiramine on võimalik vaid juhul, kui olete määranud mobiilse andmeside piirangu." "Kas lülitan andmete automaatse sünkroonimise sisse?" - "Veebis kontodel tehtud muudatused kopeeritakse automaatselt teie tahvelarvutisse."\n\n"Mõned kontod võivad ka kõik tahvelarvutis tehtud muudatused automaatselt veebi kopeerida. Google\'i konto töötab nii."\n\n"Igal kontol sünkroonitava teabe valimiseks avage jaotis Seaded > Kontod." - "Veebis kontodel tehtud muudatused kopeeritakse automaatselt teie telefoni."\n\n"Mõned kontod võivad ka kõik telefonis tehtud muudatused automaatselt veebi kopeerida. Google\'i konto töötab nii."\n\n"Igal kontol sünkroonitava teabe valimiseks avage jaotis Seaded > Kontod." + "Veebis kontodel tehtud muudatused kopeeritakse automaatselt teie tahvelarvutisse.\n\nMõned kontod võivad ka kõik tahvelarvutis tehtud muudatused automaatselt veebi kopeerida. Google\'i konto töötab nii.\n\nIgal kontol sünkroonitava teabe valimiseks avage jaotis Seaded > Kontod." + "Veebis kontodel tehtud muudatused kopeeritakse automaatselt teie telefoni.\n\nMõned kontod võivad ka kõik telefonis tehtud muudatused automaatselt veebi kopeerida. Google\'i konto töötab nii.\n\nIgal kontol sünkroonitava teabe valimiseks avage jaotis Seaded > Kontod." "Kas lülitan andmete automaatse sünkroonimise välja?" "See säästab andmemahu ja aku kasutust, kuid teil tuleb hiljutise teabe hankimiseks sünkroonida iga konto eraldi ja värskenduste ilmumisel ei kuvata teatist." "Kasutustsükli lähtestuskuupäev" @@ -1751,12 +1769,12 @@ "Andmekasutuse hoiatuse määramine" "Andmekasutuse piirangu määramine" "Andmekasutuse piiramine" - "Määratud limiidi saavutamisel keelatakse mobiilne andmesideühendus."\n\n"Kaaluge konservatiivse limiidi kasutamist, kuna andmekasutust mõõdab teie tahvelarvuti ja teenusepakkuja võib arvestada kasutust teisiti." - "Määratud limiidi saavutamisel keelatakse mobiilne andmesideühendus."\n\n"Kaaluge konservatiivse limiidi kasutamist, kuna andmekasutust mõõdab teie telefon ja teenusepakkuja võib arvestada kasutust teisiti." + "Määratud limiidi saavutamisel keelatakse mobiilne andmesideühendus.\n\nKaaluge konservatiivse limiidi kasutamist, kuna andmekasutust mõõdab teie tahvelarvuti ja teenusepakkuja võib arvestada kasutust teisiti." + "Määratud limiidi saavutamisel keelatakse mobiilne andmesideühendus.\n\nKaaluge konservatiivse limiidi kasutamist, kuna andmekasutust mõõdab teie telefon ja teenusepakkuja võib arvestada kasutust teisiti." "Kas soovite taustandmeid piirata?" "Kui piirate mobiilside taustandmeid, siis WiFi-võrgu puudumisel mõned rakendused ja teenused ei tööta." - "Kui piirate mobiilside taustandmeid, siis teatud rakendused ja teenused ei tööta, välja arvatud juhul, kui olete ühenduses WiFi-võrguga."\n\n"Seade mõjutab kõiki tahvelarvuti kasutajaid." - "Kui piirate mobiilside taustandmeid, siis teatud rakendused ja teenused ei tööta, välja arvatud juhul, kui olete ühenduses WiFi-võrguga."\n\n"Seade mõjutab kõiki telefoni kasutajaid." + "Kui piirate mobiilside taustandmeid, siis teatud rakendused ja teenused ei tööta, välja arvatud juhul, kui olete ühenduses WiFi-võrguga.\n\nSeade mõjutab kõiki tahvelarvuti kasutajaid." + "Kui piirate mobiilside taustandmeid, siis teatud rakendused ja teenused ei tööta, välja arvatud juhul, kui olete ühenduses WiFi-võrguga.\n\nSeade mõjutab kõiki telefoni kasutajaid." "^1"" ""^2"\n"hoiatus" "^1"" ""^2"\n"piir" "Eemaldatud rakendused" @@ -1843,8 +1861,8 @@ "Kasutaja" "Piiratud profiil" "Uue kasutaja lisamine" - "Võite jagada seadet teiste kasutajatega, luues uusi kasutajaid. Igal kasutajal on oma ruum, mida saab kohandada rakenduste, taustapildi ja muuga. Kasutajad saavad kohandada ka tahvelarvuti seadeid, näiteks WiFi-valikuid, mis mõjutavad kõiki kasutajaid."\n\n"Pärast uue kasutaja loomist peab kasutaja läbima seadistusprotsessi."\n\n"Iga kasutaja saab teiste kasutajate nimel võtta vastu värskendatud rakenduse lubasid." - "Pärast uue kasutaja loomist peab kasutaja läbima seadistusprotsessi."\n\n"Iga kasutaja saab teiste kasutajate nimel võtta vastu värskendatud rakenduste lubasid." + "Võite jagada seadet teiste kasutajatega, luues uusi kasutajaid. Igal kasutajal on oma ruum, mida saab kohandada rakenduste, taustapildi ja muuga. Kasutajad saavad kohandada ka tahvelarvuti seadeid, näiteks WiFi-valikuid, mis mõjutavad kõiki kasutajaid.\n\nPärast uue kasutaja loomist peab kasutaja läbima seadistusprotsessi.\n\nIga kasutaja saab teiste kasutajate nimel võtta vastu värskendatud rakenduse lubasid." + "Pärast uue kasutaja loomist peab kasutaja läbima seadistusprotsessi.\n\nIga kasutaja saab teiste kasutajate nimel võtta vastu värskendatud rakenduste lubasid." "Kas seadistada nüüd kasutaja?" "Veenduge, et isik saab tahvelarvutit kasutada ja oma ruumi seadistada" "Kas soovite kohe profiili seadistada?" @@ -1875,6 +1893,9 @@ "Seade mõjutab kõiki telefoni kasutajaid." "Muuda keelt" "Fondi suuruse muutmine" + "Piirangud" + "Eemalda piirangud" + "Muuda PIN-koodi" "Kuva teatised" "Abi" "Sisu konto" diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml index 76de88b25f2..b9656b0da15 100644 --- a/res/values-fa/arrays.xml +++ b/res/values-fa/arrays.xml @@ -191,7 +191,7 @@
    "DHCP" - "آمار" + "ثابت" "هیچکدام" @@ -233,7 +233,8 @@ "مکان" "شخصی" "پیام‌رسانی" - "دستگاه" + "رسانه" + "دستگاه" "موقعیت مکانی غیردقیق" @@ -246,7 +247,7 @@ "اصلاح گزارش تماس" "خواندن تقویم" "اصلاح تقویم" - "جستجوی شبکه wi-fi" + "جستجوی شبکه Wi‑Fi" "اعلان" "جستجوی شبکه سلولی" "تماس تلفنی" @@ -267,6 +268,17 @@ "پخش صدا" "خواندن کلیپ بورد" "اصلاح کلیپ‌بورد" + "دکمه‌های رسانه‌ای" + "فوکوس صدا" + "میزان کنترل" + "میزان صدا" + "حجم حلقه" + "میزان صدای رسانه" + "میزان صدای زنگ هشدار" + "میزان صدای اعلان" + "میزان صدای بلوتوث" + "بیدار باش" + "کنترل موقعیت مکانی" "موقعیت مکانی" @@ -300,12 +312,33 @@ "پخش صدا" "خواندن کلیپ بورد" "اصلاح کردن کلیپ بورد" + "دکمه‌های رسانه‌" + "فوکوس صدا" + "میزان صدای اصلی" + "میزان صدای مکالمه" + "میزان صدای زنگ" + "میزان صدای رسانه" + "میزان صدای زنگ هشدار" + "میزان صدای اعلان" + "میزان صدای بلوتوث" + "بیدار باش" + "موقعیت مکانی" "کوتاه" "متوسط" "طولانی" + + "Dalvik" + "ART" + "‫ART (اشکال‌زدایی)‏" + + + "استفاده از Dalvik" + "استفاده از ART" + "استفاده از نسخه اشکال‌زدایی ART" + "هرگز بررسی نشود" "فقط بررسی محتوای DRM" @@ -367,6 +400,11 @@ "بر روی صفحه نمایش بصورت خط" "در adb shell dumpsys gfxinfo" + + "غیرفعال" + "نمایش نواحی بازنویسی" + "نمایش شمارشگر میزان بازنویسی" + "حد استاندارد" "بدون پردازش در پس‌زمینه" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 163e562ca80..9ffbc1500f1 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -275,8 +275,8 @@ "شما اتصال داده خود را از دست داده‌اید زیرا رومینگ داده را در شبکه اصلی خود خاموش کرده‌اید." "روشن کنید" "هنگام انجام رومینگ داده، ممکن است هزینه‌های رومینگ قابل توجهی را متحمل شوید!" - "وقتی به رومینگ داده اجازه می‌دهید، ممکن است رومینگ، هزینه‌های بسیار زیادی برای شما در پی داشته باشد!"\n\n"این تنظیم روی همه کاربران موجود در این رایانه لوحی تأثیر می‌گذارد." - "وقتی به رومینگ داده اجازه می‌دهید، ممکن است هزینه‌های بسیار زیادی برای شما در پی داشته باشد!"\n\n"این تنظیم روی همه کاربران موجود در این تلفن تأثیر می‌گذارد." + "وقتی به رومینگ داده اجازه می‌دهید، ممکن است رومینگ، هزینه‌های بسیار زیادی برای شما در پی داشته باشد!\n\nاین تنظیم روی همه کاربران موجود در این رایانه لوحی تأثیر می‌گذارد." + "وقتی به رومینگ داده اجازه می‌دهید، ممکن است هزینه‌های بسیار زیادی برای شما در پی داشته باشد!\n\nاین تنظیم روی همه کاربران موجود در این تلفن تأثیر می‌گذارد." "رومینگ داده مجاز است؟" "انتخاب اپراتور" "انتخاب یک اپراتور شبکه" @@ -322,8 +322,8 @@ "هر بار که رایانهٔ لوحی خود را روشن می‌کنید، برای رمزگشایی به یک پین عددی یا رمز ورود نیاز دارید" "هر بار که تلفن خود را روشن می‌کنید، برای رمزگشایی به یک پین عددی یا رمز ورود نیاز دارید" "رمز گذاری شده" - "شما می‌توانید حساب‌ها، تنظیمات، برنامه‌های دانلود شده و داده‌های آن‌ها، رسانه و فایل‌های دیگر خود را رمزگذاری کنید. هنگامی که رایانهٔ لوحی خود را رمزگذاری کردید، هر بار که آن را روشن می‌کنید باید یک پین عددی یا یک گذرواژه را وارد کنید تا رمزگشایی شود. به هیچ وجه نمی‌توانید رمزگذاری رایانهٔ لوحی خود را لغو کنید مگر اینکه به تنظیمات کارخانه بازنشانی کنید که این کار هم تمام داده‌های شما را حذف می‌کند."\n\n"عملیات رمزگذاری یک ساعت یا بیشتر طول می‌کشد. باید این کار را زمانی آغاز کنید که باتری دارای شارژ کامل باشد و رایانهٔ لوحی باید تا پایان کار رمزگذاری به برق وصل باشد. اگر در روند رمزگذاری تداخلی به وجود بیاورید، تمام یا بعضی از داده‌های خود را از دست خواهید داد." - "شما می‌توانید حساب‌ها، تنظیمات، برنامه‌های دانلود شده و داده‌های آن‌ها، رسانه و فایل‌های دیگر خود را رمزگذاری کنید. هنگامی که گوشی خود را رمزگذاری کردید، هر بار که آن را روشن می‌کنید باید یک پین عددی یا یک گذرواژه را وارد کنید تا رمزگشایی شود. به هیچ وجه نمی‌توانید رمزگذاری گوشی خود را لغو کنید مگر اینکه به تنظیمات کارخانه بازنشانی کنید که این کار هم تمام داده‌های شما را حذف می‌کند."\n\n"عملیات رمزگذاری یک ساعت یا بیشتر طول می‌کشد. باید این کار را زمانی آغاز کنید که باتری دارای شارژ کامل باشد و گوشی باید تا پایان کار رمزگذاری به برق وصل باشد. اگر در روند رمزگذاری تداخلی به وجود بیاورید، تمام یا بعضی از داده‌های خود را از دست خواهید داد." + "شما می‌توانید حساب‌ها، تنظیمات، برنامه‌های دانلود شده و داده‌های آن‌ها، رسانه و فایل‌های دیگر خود را رمزگذاری کنید. هنگامی که رایانهٔ لوحی خود را رمزگذاری کردید، هر بار که آن را روشن می‌کنید باید یک پین عددی یا یک گذرواژه را وارد کنید تا رمزگشایی شود. به هیچ وجه نمی‌توانید رمزگذاری رایانهٔ لوحی خود را لغو کنید مگر اینکه به تنظیمات کارخانه بازنشانی کنید که این کار هم تمام داده‌های شما را حذف می‌کند.\n\nعملیات رمزگذاری یک ساعت یا بیشتر طول می‌کشد. باید این کار را زمانی آغاز کنید که باتری دارای شارژ کامل باشد و رایانهٔ لوحی باید تا پایان کار رمزگذاری به برق وصل باشد. اگر در روند رمزگذاری تداخلی به وجود بیاورید، تمام یا بعضی از داده‌های خود را از دست خواهید داد." + "شما می‌توانید حساب‌ها، تنظیمات، برنامه‌های دانلود شده و داده‌های آن‌ها، رسانه و فایل‌های دیگر خود را رمزگذاری کنید. هنگامی که گوشی خود را رمزگذاری کردید، هر بار که آن را روشن می‌کنید باید یک پین عددی یا یک گذرواژه را وارد کنید تا رمزگشایی شود. به هیچ وجه نمی‌توانید رمزگذاری گوشی خود را لغو کنید مگر اینکه به تنظیمات کارخانه بازنشانی کنید که این کار هم تمام داده‌های شما را حذف می‌کند.\n\nعملیات رمزگذاری یک ساعت یا بیشتر طول می‌کشد. باید این کار را زمانی آغاز کنید که باتری دارای شارژ کامل باشد و گوشی باید تا پایان کار رمزگذاری به برق وصل باشد. اگر در روند رمزگذاری تداخلی به وجود بیاورید، تمام یا بعضی از داده‌های خود را از دست خواهید داد." "رمزگذاری رایانهٔ لوحی شخصی" "رمزگذاری گوشی" "باتری خود را شارژ کرده و دوباره امتحان کنید." @@ -339,8 +339,8 @@ "پس از ^1 ثانیه دوباره امتحان کنید." "گذرواژهٔ خود را تایپ کنید" "رمزگذاری ناموفق" - "رمزگذاری متوقف شد و امکان تکمیل کردن آن وجود ندارد. در نتیجه، داده‌های موجود در رایانهٔ لوحی شما دیگر قابل دسترسی نیستند. "\n\n"برای ادامه استفاده از رایانهٔ لوحی خود، باید تنظیمات کارخانه را بازنشانی کنید. با تنظیم کردن رایانهٔ لوحی پس از بازنشانی، این فرصت را خواهید داشت تا هرگونه داده‌ای را که از آن در حساب Google نسخهٔ پشتیبان تهیه شده بازیابی کنید." - "رمزگذاری متوقف شد و امکان تکمیل آن وجود ندارد. در نتیجه، داده‌های موجود در تلفن شما دیگر قابل دسترسی نیستند. "\n\n"برای ادامه استفاده از تلفن خود، باید تنظیمات کارخانه را بازنشانی کنید. با راه‌اندازی تلفن پس از بازنشانی، این فرصت را خواهید داشت تا هرگونه داده‌ای را که از آن در حساب Google نسخهٔ پشتیبان تهیه شده بازیابی کنید." + "رمزگذاری متوقف شد و امکان تکمیل کردن آن وجود ندارد. در نتیجه، داده‌های موجود در رایانهٔ لوحی شما دیگر قابل دسترسی نیستند. \n\nبرای ادامه استفاده از رایانهٔ لوحی خود، باید تنظیمات کارخانه را بازنشانی کنید. با تنظیم کردن رایانهٔ لوحی پس از بازنشانی، این فرصت را خواهید داشت تا هرگونه داده‌ای را که از آن در حساب Google نسخهٔ پشتیبان تهیه شده بازیابی کنید." + "رمزگذاری متوقف شد و امکان تکمیل آن وجود ندارد. در نتیجه، داده‌های موجود در تلفن شما دیگر قابل دسترسی نیستند. \n\nبرای ادامه استفاده از تلفن خود، باید تنظیمات کارخانه را بازنشانی کنید. با راه‌اندازی تلفن پس از بازنشانی، این فرصت را خواهید داشت تا هرگونه داده‌ای را که از آن در حساب Google نسخهٔ پشتیبان تهیه شده بازیابی کنید." "تغییر روش ورودی" "قفل صفحهٔ نمایش را انتخاب کنید" "قفل پشتیبان را انتخاب کنید" @@ -514,6 +514,7 @@ "در حال اتصال" "متصل" "در دسترس" + "درحال استفاده" "تنظیمات نمایش" "اتصال قطع شود؟" "این کار اتصال شما را با این دستگاه قطع می‌کند:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "خاموش" "در دسترس نیست زیرا NFC خاموش است" "Android Beam" - "در صورت روشن بودن این ویژگی، می‌توانید با نگهداشتن دستگاه‌ها نزدیک به یکدیگر، محتوای برنامهٔ کاربردی را به دستگاه دارای قابلیت NFC دیگری مخابره کنید. به‌عنوان مثال، می‌توانید صفحات مرورگر، ویدئوهای YouTube، تماس‌های افراد و موارد دیگر را مخابره کنید."\n\n" کافیست دستگاه‌ها را نزدیک هم بگذارید (معمولاً پشت به پشت) و سپس صفحهٔ نمایش خود را لمس کنید. برنامه‌ کاربردی آنچه را مخابره می‌شود تعیین می‌کند." + "در صورت روشن بودن این ویژگی، می‌توانید با نگهداشتن دستگاه‌ها نزدیک به یکدیگر، محتوای برنامهٔ کاربردی را به دستگاه دارای قابلیت NFC دیگری مخابره کنید. به‌عنوان مثال، می‌توانید صفحات مرورگر، ویدئوهای YouTube، تماس‌های افراد و موارد دیگر را مخابره کنید.\n\n کافیست دستگاه‌ها را نزدیک هم بگذارید (معمولاً پشت به پشت) و سپس صفحهٔ نمایش خود را لمس کنید. برنامه‌ کاربردی آنچه را مخابره می‌شود تعیین می‌کند." "کاوش سرویس شبکه" "به برنامه‎های دستگاه‌های دیگر اجازه داده شود برنامه‎های این دستگاه را ببینند" "Wi-Fi" @@ -620,7 +621,7 @@ "ایمن شده با %1$s" "، ایمن شده با %1$s" "هیچکدام" - "برای بهبود دقت موقعیت مکانی و مقاصد دیگر، %1$s می‌خواهد اسکن کردن شبکه را فعال کند، حتی هنگامی که Wi-Fi خاموش است."\n\n"این مورد را برای همه برنامه‌هایی که می‌خواهند اسکن کنند مجاز می‌کنید؟" + "برای بهبود دقت موقعیت مکانی و مقاصد دیگر، %1$s می‌خواهد اسکن کردن شبکه را فعال کند، حتی هنگامی که Wi-Fi خاموش است.\n\nاین مورد را برای همه برنامه‌هایی که می‌خواهند اسکن کنند مجاز می‌کنید؟" "مجاز" "رد کردن" "اتصال" @@ -632,8 +633,8 @@ "لغو" "با این وجود، رد می‌شوید" "رد نمی‌شوید" - "اخطار: ممکن است هزینه‌ حامل مخابراتی اضافی از شما دریافت شود."\n\n"راه‌اندازی رایانه لوحی ممکن است به فعالیت شبکه قابل‌ توجهی نیاز داشته باشد." - "اخطار: ممکن است هزینه‌ حامل مخابراتی اضافی از شما دریافت شود."\n\n"راه‌اندازی تلفن ممکن است به فعالیت شبکه قابل‌ توجهی نیاز داشته باشد." + "اخطار: ممکن است هزینه‌ حامل مخابراتی اضافی از شما دریافت شود.\n\nراه‌اندازی رایانه لوحی ممکن است به فعالیت شبکه قابل‌ توجهی نیاز داشته باشد." + "اخطار: ممکن است هزینه‌ حامل مخابراتی اضافی از شما دریافت شود.\n\nراه‌اندازی تلفن ممکن است به فعالیت شبکه قابل‌ توجهی نیاز داشته باشد." "هشدار: تا زمانی که به اینترنت متصل نشوید، رایانه لوحی نمی‌تواند تشخیص دهد که نرم‌افزار شما به‌روز است." "هشدار: تا زمانی که به اینترنت متصل نشوید، تلفن نمی‌تواند تشخیص دهد که نرم‌افزار شما به‌روز است." "رایانه لوحی قادر به اتصال به این شبکه Wi-Fi نیست." @@ -773,9 +774,9 @@ "پین سیم کارت" "پین اشتباه" "پین‌ها با یکدیگر مطابقت ندارند" - "نمی‌توانید پین را تغییر دهید."\n"ممکن است پین اشتباه باشد." + "نمی‌توانید پین را تغییر دهید.\nممکن است پین اشتباه باشد." "پین سیم کارت با موفقیت تغییر کرد" - "نمی‌توان وضعیت قفل سیم کارت را تغییر داد."\n"احتمالاً پین نادرست است." + "نمی‌توان وضعیت قفل سیم کارت را تغییر داد.\nاحتمالاً پین نادرست است." "تأیید" "لغو" "وضعیت رایانهٔ لوحی" @@ -918,9 +919,9 @@ "بازنشانی به داده‌های کارخانه" "پاک کردن تمام داده‌های موجود در رایانهٔ لوحی" "پاک کردن تمام داده‌های موجود در گوشی" - "با این کار همه داده‌های ""حافظهٔ داخلی"" رایانهٔ لوحی شما پاک می‌شود، از جمله:"\n\n
  • "حساب Google شما"
  • \n
  • "داده‌ها و تنظیمات برنامه و سیستم"
  • \n
  • "برنامه‌های دانلود شده"
    - "با این کار همه داده‌های ""حافظهٔ داخلی"" گوشی شما پاک می‌شود، از جمله:"\n\n
  • "حساب Google شما"
  • \n
  • "داده‌های برنامه و سیستم و تنظیمات"
  • \n
  • "برنامه‌های دانلود شده"
  • - \n\n"شما در حال حاضر به حساب‌های زیر وارد شده‌اید:"\n + "با این کار همه داده‌های ""حافظهٔ داخلی"" رایانهٔ لوحی شما پاک می‌شود، از جمله:\n\n"
  • "حساب Google شما"
  • \n
  • "داده‌ها و تنظیمات برنامه و سیستم"
  • \n
  • "برنامه‌های دانلود شده"
    + "با این کار همه داده‌های ""حافظهٔ داخلی"" گوشی شما پاک می‌شود، از جمله:\n\n"
  • "حساب Google شما"
  • \n
  • "داده‌های برنامه و سیستم و تنظیمات"
  • \n
  • "برنامه‌های دانلود شده"
  • + \n\n"شما در حال حاضر به حساب‌های زیر وارد شده‌اید:\n"
  • "موسیقی"
  • \n
  • "عکس ها"
  • \n
  • "سایر اطلاعات کاربر"
  • \n\n"برای پاک کردن موسیقی، عکس‌ها و سایر داده‌های کاربر، ""حافظهٔ USB"" باید پاک شود." \n\n"برای پاک کردن موسیقی، عکس‌ها و سایر داده‌های کاربر، ""کارت SD"" باید پاک شود." @@ -1105,7 +1106,7 @@ "فرآیندهای ذخیره شده در حافظهٔ پنهان" "بازنشانی تنظیمات برگزیده برنامه" "تنظیمات برگزیده برنامه بازنشانی شوند؟" - "این کار همه تنظیمات برگزیده این موارد را بازنشانی می‌کند:"\n\n" "
  • "برنامه‌های غیرفعال شده"
  • \n" "
  • "اعلان‌های برنامه غیرفعال شده"
  • \n" "
  • "برنامه‌های پیش‌فرض برای عملیات"
  • \n" "
  • "محدودیت‌های داده پس‌زمینه برای برنامه‌ها"
  • \n\n" داده برنامه را از دست نمی‌دهید."
    + "این کار همه تنظیمات برگزیده این موارد را بازنشانی می‌کند:\n\n "
  • "برنامه‌های غیرفعال شده"
  • \n" "
  • "اعلان‌های برنامه غیرفعال شده"
  • \n" "
  • "برنامه‌های پیش‌فرض برای عملیات"
  • \n" "
  • "محدودیت‌های داده پس‌زمینه برای برنامه‌ها"
  • \n\n" داده برنامه را از دست نمی‌دهید."
    "بازنشانی برنامه‌ها" "مدیریت فضا" "فیلتر" @@ -1240,9 +1241,7 @@ "برای تغییر، Control-کلید فاصله را فشار هید" "پیش‌فرض" "طرح‌بندی‌های صفحه‌کلید" - "فرهنگ لغت کاربر" - "فرهنگ لغت شخصی" - "فرهنگ‌های لغت شخصی" + "فرهنگ لغت شخصی" "افزودن" "افزودن به فرهنگ لغت" @@ -1303,6 +1302,11 @@ "گزینه‌ای در منوی نیرو برای گرفتن گزارش اشکال اضافه شود" "بیدار ماندن" "صفحه هرگز در حین شارژ شدن به حالت خواب نمی‌رود" + "فعال کردن گزارش تجسس Bluetooth HCI" + "ذخیره تمامی بسته‌های HCI بلوتوث در یک فایل" + "انتخاب زمان اجرا" + "انتخاب زمان اجرا" + "برای تغییر زمان اجرا از %1$s به %2$s دوباره راه‌اندازی شود؟" "مکان‌های کاذب مجاز هستند" "مکان‌های کاذب مجاز هستند" "رفع عیب USB انجام شود؟" @@ -1315,11 +1319,13 @@ "حفاظت از حافظهٔ USB" "برنامه باید برای خواندن حافظهٔ USB اجازه بگیرد" "حافظهٔ USB حفاظت شود؟" - "وقتی حافظهٔ USB محافظت شده است٬ برنامه‌ها باید اجازه بگیرند تا داده‌های حافظه خارجی را بخوانند."\n\n"برخی از برنامه‌ها ممکن است تا توسط برنامه‌نویسان خود به‌روزرسانی نشوند کار نکنند." + "وقتی حافظهٔ USB محافظت شده است٬ برنامه‌ها باید اجازه بگیرند تا داده‌های حافظه خارجی را بخوانند.\n\nبرخی از برنامه‌ها ممکن است تا توسط برنامه‌نویسان خود به‌روزرسانی نشوند کار نکنند." "حفاظت از کارت SD" "برنامه باید برای خواندن کارت SD اجازه بگیرد" "کارت SD حفاظت شود؟" - "وقتی کارت SD محافظت شده است٬ برنامه‌ها باید اجازه بگیرند تا داده‌های حافظه خارجی را بخوانند."\n\n"برخی از برنامه‌ها ممکن است تا توسط برنامه‌نویسان خود به‌روزرسانی نشوند کار نکنند." + "وقتی کارت SD محافظت شده است٬ برنامه‌ها باید اجازه بگیرند تا داده‌های حافظه خارجی را بخوانند.\n\nبرخی از برنامه‌ها ممکن است تا توسط برنامه‌نویسان خود به‌روزرسانی نشوند کار نکنند." + "ترمینال محلی" + "فعال کردن ترمینال برنامه‌ کاربردی که دسترسی به برنامه محلی را پیشنهاد می‌کند" "انتخاب اسبابک" "انتخاب ابزارک" "آیا مایل به ایجاد ابزارک و دادن اجازهٔ دسترسی هستید؟" @@ -1340,11 +1346,11 @@ "سرویس‌ها" "سیستم" "حرکات بزرگنمایی" - "وقتی این ویژگی فعال است، شما می‌توانید با سه ضربه روی صفحه بزرگنمایی یا کوچکنمایی کنید."\n\n"هنگام بزرگنمایی می‌توانید:"\n
    • "حرکت کنید: دو یا چند انگشت خود را روی صفحه بکشید."
    • \n
    • "تنظیم سطح بزرگنمایی: دو یا چند انگشت خود را به هم نزدیک کنید یا از هم دور کنید."
    \n\n"همچنین می‌توانید به صورت موقت آنچه را که در زیر انگشتان شما قرار دارد با سه بار ضربه روی صفحه و نگهداشتن آن بزرگ کنید. در این حالت بزرگنمایی شده، می‌توانید انگشت خود را برای کاوش قسمت‌های مختلف صفحه بکشید. برای بازگشت به حالت قبلی خود، انگشت خود را بردارید."\n\n"توجه: سه بار ضربه برای بزرگنمایی همه جا به غیر از صفحه کلید و نوار پیمایش کار می‌کند."
    + "وقتی این ویژگی فعال است، شما می‌توانید با سه ضربه روی صفحه بزرگنمایی یا کوچکنمایی کنید.\n\nهنگام بزرگنمایی می‌توانید:\n"
    • "حرکت کنید: دو یا چند انگشت خود را روی صفحه بکشید."
    • \n
    • "تنظیم سطح بزرگنمایی: دو یا چند انگشت خود را به هم نزدیک کنید یا از هم دور کنید."
    \n\n"همچنین می‌توانید به صورت موقت آنچه را که در زیر انگشتان شما قرار دارد با سه بار ضربه روی صفحه و نگهداشتن آن بزرگ کنید. در این حالت بزرگنمایی شده، می‌توانید انگشت خود را برای کاوش قسمت‌های مختلف صفحه بکشید. برای بازگشت به حالت قبلی خود، انگشت خود را بردارید.\n\nتوجه: سه بار ضربه برای بزرگنمایی همه جا به غیر از صفحه کلید و نوار پیمایش کار می‌کند."
    "میانبرهای قابلیت دسترسی" "روشن" "خاموش" - "وقتی این ویژگی روشن است، شما می‌توانید به سرعت ویژگی‌های قابلیت دسترسی را در دو مرحله فعال کنید:"\n\n"مرحله ۱: دکمه روشن/خاموش را فشار داده و نگهدارید تا صدایی را بشنوید یا لرزشی را احساس کنید."\n\n"مرحله ۲: با دو انگشت لمس کرده و فشار دهید تا تأیید صوتی را بشنوید."\n\n"در صورتی که دستگاه چند کاربر دارد، استفاده از این میانبر در صفحه قفل، به طور موقت قابلیت دسترسی را تا زمانی که قفل دستگاه باز شود فعال می‌کند." + "وقتی این ویژگی روشن است، شما می‌توانید به سرعت ویژگی‌های قابلیت دسترسی را در دو مرحله فعال کنید:\n\nمرحله ۱: دکمه روشن/خاموش را فشار داده و نگهدارید تا صدایی را بشنوید یا لرزشی را احساس کنید.\n\nمرحله ۲: با دو انگشت لمس کرده و فشار دهید تا تأیید صوتی را بشنوید.\n\nدر صورتی که دستگاه چند کاربر دارد، استفاده از این میانبر در صفحه قفل، به طور موقت قابلیت دسترسی را تا زمانی که قفل دستگاه باز شود فعال می‌کند." "نوشتار بزرگ" "بزرگنمایی صفحه" "به‌روزرسانی خودکار بزرگنمایی صفحه" @@ -1366,6 +1372,16 @@ "Talkback یک بازخورد شفاهی برای کمک به کاربران نابینا و کم‌بینا ارائه می‌دهد. آیا می‌خواهید آن را به صورت رایگان از Android Market نصب کنید؟" "توضیحی ارائه نشده است." "تنظیمات" + "چاپ کردن" + "تنظیمات چاپ" + "خدمات" + "از %1$s استفاده شود؟" + "%1$s می‌تواند اسنادی را که چاپ می‌کنید دریافت کند. این اسناد ممکن است حاوی اطلاعات مهمی باشند." + "سرویسی نصب نشده است" + "تنظیمات" + "افزودن چاپگرها" + "روشن" + "خاموش" "باتری" "چه چیزی باتری را مصرف کرده است" "اطلاعات مصرف باتری موجود نیست." @@ -1405,8 +1421,10 @@ "Wi-Fi در حال اجرا" "رایانهٔ لوحی" "تلفن" - "داده ارسال شده" - "داده دریافت شده" + "داده‌های ارسالی تلفن همراه" + "داده‌های دریافتی تلفن همراه" + "‫داده‌های ارسالی Wi-Fi" + "‫داده‌های دریافتی Wi-Fi" "صوتی" "ویدئو" "زمان روشن" @@ -1460,6 +1478,7 @@ "زیر و بمی صدا" "بر صدای متن گفته شده تأثیر می‌گذارد" "زبان" + "زبان انتخاب نشده است" "صدای خاص یک زبان را برای متن گفتاری تنظیم می‌کند" "به نمونه‌ای گوش کنید" "نمایش کوتاهی از صدای ترکیبی پخش شود" @@ -1594,7 +1613,7 @@ "EAP پشتیبانی نمی‌شود." "در حین مراحل تنظیم نمی‌توانید یک اتصال EAP Wi-Fi پیکربندی کنید. پس از تنظیم، این کار را می‌توانید از طریق تنظیمات > بی‌سیم و شبکه‌ها انجام دهید." "اتصال چند دقیقه طول می‌کشد..." - "برای ادامه تنظیم ""بعدی"" را لمس نمایید."\n\n"برای اتصال به یک شبکه Wi-Fi دیگر ""بازگشت"" را لمس کنید." + "برای ادامه تنظیم ""بعدی"" را لمس نمایید.\n\nبرای اتصال به یک شبکه Wi-Fi دیگر ""بازگشت"" را لمس کنید." "همگام‌سازی فعال شد" "همگام‌سازی غیر فعال شد" "خطای همگام‌سازی." @@ -1676,8 +1695,7 @@ "هنگام طراحی با GPU٬ نماها در داخل پنجره‌ها فلش شوند" "نمایش به‌روزرسانی‌های لایه‌های سخت‌افزار" "وقتی لایه‌های سخت‌افزاری به‌روزرسانی‌ می‌شوند، به رنگ سبز درآیند" - "نمایش بازنویسی GPU" - "از بهترین تا بدترین: آبی، سبز، قرمز روشن، قرمز" + "اشکال‌زدایی بازنویسی GPU" "غیر فعال کردن پوشش HW" "همیشه از GPU در ترکیب صفحه استفاده شود" "فعال کردن ردیابی‌های OpenGL" @@ -1738,11 +1756,11 @@ "داده‌های پس‌زمینه را در شبکه‌های تلفن همراه غیرفعال کنید. در صورت وجود از شبکه‌های غیرتلفن‌ همراه استفاده می‌شود." "برای محدود کردن داده‌های پس‌زمینه برای این برنامه، ابتدا یک محدودیت داده تلفن همراه را تنظیم کنید." "محدود کردن داده‌های پس‌زمینه؟" - "این ویژگی سبب می‌شود زمانی که فقط شبکه‌های تلفن همراه در دسترس هستند، عملکرد برنامه‌ای که به داده پس‌زمینه وابسته است متوقف شود. "\n\n"در تنظیمات موجود در برنامه می‌توانید کنترل‌های مناسب‌تری را برای استفاده داده به‌دست بیاورید." + "این ویژگی سبب می‌شود زمانی که فقط شبکه‌های تلفن همراه در دسترس هستند، عملکرد برنامه‌ای که به داده پس‌زمینه وابسته است متوقف شود. \n\nدر تنظیمات موجود در برنامه می‌توانید کنترل‌های مناسب‌تری را برای استفاده داده به‌دست بیاورید." "محدود کردن داده‌های پس‌زمینه تنها زمانی امکان‌پذیر است یک محدوده‌ای برای داده‌های تلفن همراه تنظیم کنید." "همگام‌سازی خودکار داده فعال شود؟" - "هرگونه تغییراتی که در حساب‌های خود در وب انجام می‌دهید به طور خودکار در رایانهٔ لوحی شما کپی می‌شود."\n\n"بعضی از حساب‌ها نیز ممکن است به طور خودکار تغییراتی را که در رایانهٔ لوحی خود انجام می‌دهید در وب کپی کنند. حساب Google به این صورت کار می‌کند."\n\n"برای انتخاب اینکه کدام نوع اطلاعات با هر یک از حساب‌ها همگام‌سازی شود، به تنظیمات > حساب‌ها بروید." - "هرگونه تغییراتی که در حساب‌های خود در وب انجام می‌دهید به طور خودکار در تلفن شما کپی می‌شود."\n\n"بعضی از حساب‌ها نیز ممکن است به طور خودکار تغییراتی را که در تلفن همراه خود انجام می‌دهید در وب کپی کنند. حساب Google به این صورت کار می‌کند."\n\n"برای انتخاب اینکه کدام نوع اطلاعات با هر یک از حساب‌ها همگام‌سازی شود، به تنظیمات > حساب‌ها بروید." + "هرگونه تغییراتی که در حساب‌های خود در وب انجام می‌دهید به طور خودکار در رایانهٔ لوحی شما کپی می‌شود.\n\nبعضی از حساب‌ها نیز ممکن است به طور خودکار تغییراتی را که در رایانهٔ لوحی خود انجام می‌دهید در وب کپی کنند. حساب Google به این صورت کار می‌کند.\n\nبرای انتخاب اینکه کدام نوع اطلاعات با هر یک از حساب‌ها همگام‌سازی شود، به تنظیمات > حساب‌ها بروید." + "هرگونه تغییراتی که در حساب‌های خود در وب انجام می‌دهید به طور خودکار در تلفن شما کپی می‌شود.\n\nبعضی از حساب‌ها نیز ممکن است به طور خودکار تغییراتی را که در تلفن همراه خود انجام می‌دهید در وب کپی کنند. حساب Google به این صورت کار می‌کند.\n\nبرای انتخاب اینکه کدام نوع اطلاعات با هر یک از حساب‌ها همگام‌سازی شود، به تنظیمات > حساب‌ها بروید." "همگام‌سازی خودکار داده غیرفعال شود؟" "این گزینه داده‌ها واستفاده از باتری را محافظت می‌کند، اما برای جمع‌آوری اطلاعات اخیر باید هر حسابی را به صورت دستی همگام‌سازی کنید. و هنگامی که به‌روزرسانی روی می‌دهد اعلان‌ها را دریافت نخواهید کرد." "تاریخ تنظیم مجدد چرخهٔ استفاده" @@ -1751,12 +1769,12 @@ "تنظیم هشدار میزان استفاده از داده" "تنظیم محدوده استفاده از داده" "محدود کردن استفاده از داده" - "زمانی که مقدار تعیین شده استفاده از داده برای شما به پایان برسد، اتصال داده‌ تلفن همراه شما غیرفعال می‌شود."\n\n"از آنجا که مقدار استفاده از داده، توسط رایانهٔ لوحی شما محاسبه شده است و شرکت مخابراتی شما ممکن است استفاده از داده را به صورت دیگری محاسبه کند، لطفاً سقف محتاطانه‌تری را در نظر بگیرید." - "زمانی که مقدار تعیین شده استفاده از داده برای شما به پایان برسد، اتصال داده‌ شما تلفن همراه شما غیرفعال می‌شود."\n\n"از آنجا که مقدار استفاده از داده، توسط گوشی شما محاسبه شده است و شرکت مخابراتی شما ممکن است استفاده از داده را به صورت دیگری محاسبه کند، لطفاً سقف محتاطانه‌تری را در نظر بگیرید." + "زمانی که مقدار تعیین شده استفاده از داده برای شما به پایان برسد، اتصال داده‌ تلفن همراه شما غیرفعال می‌شود.\n\nاز آنجا که مقدار استفاده از داده، توسط رایانهٔ لوحی شما محاسبه شده است و شرکت مخابراتی شما ممکن است استفاده از داده را به صورت دیگری محاسبه کند، لطفاً سقف محتاطانه‌تری را در نظر بگیرید." + "زمانی که مقدار تعیین شده استفاده از داده برای شما به پایان برسد، اتصال داده‌ شما تلفن همراه شما غیرفعال می‌شود.\n\nاز آنجا که مقدار استفاده از داده، توسط گوشی شما محاسبه شده است و شرکت مخابراتی شما ممکن است استفاده از داده را به صورت دیگری محاسبه کند، لطفاً سقف محتاطانه‌تری را در نظر بگیرید." "محدود کردن داده‌های پس‌زمینه؟" "اگر داده‌های پس‌زمینه تلفن همراه را محدود کنید، برخی از برنامه‌ها و خدمات تنها در صورتی کار می‌کنند که به یک شبکه Wi-Fi متصل شوید." - "در صورت محدود کردن داده‌های پس‌زمینه تلفن همراه، برخی از برنامه‌ها و خدمات تنها در صورتی کار می‌کنند که به یک شبکه Wi-Fi متصل شوید."\n\n" این تنظیم درمورد همه کاربران موجود در این رایانه لوحی اعمال می‌شود." - "اگر داده‌های پس‌زمینه تلفن همراه را محدود کنید، برخی از برنامه‌ها و خدمات تنها در صورتی کار می‌کنند که به یک شبکه Wi-Fi متصل شوید."\n\n"این تنظیم درمورد همه کاربران موجود در این تلفن اعمال می‌شود." + "در صورت محدود کردن داده‌های پس‌زمینه تلفن همراه، برخی از برنامه‌ها و خدمات تنها در صورتی کار می‌کنند که به یک شبکه Wi-Fi متصل شوید.\n\n این تنظیم درمورد همه کاربران موجود در این رایانه لوحی اعمال می‌شود." + "اگر داده‌های پس‌زمینه تلفن همراه را محدود کنید، برخی از برنامه‌ها و خدمات تنها در صورتی کار می‌کنند که به یک شبکه Wi-Fi متصل شوید.\n\nاین تنظیم درمورد همه کاربران موجود در این تلفن اعمال می‌شود." "^1""^2"\n"هشدار" "^1""^2"\n"محدودیت" "برنامه‌های حذف شده" @@ -1843,8 +1861,8 @@ "کاربر" "نمایه محدود شده" "اضافه کردن کاربر جدید" - "شما می‌توانید با ایجاد کاربران اضافی، این دستگاه را با سایر افراد به اشتراک بگذارید. هر کاربر فضای مخصوص به خود را دارد و می‌تواند این فضا را با برنامه‌ها، تصاویر زمینه و موارد دیگر خود سفارشی کند. کاربران همچنین می‌توانند تنظیماتی، مانند Wi-Fi، را در رایانه لوحی ایجاد کنند که بر همه کاربران تأثیر می‌گذارد."\n\n"بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد."\n\n"هر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد." - "بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد."\n\n"هر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد." + "شما می‌توانید با ایجاد کاربران اضافی، این دستگاه را با سایر افراد به اشتراک بگذارید. هر کاربر فضای مخصوص به خود را دارد و می‌تواند این فضا را با برنامه‌ها، تصاویر زمینه و موارد دیگر خود سفارشی کند. کاربران همچنین می‌توانند تنظیماتی، مانند Wi-Fi، را در رایانه لوحی ایجاد کنند که بر همه کاربران تأثیر می‌گذارد.\n\nبعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد.\n\nهر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد." + "بعد از ایجاد یک کاربر جدید، آن شخص باید مرحله تنظیم را انجام دهد.\n\nهر کاربر می‌تواند مجوزهای برنامه به‌روز شده را از طرف سایر کاربران بپذیرد." "هم اکنون کاربر تنظیم شود؟" "اطمینان حاصل کنید که فرد برای گرفتن رایانه لوحی و تنظیم فضای خود، در دسترس است" "اکنون نمایه را تنظیم می‌کنید؟" @@ -1875,6 +1893,9 @@ "این تنظیم روی همه کاربران موجود در این تلفن تأثیر می‌گذارد." "تغییر زبان" "تغییر اندازه قلم" + "محدودیت‌ها" + "حذف محدودیت‌ها" + "تغییر پین" "نمایش اعلان‌ها" "راهنما" "حساب برای محتوا" diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml index a07a248edde..1511b4230bb 100644 --- a/res/values-fi/arrays.xml +++ b/res/values-fi/arrays.xml @@ -233,7 +233,8 @@ "Sijainti" "Henkilökohtaiset" "Viestit" - "Laite" + "Media" + "Laite"
    "karkea sijainti" @@ -267,6 +268,17 @@ "toista ääntä" "lue leikepöytä" "muokkaa leikepöytää" + "mediapainikkeet" + "äänen painopiste" + "pää-äänenvoimakkuus" + "puheäänen voimakkuus" + "soittoäänen voimakkuus" + "median äänenvoimakkuus" + "hälytyksen äänenvoimakkuus" + "ilmoituksen äänenvoimakkuus" + "bluetooth-äänenvoimakkuus" + "ei virransäästötilaa" + "sijainnin seuranta" "Sijainti" @@ -300,12 +312,33 @@ "Toista ääntä" "Lue leikepöytä" "Muokkaa leikepöytää" + "Mediapainikkeet" + "Äänen painopiste" + "Pää-äänenvoimakkuus" + "Puheäänen voimakkuus" + "Soittoäänen voimakkuus" + "Median äänenvoimakkuus" + "Hälytyksen voimakkuus" + "Ilmoituksen äänenvoimakkuus" + "Bluetooth-äänenvoimakkuus" + "Ei virransäästötilaa" + "Sijainti" "Lyhyt" "Keskipitkä" "Pitkä" + + "Dalvik" + "ART" + "ART (virheenkorjaus)" + + + "Käytä Dalvik-ympäristöä" + "Käytä ART-ympäristöä" + "Käytä ART-virheenkorjauskoontiversiota" + "Älä tarkista koskaan" "Tarkista vain DRM-suojattu sisältö" @@ -367,6 +400,11 @@ "Ruudulla viivoina" "Adb shell dumpsys gfxinfossa" + + "Ei käytössä" + "Näytä päällekkäiset alueet" + "Näytä päällekkäisyyslaskuri" + "Vakioraja" "Ei taustaprosesseja" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 06cf7403157..764f31670c2 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -275,8 +275,8 @@ "Verkkoyhteys katkesi, koska poistuit kotiverkkosi alueelta eikä roaming-tilaa ole otettu käyttöön." "Ota käyttöön" "Jos sallit verkkoyhteyden roaming-tilassa, roaming-maksut saattavat kasvaa suuriksi!" - "Jos sallit tiedonsiirron roaming-tilassa, sinulle voi koitua suuria roaming-maksuja."\n\n"Tämä asetus vaikuttaa kaikkiin tämän tablet-laitteen käyttäjiin." - "Jos sallit tiedonsiirron roaming-tilassa, sinulle voi koitua suuria roaming-maksuja."\n\n"Tämä asetus vaikuttaa kaikkiin tämän puhelimen käyttäjiin." + "Jos sallit tiedonsiirron roaming-tilassa, sinulle voi koitua suuria roaming-maksuja.\n\nTämä asetus vaikuttaa kaikkiin tämän tablet-laitteen käyttäjiin." + "Jos sallit tiedonsiirron roaming-tilassa, sinulle voi koitua suuria roaming-maksuja.\n\nTämä asetus vaikuttaa kaikkiin tämän puhelimen käyttäjiin." "Sallitaanko tiedonsiirto roaming-tilassa?" "Operaattorin valinta" "Valitse verkko-operaattori" @@ -322,8 +322,8 @@ "Vaatii PIN-koodin tai salasanan, jonka avulla tablet-laitteesi salaus puretaan aina kytkiessäsi sen virran päälle" "Vaatii PIN-koodin tai salasanan, jonka avulla puhelimesi salaus puretaan aina kytkiessäsi sen virran päälle" "Salattu" - "Voit salata tilisi, asetuksesi, lataamasi sovellukset ja niiden tiedot sekä media- ja muut tiedostot. Kun tablet-laitteesi on salattu, sinun tulee antaa PIN-koodi tai salasana poistaaksesi salauksen aina kytkiessäsi laitteen virran päälle. Voit poistaa tablet-laitteesi salauksen vain palauttamalla siihen tehdasasetukset, jolloin kaikki tietosi poistetaan."\n\n"Salaus kestää vähintään tunnin. Se tulee aloittaa täydellä akulla, ja tablet-laitteen tulee olla kytkettynä laturiin koko salauksen ajan. Jos keskeytät salauksen, menetät laitteesi tietoja." - "Voit salata tilisi, asetuksesi, lataamasi sovellukset ja niiden tiedot sekä media- ja muut tiedostot. Kun puhelimesi on salattu, sinun tulee antaa PIN-koodi tai salasana poistaaksesi salauksen aina kytkiessäsi laitteen virran päälle. Voit poistaa puhelimesi salauksen vain palauttamalla siihen tehdasasetukset, jolloin kaikki tietosi poistetaan."\n\n"Salaus kestää vähintään tunnin. Se tulee aloittaa täydellä akulla, ja puhelimen tulee olla kytkettynä laturiin koko salauksen ajan. Jos keskeytät salauksen, menetät laitteesi tietoja." + "Voit salata tilisi, asetuksesi, lataamasi sovellukset ja niiden tiedot sekä media- ja muut tiedostot. Kun tablet-laitteesi on salattu, sinun tulee antaa PIN-koodi tai salasana poistaaksesi salauksen aina kytkiessäsi laitteen virran päälle. Voit poistaa tablet-laitteesi salauksen vain palauttamalla siihen tehdasasetukset, jolloin kaikki tietosi poistetaan.\n\nSalaus kestää vähintään tunnin. Se tulee aloittaa täydellä akulla, ja tablet-laitteen tulee olla kytkettynä laturiin koko salauksen ajan. Jos keskeytät salauksen, menetät laitteesi tietoja." + "Voit salata tilisi, asetuksesi, lataamasi sovellukset ja niiden tiedot sekä media- ja muut tiedostot. Kun puhelimesi on salattu, sinun tulee antaa PIN-koodi tai salasana poistaaksesi salauksen aina kytkiessäsi laitteen virran päälle. Voit poistaa puhelimesi salauksen vain palauttamalla siihen tehdasasetukset, jolloin kaikki tietosi poistetaan.\n\nSalaus kestää vähintään tunnin. Se tulee aloittaa täydellä akulla, ja puhelimen tulee olla kytkettynä laturiin koko salauksen ajan. Jos keskeytät salauksen, menetät laitteesi tietoja." "Salaa tablet-laite" "Salaa puhelin" "Lataa akku ja yritä uudelleen." @@ -339,8 +339,8 @@ "Yritä uudelleen ^1 sekunnin kuluttua." "Kirjoita salasana" "Salaus epäonnistui" - "Salaus keskeytyi, eikä sitä voi suorittaa loppuun. Tästä johtuen tablet-laitteesi tietoja ei voi enää käyttää. "\n\n"Voit jatkaa tablet-laitteesi käyttöä, kun palautat tehdasasetukset. Kun olet määrittänyt tablet-laitteesi asetukset tehdasasetusten palautuksen jälkeen, voit palauttaa tiedot, jotka olet varmuuskopioinut Google-tiliisi." - "Salaus keskeytyi, eikä sitä voi suorittaa loppuun. Tästä johtuen puhelimesi tietoja ei voi enää käyttää. "\n\n"Voit jatkaa puhelimesi käyttöä, kun palautat tehdasasetukset. Kun olet määrittänyt puhelimesi asetukset tehdasasetusten palautuksen jälkeen, voit palauttaa tiedot, jotka olet varmuuskopioinut Google-tiliisi." + "Salaus keskeytyi, eikä sitä voi suorittaa loppuun. Tästä johtuen tablet-laitteesi tietoja ei voi enää käyttää. \n\nVoit jatkaa tablet-laitteesi käyttöä, kun palautat tehdasasetukset. Kun olet määrittänyt tablet-laitteesi asetukset tehdasasetusten palautuksen jälkeen, voit palauttaa tiedot, jotka olet varmuuskopioinut Google-tiliisi." + "Salaus keskeytyi, eikä sitä voi suorittaa loppuun. Tästä johtuen puhelimesi tietoja ei voi enää käyttää. \n\nVoit jatkaa puhelimesi käyttöä, kun palautat tehdasasetukset. Kun olet määrittänyt puhelimesi asetukset tehdasasetusten palautuksen jälkeen, voit palauttaa tiedot, jotka olet varmuuskopioinut Google-tiliisi." "Vaihda syöttötapaa" "Valitse ruudunlukitus" "Valitse varalukko" @@ -514,6 +514,7 @@ "Yhdistetään" "Yhdistetty" "Käytettävissä" + "Käytössä" "Näyttöasetukset" "Katkaistaanko yhteys?" "Katkaisee yhteyden laitteeseen:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Pois käytöstä" "Ei käytettävissä, koska NFC on poistettu käytöstä" "Android Beam" - "Kun tämä ominaisuus on käytössä, voit lähettää sovellusten sisältöä toiseen NFC-yhteensopivaan laitteeseen pitämällä laitteita lähekkäin. Voit lähettää esimerkiksi selaimen sivuja, YouTube-videoita ja yhteystietoja."\n\n"Aseta laitteet lähekkäin (yleensä taustat vastakkain) ja kosketa näyttöä. Sovellus määrittää lähetettävät tiedot." + "Kun tämä ominaisuus on käytössä, voit lähettää sovellusten sisältöä toiseen NFC-yhteensopivaan laitteeseen pitämällä laitteita lähekkäin. Voit lähettää esimerkiksi selaimen sivuja, YouTube-videoita ja yhteystietoja.\n\nAseta laitteet lähekkäin (yleensä taustat vastakkain) ja kosketa näyttöä. Sovellus määrittää lähetettävät tiedot." "Verkkopalveluhaku" "Anna muiden laitteiden sovelluksien löytää tämän laitteen sovelluksia" "Wifi" @@ -620,7 +621,7 @@ "Salaus: %1$s" ", salaus: %1$s" "Ei mitään" - "%1$s haluaa parantaa sijainnin tarkkuutta ja suorittaa muita toimintoja ottamalla verkon etsinnän käyttöön, vaikka wifi-yhteys ei ole käytössä."\n\n"Annetaanko tämä lupa kaikille sovelluksille, jotka haluavat etsiä verkkoja?" + "%1$s haluaa parantaa sijainnin tarkkuutta ja suorittaa muita toimintoja ottamalla verkon etsinnän käyttöön, vaikka wifi-yhteys ei ole käytössä.\n\nAnnetaanko tämä lupa kaikille sovelluksille, jotka haluavat etsiä verkkoja?" "Salli" "Estä" "Yhdistä" @@ -632,8 +633,8 @@ "Peruuta" "Ohita kuitenkin" "Älä ohita" - "VAROITUS: Voit joutua maksamaan ylimääräisiä tiedonsiirtomaksuja."\n\n"Tablet-laitteen asetusten määrittäminen voi vaatia paljon tiedonsiirtoa." - "VAROITUS: Voit joutua maksamaan ylimääräisiä tiedonsiirtomaksuja."\n\n"Puhelimen asetusten määrittäminen voi vaatia paljon tiedonsiirtoa." + "VAROITUS: Voit joutua maksamaan ylimääräisiä tiedonsiirtomaksuja.\n\nTablet-laitteen asetusten määrittäminen voi vaatia paljon tiedonsiirtoa." + "VAROITUS: Voit joutua maksamaan ylimääräisiä tiedonsiirtomaksuja.\n\nPuhelimen asetusten määrittäminen voi vaatia paljon tiedonsiirtoa." "VAROITUS: Tablet-laite ei voi vahvistaa, että ohjelmisto on ajan tasalla, ennen kuin muodostat internetyhteyden." "VAROITUS: Puhelin ei voi vahvistaa, että ohjelmisto on ajan tasalla, ennen kuin muodostat internetyhteyden." "Tablet-laite ei voi muodostaa yhteyttä tähän wifi-verkkoon." @@ -773,9 +774,9 @@ "SIM-kortin PIN-koodi" "Väärä PIN-koodi" "PIN-koodit eivät täsmää" - "PIN-koodin vaihtaminen epäonnistui."\n"Saatoit antaa väärän PIN-koodin." + "PIN-koodin vaihtaminen epäonnistui.\nSaatoit antaa väärän PIN-koodin." "SIM-kortin PIN-koodin vaihtaminen onnistui" - "SIM-kortin lukitustilan muuttaminen epäonnistui."\n"PIN-koodi on mahdollisesti virheellinen." + "SIM-kortin lukitustilan muuttaminen epäonnistui.\nPIN-koodi on mahdollisesti virheellinen." "OK" "Peruuta" "Tablet-laitteen tila" @@ -918,9 +919,9 @@ "Tehdasasetuksien palauttaminen" "Poistaa kaikki tablet-laitteen tiedot" "Poistaa kaikki puhelimen tiedot" - "Tämä poistaa kaikki tablet-laitteesi ""sisäisen tallennustilan"" tiedot, kuten:"\n\n
  • "Google-tilisi"
  • \n
  • "Järjestelmä- ja sovellustiedot ja -asetukset"
  • \n
  • "Ladatut sovellukset"
  • - "Tämä poistaa kaikki puhelimesi ""sisäisen tallennustilan"" tiedot, kuten:"\n\n
  • "Google-tilisi"
  • \n
  • "Järjestelmä- ja sovellustiedot ja -asetukset"
  • \n
  • "Ladatut sovellukset"
  • - \n\n"Olet kirjautunut sisään seuraaviin tileihin:"\n + "Tämä poistaa kaikki tablet-laitteesi ""sisäisen tallennustilan"" tiedot, kuten:\n\n"
  • "Google-tilisi"
  • \n
  • "Järjestelmä- ja sovellustiedot ja -asetukset"
  • \n
  • "Ladatut sovellukset"
  • + "Tämä poistaa kaikki puhelimesi ""sisäisen tallennustilan"" tiedot, kuten:\n\n"
  • "Google-tilisi"
  • \n
  • "Järjestelmä- ja sovellustiedot ja -asetukset"
  • \n
  • "Ladatut sovellukset"
  • + \n\n"Olet kirjautunut sisään seuraaviin tileihin:\n"
  • "Musiikki"
  • \n
  • "Valokuvat"
  • \n
  • "Muut käyttäjän tiedot"
  • \n\n"Jos haluat poistaa musiikin, kuvat ja muut käyttäjän tiedot, ""USB-tallennustila"" tulee tyhjentää." \n\n"Jos haluat poistaa musiikin, kuvat ja muut käyttäjän tiedot, ""SD-kortti"" tulee tyhjentää." @@ -1105,7 +1106,7 @@ "Näytä välimuistiprosessit" "Nollaa sovellusasetukset" "Nollaa sovellusasetukset?" - "Tämä nollaa kaikki seuraavat asetukset:"\n\n" "
  • "Käytöstä poistetut sovellukset"
  • \n" "
  • "Käytöstä poistetut sovellusilmoitukset"
  • \n" "
  • "Toimintojen oletussovellukset"
  • \n" "
  • "Taustasovellusten tietojenkäyttörajoitukset"
  • \n\n" Et menetä mitään sovellusten tietoja."
    + "Tämä nollaa kaikki seuraavat asetukset:\n\n "
  • "Käytöstä poistetut sovellukset"
  • \n" "
  • "Käytöstä poistetut sovellusilmoitukset"
  • \n" "
  • "Toimintojen oletussovellukset"
  • \n" "
  • "Taustasovellusten tietojenkäyttörajoitukset"
  • \n\n" Et menetä mitään sovellusten tietoja."
    "Nollaa sovellukset" "Hallinnoi tallennustilaa" "Suodata" @@ -1240,9 +1241,7 @@ "Vaihda painamalla Ctrl+välilyönti" "Oletus" "Näppäimistöasettelut" - "Käyttäjän sanakirja" - "Oma sanakirja" - "Omat sanakirjat" + "Oma sanakirja" "Lisää" "Lisää sanakirjaan" @@ -1303,6 +1302,11 @@ "Lisää virtavalikkoon virheraportin teko -valinta" "Pysy käynnissä" "Näyttö ei sammu puhelimen latautuessa" + "Ota Bluetoothin HCI-tarkkailuloki käyttöön" + "Tallenna kaikki Bluetoothin HCl-paketit tiedostoon" + "Valitse suoritusympäristö" + "Valitse suoritusympäristö" + "Käynnistetäänkö uudelleen niin, että suoritusympäristö on %1$s eikä %2$s?" "Salli sijaintien imitointi" "Salli sijaintien imitointi" "Sallitaanko USB-vianetsintä?" @@ -1315,11 +1319,13 @@ "Suojaa USB-tallennustila" "Sovellusten on pyydettävä lupa USB-tallennustilan lukemiseen" "Suojataanko USB-tallennustila?" - "Jos USB-tallennustila on suojattu, sovellusten on pyydettävä lupa ulkoisen tallennustilan käyttämiseen."\n\n"Jotkin sovellukset toimivat vasta, kun kehittäjät päivittävät ne." + "Jos USB-tallennustila on suojattu, sovellusten on pyydettävä lupa ulkoisen tallennustilan käyttämiseen.\n\nJotkin sovellukset toimivat vasta, kun kehittäjät päivittävät ne." "Suojaa SD-kortti" "Sovellusten on pyydettävä lupa SD-kortin lukemiseen" "Suojataanko SD-kortti?" - "Jos SD-kortti on suojattu, sovellusten on pyydettävä lupa ulkoisen tallennustilan käyttämiseen."\n\n"Jotkin sovellukset toimivat vasta, kun kehittäjät päivittävät ne." + "Jos SD-kortti on suojattu, sovellusten on pyydettävä lupa ulkoisen tallennustilan käyttämiseen.\n\nJotkin sovellukset toimivat vasta, kun kehittäjät päivittävät ne." + "Paikallinen pääte" + "Ota käyttöön päätesov. joka mahdollistaa paikall. liittymäkäytön" "Valitse gadget" "Valitse widget" "Luo widget ja salli käyttö?" @@ -1340,11 +1346,11 @@ "Palvelut" "Järjestelmä" "Suurennuseleet" - "Kun tämä ominaisuus on käytössä, voit lähentää ja loitontaa kolmoisnapauttamalla ruutua."\n\n"Lähennetyssä tilassa voit"\n
    • "panoroida vetämällä vähintään kahta sormea ruudun poikki"
    • \n
    • "säätää lähennyksen tasoa nipistämällä vähintään kaksi sormea yhteen tai levittämällä ne erilleen."
    \n\n"Voit myös suurentaa sormesi alla olevan kohteen väliaikaisesti kolmoisnapauttamalla ja pitämällä viimeisen napautuksen ruudulla. Suurennetussa tilassa voit tutkia ruudun eri osia sormella vetämällä. Nostamalla sormen pääset takaisin edelliseen tilaan."\n\n"Huomaa: suurennus kolmoisnapauttamalla toimii kaikkialla paitsi näppäimistössä ja siirtymispalkissa."
    + "Kun tämä ominaisuus on käytössä, voit lähentää ja loitontaa kolmoisnapauttamalla ruutua.\n\nLähennetyssä tilassa voit\n"
    • "panoroida vetämällä vähintään kahta sormea ruudun poikki"
    • \n
    • "säätää lähennyksen tasoa nipistämällä vähintään kaksi sormea yhteen tai levittämällä ne erilleen."
    \n\n"Voit myös suurentaa sormesi alla olevan kohteen väliaikaisesti kolmoisnapauttamalla ja pitämällä viimeisen napautuksen ruudulla. Suurennetussa tilassa voit tutkia ruudun eri osia sormella vetämällä. Nostamalla sormen pääset takaisin edelliseen tilaan.\n\nHuomaa: suurennus kolmoisnapauttamalla toimii kaikkialla paitsi näppäimistössä ja siirtymispalkissa."
    "Esteettömyystilan pikakuvake" "Käytössä" "Pois käytöstä" - "Kun tämä ominaisuus on käytössä, voit ottaa esteettömyystoiminnot käyttöön nopeasti kahden vaiheen kautta."\n\n"Vaihe 1: paina virtapainiketta, kunnes kuulet äänen tai tunnet värinän."\n\n"Vaihe 2: kosketa kahdella sormella, kunnes kuulet äänivahvistuksen."\n\n"Jos laitteella on useita käyttäjiä, tämän pikanäppäimen käyttö lukitusruudussa ottaa esteettömyystilan käyttöön väliaikaisesti, kunnes laitteen lukitus poistetaan." + "Kun tämä ominaisuus on käytössä, voit ottaa esteettömyystoiminnot käyttöön nopeasti kahden vaiheen kautta.\n\nVaihe 1: paina virtapainiketta, kunnes kuulet äänen tai tunnet värinän.\n\nVaihe 2: kosketa kahdella sormella, kunnes kuulet äänivahvistuksen.\n\nJos laitteella on useita käyttäjiä, tämän pikanäppäimen käyttö lukitusruudussa ottaa esteettömyystilan käyttöön väliaikaisesti, kunnes laitteen lukitus poistetaan." "Suuri teksti" "Näytön suurennus" "Päivitä näytön suurennus automaatt." @@ -1366,6 +1372,16 @@ "TalkBack auttaa sokeita ja näkörajoitteisia käyttäjiä puhepalautteen avulla. Haluatko asentaa sovelluksen ilmaiseksi Android Marketista?" "Ei kuvausta." "Asetukset" + "Tulostetaan" + "Tulostusasetukset" + "Palvelut" + "Otetaanko palvelu %1$s käyttöön?" + "%1$s voi vastaanottaa tulostamiasi dokumentteja. Ne voivat sisältää arkaluonteisia tietoja." + "Ei asennettuja palveluita" + "Asetukset" + "Lisää tulostimia" + "Käytössä" + "Ei käyt." "Akku" "Mikä on käyttänyt akkua" "Akun käyttötietoja ei saatav." @@ -1405,8 +1421,10 @@ "Wifi on käytössä" "Tablet" "Puhelin" - "Tiedot lähetetty" - "Tiedot vastaanotettu" + "Lähetetty mobiilitiedonsiirto" + "Vastaanotet. mobiilitiedonsiirto" + "Lähetetty wifi-tiedonsiirto" + "Vastaanotettu wifi-tiedonsiirto" "Ääni" "Video" "Käytössäoloaika" @@ -1460,6 +1478,7 @@ "Äänenkorkeus" "Vaikuttaa puhutun tekstin äänenkorkeuteen" "Kieli" + "Kieltä ei ole valittu" "Asettaa puhutulle tekstille kielikohtaisen äänen" "Kuuntele esimerkki" "Toista lyhyt esittely puhesynteesistä" @@ -1594,7 +1613,7 @@ "EAP ei ole tuettu." "Et voi määrittää EAP wifi -yhteyttä asennuksen aikana. Voit määrittää yhteyden asennuksen jälkeen kohdassa Asetukset > Langaton verkko ja verkot." "Yhteyden muodostaminen voi kestää muutaman minuutin..." - "Jatka asetuksien määrittämistä koskettamalla ""Seuraava""."\n\n"Muodosta yhteys eri wifi-verkkoon koskettamalla ""Takaisin""." + "Jatka asetuksien määrittämistä koskettamalla ""Seuraava"".\n\nMuodosta yhteys eri wifi-verkkoon koskettamalla ""Takaisin""." "Synkronointi käytössä" "Synkronointi pois käytöstä" "Synkronointivirhe." @@ -1622,7 +1641,7 @@ "Gmail" "Kalenteri" "Yhteystiedot" - "Tervetuloa käyttämään Google Sync -palvelua!"" "\n"Se on Googlen tapa synkronoida tietoja, ja sen avulla voit käyttää yhteystietojasi, tapaamisiasi ynnä muita tietoja mistä tahansa." + "Tervetuloa käyttämään Google Sync -palvelua!"" \nSe on Googlen tapa synkronoida tietoja, ja sen avulla voit käyttää yhteystietojasi, tapaamisiasi ynnä muita tietoja mistä tahansa." "Sovelluksen synkronointiasetukset" "Tiedot ja synkronointi" "Vaihda salasana" @@ -1676,8 +1695,7 @@ "Väläytä ikkunoiden sisältö GPU:lla piirrettäessä" "Näytä laitt.tason päiv." "Näytä laitteistotasot vihreinä niiden päivittyessä" - "Näytä GPU-ylitys" - "Paras -> huonoin: sin., vihr., vaal.pun., pun." + "GPU-objektien päällekkäisyys" "Poista HW-peittok. käyt." "Käytä GPU:ta ruudun koostamiseen" "Ota OpenGL-jälj. käyttöön" @@ -1738,11 +1756,11 @@ "Ei taustatiedons. mobiiliverkossa. Käytä wifiä, jos mahdollista." "Aseta mobiilitiedonsiirtoraja sov. taustatiedonsiirron rajoittamiseksi" "Rajoitetaanko taustatiedonsiirtoa?" - "Toiminto saattaa estää taustatiedonsiirrosta riippuvaisten sovellusten toiminnan, jos käytettävissä on vain mobiiliverkkoja."\n\n"Voit säätää tiedonsiirron asetuksia tarkemmin sovelluksessa." + "Toiminto saattaa estää taustatiedonsiirrosta riippuvaisten sovellusten toiminnan, jos käytettävissä on vain mobiiliverkkoja.\n\nVoit säätää tiedonsiirron asetuksia tarkemmin sovelluksessa." "Taustatiedonsiirron rajoittaminen on mahdollista vain, jos olet asettanut mobiilitiedonsiirtorajan." "Otetaanko aut. synkr. käyttöön?" - "Kaikki tileihisi verkossa tekemäsi muutokset kopioidaan tablet-laitteellesi automaattisesti."\n\n"Jotkut tilit voivat myös automaattisesti kopioida tablet-laitteella tehdyt muutokset verkkoon. Google-tili toimii tällä tavalla."\n\n"Valitse kunkin tilin synkronoitavat tiedot siirtymällä kohtaan Asetukset > Tilit." - "Kaikki tileihisi verkossa tekemäsi muutokset kopioidaan puhelimellesi automaattisesti."\n\n"Jotkut tilit voivat myös automaattisesti kopioida puhelimella tehdyt muutokset verkkoon. Google-tili toimii tällä tavalla."\n\n"Valitse kunkin tilin synkronoitavat tiedot siirtymällä kohtaan Asetukset > Tilit." + "Kaikki tileihisi verkossa tekemäsi muutokset kopioidaan tablet-laitteellesi automaattisesti.\n\nJotkut tilit voivat myös automaattisesti kopioida tablet-laitteella tehdyt muutokset verkkoon. Google-tili toimii tällä tavalla.\n\nValitse kunkin tilin synkronoitavat tiedot siirtymällä kohtaan Asetukset > Tilit." + "Kaikki tileihisi verkossa tekemäsi muutokset kopioidaan puhelimellesi automaattisesti.\n\nJotkut tilit voivat myös automaattisesti kopioida puhelimella tehdyt muutokset verkkoon. Google-tili toimii tällä tavalla.\n\nValitse kunkin tilin synkronoitavat tiedot siirtymällä kohtaan Asetukset > Tilit." "Poistetaanko automaatt. synkr.?" "Tämä vähentää tiedonsiirtomäärää ja akun käyttöä, mutta jokainen tili tulee synkronoida manuaalisesti, jos haluat niiden tiedot käyttöösi. Et myöskään saa ilmoituksia, jos tietoja päivitetään." "Käyttöjakson nollauspäivä" @@ -1751,12 +1769,12 @@ "Aseta tiedonsiirtovaroitus" "Aseta tiedonsiirtoraja" "Tiedonsiirron rajoittaminen" - "Mobiiliyhteytesi poistetaan käytöstä, jos määritetty tiedonsiirtoraja saavutetaan."\n\n"Tablet-laite mittaa tiedonsiirron. Operaattorisi voi kuitenkin käyttää eri mittaustapaa, joten suosittelemme määrittämään rajan todellista käyttöä tiukemmaksi." - "Mobiiliyhteytesi poistetaan käytöstä, jos määritetty tiedonsiirtoraja saavutetaan."\n\n"Puhelin mittaa tiedonsiirron. Operaattorisi voi kuitenkin käyttää eri mittaustapaa, joten suosittelemme määrittämään rajan todellista käyttöä tiukemmaksi." + "Mobiiliyhteytesi poistetaan käytöstä, jos määritetty tiedonsiirtoraja saavutetaan.\n\nTablet-laite mittaa tiedonsiirron. Operaattorisi voi kuitenkin käyttää eri mittaustapaa, joten suosittelemme määrittämään rajan todellista käyttöä tiukemmaksi." + "Mobiiliyhteytesi poistetaan käytöstä, jos määritetty tiedonsiirtoraja saavutetaan.\n\nPuhelin mittaa tiedonsiirron. Operaattorisi voi kuitenkin käyttää eri mittaustapaa, joten suosittelemme määrittämään rajan todellista käyttöä tiukemmaksi." "Rajoitetaanko taustatiedonsiirtoa?" "Jos rajoitat taustalla tapahtuvaa mobiilitiedonsiirtoa, jotkin sovellukset ja palvelut eivät toimi, ellet ole yhteydessä wifi-verkkoon." - "Jos rajoitat taustalla tapahtuvaa mobiilitiedonsiirtoa, jotkin sovellukset ja palvelut eivät toimi, ellet ole yhteydessä wifi-verkkoon."\n\n"Tämä asetus vaikuttaa kaikkiin tämän tablet-laitteen käyttäjiin." - "Jos rajoitat taustalla tapahtuvaa mobiilitiedonsiirtoa, jotkin sovellukset ja palvelut eivät toimi, ellet ole yhteydessä wifi-verkkoon."\n\n"Tämä asetus vaikuttaa kaikkiin tämän puhelimen käyttäjiin." + "Jos rajoitat taustalla tapahtuvaa mobiilitiedonsiirtoa, jotkin sovellukset ja palvelut eivät toimi, ellet ole yhteydessä wifi-verkkoon.\n\nTämä asetus vaikuttaa kaikkiin tämän tablet-laitteen käyttäjiin." + "Jos rajoitat taustalla tapahtuvaa mobiilitiedonsiirtoa, jotkin sovellukset ja palvelut eivät toimi, ellet ole yhteydessä wifi-verkkoon.\n\nTämä asetus vaikuttaa kaikkiin tämän puhelimen käyttäjiin." "^1"" ""^2"\n"varoitus" "^1""^2"\n"rajoitus" "Poistetut sovellukset" @@ -1843,8 +1861,8 @@ "Käyttäjä" "Rajoitettu profiili" "Lisää uusi käyttäjä" - "Voit jakaa tämän laitteen muiden kanssa luomalla uusia käyttäjiä. Jokaisella käyttäjällä on oma tila, johon he voivat lisätä omia sovelluksiaan, taustakuvan ynnä muuta. Käyttäjät voivat myös muokata kaikkiin käyttäjiin vaikuttavia tablet-laitteen asetuksia, kuten wifi-yhteysasetuksia."\n\n"Kun luot uuden käyttäjän, hänen täytyy määrittää omat asetuksensa."\n\n"Kaikki käyttäjät voivat hyväksyä päivitettyjä sovelluksien lupia muiden käyttäjien puolesta." - "Kun luot uuden käyttäjän, hänen täytyy määrittää omat asetuksensa."\n\n"Kaikki käyttäjät voivat hyväksyä päivitettyjä sovelluksien lupia muiden käyttäjien puolesta." + "Voit jakaa tämän laitteen muiden kanssa luomalla uusia käyttäjiä. Jokaisella käyttäjällä on oma tila, johon he voivat lisätä omia sovelluksiaan, taustakuvan ynnä muuta. Käyttäjät voivat myös muokata kaikkiin käyttäjiin vaikuttavia tablet-laitteen asetuksia, kuten wifi-yhteysasetuksia.\n\nKun luot uuden käyttäjän, hänen täytyy määrittää omat asetuksensa.\n\nKaikki käyttäjät voivat hyväksyä päivitettyjä sovelluksien lupia muiden käyttäjien puolesta." + "Kun luot uuden käyttäjän, hänen täytyy määrittää omat asetuksensa.\n\nKaikki käyttäjät voivat hyväksyä päivitettyjä sovelluksien lupia muiden käyttäjien puolesta." "Määritetäänkö käyttäjän asetukset nyt?" "Varmista, että tämä henkilö voi ottaa tablet-laitteen käyttöönsä, ja määritä hänen tilansa asetukset" "Määritetäänkö profiilin asetukset nyt?" @@ -1875,6 +1893,9 @@ "Tämä asetus vaikuttaa kaikkiin tämän puhelimen käyttäjiin." "Vaihda kieltä" "Muuta kirjasinkokoa" + "Rajoitukset" + "Poista rajoitukset" + "Vaihda PIN-koodi" "Näytä ilmoitukset" "Ohje" "Käytettävä tili" diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml index b0448070d79..f8928465501 100644 --- a/res/values-fr/arrays.xml +++ b/res/values-fr/arrays.xml @@ -233,7 +233,8 @@ "Position" "Personnel" "SMS/MMS" - "Appareil" + "Multimédia" + "Appareil"
    "position approximative" @@ -267,6 +268,17 @@ "lire le fichier audio" "lire le Presse-papiers" "modifier le Presse-papiers" + "boutons pour contenus multimédias" + "priorité audio" + "volume général" + "volume de la voix" + "volume des sonneries" + "volume des contenus multimédias" + "volume des alarmes" + "volume des notifications" + "volume Bluetooth" + "maintenir activé" + "suivre la position" "Position" @@ -300,12 +312,33 @@ "Lire le fichier audio" "Lire le Presse-papiers" "Modifier le Presse-papiers" + "Boutons multimédias" + "Priorité audio" + "Volume général" + "Volume de la voix" + "Volume de la sonnerie" + "Volume des contenus multimédias" + "Volume de l\'alarme" + "Volume des notifications" + "Volume Bluetooth" + "Maintenir activé" + "Localisation" "Court" "Moyen" "Long" + + "Dalvik" + "ART" + "ART (débogage)" + + + "Utiliser Dalvik" + "Utiliser ART" + "Utiliser le build de débogage ART" + "Ne jamais vérifier" "Vérifier le contenu GDN uniquement" @@ -367,6 +400,11 @@ "À l\'écran sous forme de lignes" "Dans adb shell dumpsys gfxinfo" + + "Désactivé" + "Afficher les zones de conflit" + "Afficher le compteur des conflits" + "Limite standard" "Aucun processus en arrière-plan" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 24e2991bc81..a3d940d17a3 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -275,8 +275,8 @@ "Vous avez été déconnecté, car vous avez quitté votre réseau domestique et l\'itinérance des données est désactivée." "Activer" "Lorsque vous activez l\'itinérance des données, des frais d\'itinérance importants peuvent s\'appliquer." - "Lorsque vous autorisez l\'itinérance des données, des frais d\'itinérance importants peuvent s\'appliquer !"\n\n"Ce paramètre affecte tous les utilisateurs de cette tablette." - "Lorsque vous autorisez l\'itinérance des données, des frais d\'itinérance importants peuvent s\'appliquer !"\n\n"Ce paramètre affecte tous les utilisateurs de ce téléphone." + "Lorsque vous autorisez l\'itinérance des données, des frais d\'itinérance importants peuvent s\'appliquer !\n\nCe paramètre affecte tous les utilisateurs de cette tablette." + "Lorsque vous autorisez l\'itinérance des données, des frais d\'itinérance importants peuvent s\'appliquer !\n\nCe paramètre affecte tous les utilisateurs de ce téléphone." "Autoriser l\'itinérance des données ?" "Sélection de l\'opérateur" "Sélectionner un opérateur de réseau" @@ -322,8 +322,8 @@ "Exiger un code PIN ou un mot de passe numérique pour déchiffrer la tablette à chaque fois qu\'elle est allumée" "Exiger un code PIN ou un mot de passe numérique pour déchiffrer le téléphone à chaque fois qu\'il est allumé" "Chiffré" - "Vous pouvez chiffrer vos comptes, vos paramètres, vos applications téléchargées, ainsi que leurs données, supports et autres fichiers. Une fois votre tablette chiffrée, vous devez saisir un code PIN ou un mot de passe numérique pour la déchiffrer à chaque fois que vous l\'allumez. Vous ne pouvez déchiffrer votre tablette qu\'en rétablissant la configuration d\'usine, ce qui effacera l\'ensemble de vos données."\n\n"Le chiffrement peut prendre une heure, voire plus. La batterie doit être chargée lors du démarrage du processus, et la tablette doit rester branchée jusqu\'à la fin. Si vous interrompez le processus, vous perdrez certaines de vos données, voire la totalité." - "Vous pouvez chiffrer vos comptes, vos paramètres, vos applications téléchargées, ainsi que leurs données, supports et autres fichiers. Une fois votre téléphone chiffré, vous devez saisir un code PIN ou un mot de passe numérique pour le déchiffrer à chaque fois que vous l\'allumez. Vous ne pouvez déchiffrer votre téléphone qu\'en rétablissant la configuration d\'usine, ce qui effacera l\'ensemble de vos données."\n\n"Le chiffrement peut prendre une heure, voire plus. La batterie doit être chargée lors du démarrage du processus, et le téléphone doit rester branché jusqu\'à la fin. Si vous interrompez le processus, vous perdrez certaines de vos données, voire la totalité." + "Vous pouvez chiffrer vos comptes, vos paramètres, vos applications téléchargées, ainsi que leurs données, supports et autres fichiers. Une fois votre tablette chiffrée, vous devez saisir un code PIN ou un mot de passe numérique pour la déchiffrer à chaque fois que vous l\'allumez. Vous ne pouvez déchiffrer votre tablette qu\'en rétablissant la configuration d\'usine, ce qui effacera l\'ensemble de vos données.\n\nLe chiffrement peut prendre une heure, voire plus. La batterie doit être chargée lors du démarrage du processus, et la tablette doit rester branchée jusqu\'à la fin. Si vous interrompez le processus, vous perdrez certaines de vos données, voire la totalité." + "Vous pouvez chiffrer vos comptes, vos paramètres, vos applications téléchargées, ainsi que leurs données, supports et autres fichiers. Une fois votre téléphone chiffré, vous devez saisir un code PIN ou un mot de passe numérique pour le déchiffrer à chaque fois que vous l\'allumez. Vous ne pouvez déchiffrer votre téléphone qu\'en rétablissant la configuration d\'usine, ce qui effacera l\'ensemble de vos données.\n\nLe chiffrement peut prendre une heure, voire plus. La batterie doit être chargée lors du démarrage du processus, et le téléphone doit rester branché jusqu\'à la fin. Si vous interrompez le processus, vous perdrez certaines de vos données, voire la totalité." "Chiffrer la tablette" "Chiffrer le téléphone" "Veuillez charger votre batterie, puis réessayer." @@ -339,8 +339,8 @@ "Réessayez dans ^1 secondes." "Saisissez votre mot de passe." "Échec du chiffrement" - "Impossible de terminer le chiffrement, car celui-ci a été interrompu. Par conséquent, les données de votre tablette ne sont plus accessibles."\n\n"Pour continuer d\'utiliser votre tablette, vous devez rétablir la configuration d\'usine. Une fois cette opération terminée, vous pourrez restaurer toutes les données sauvegardées sur votre compte Google lors de la nouvelle configuration de votre tablette." - "Impossible de terminer le chiffrement, car celui-ci a été interrompu. Par conséquent, les données de votre téléphone ne sont plus accessibles."\n\n"Pour continuer d\'utiliser votre téléphone, vous devez rétablir la configuration d\'usine. Une fois cette opération terminée, vous pourrez restaurer toutes les données sauvegardées sur votre compte Google lors de la nouvelle configuration de votre téléphone." + "Impossible de terminer le chiffrement, car celui-ci a été interrompu. Par conséquent, les données de votre tablette ne sont plus accessibles.\n\nPour continuer d\'utiliser votre tablette, vous devez rétablir la configuration d\'usine. Une fois cette opération terminée, vous pourrez restaurer toutes les données sauvegardées sur votre compte Google lors de la nouvelle configuration de votre tablette." + "Impossible de terminer le chiffrement, car celui-ci a été interrompu. Par conséquent, les données de votre téléphone ne sont plus accessibles.\n\nPour continuer d\'utiliser votre téléphone, vous devez rétablir la configuration d\'usine. Une fois cette opération terminée, vous pourrez restaurer toutes les données sauvegardées sur votre compte Google lors de la nouvelle configuration de votre téléphone." "Changer le mode de saisie" "Sélect. verr. écran" "Verrouillage secondaire" @@ -514,6 +514,7 @@ "Connexion en cours…" "Connecté" "Disponible" + "En cours d\'utilisation" "Paramètres d\'affichage" "Voulez-vous vraiment vous déconnecter ?" "Cette opération va mettre fin à votre connexion avec :<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Désactivé" "Indisponible, car la NFC est désactivée" "Android Beam" - "Lorsque cette fonctionnalité est activée, vous pouvez partager le contenu d\'une application avec un appareil compatible NFC en rapprochant les appareils. Vous pouvez, par exemple, partager des pages de navigateur, des vidéos YouTube, des contacts et plus encore."\n\n"Il vous suffit de rapprocher les appareils (en les plaçant dos à dos), puis d\'appuyer sur votre écran. L\'application détermine le contenu à transférer." + "Lorsque cette fonctionnalité est activée, vous pouvez partager le contenu d\'une application avec un appareil compatible NFC en rapprochant les appareils. Vous pouvez, par exemple, partager des pages de navigateur, des vidéos YouTube, des contacts et plus encore.\n\nIl vous suffit de rapprocher les appareils (en les plaçant dos à dos), puis d\'appuyer sur votre écran. L\'application détermine le contenu à transférer." "Identification du service réseau" "Autoriser les applications sur d\'autres appareils à identifier les applications sur celui-ci" "Wi-Fi" @@ -620,7 +621,7 @@ "Sécurisé par %1$s" ", sécurisé par %1$s" "Aucune" - "Pour améliorer la précision de la position et à d\'autres fins, %1$s souhaite activer la recherche de réseaux, même lorsque le Wi-Fi est désactivé."\n\n"Donner cette autorisation à toutes les applications souhaitant activer la recherche de réseaux ?" + "Pour améliorer la précision de la position et à d\'autres fins, %1$s souhaite activer la recherche de réseaux, même lorsque le Wi-Fi est désactivé.\n\nDonner cette autorisation à toutes les applications souhaitant activer la recherche de réseaux ?" "Autoriser" "Refuser" "Se connecter" @@ -632,8 +633,8 @@ "Annuler" "Ignorer quand même" "Ne pas ignorer" - "AVERTISSEMENT : Des frais supplémentaires de connexion à Internet peuvent être appliqués par votre opérateur."\n\n"La configuration de la tablette peut générer une forte activité sur le réseau." - "AVERTISSEMENT : Des frais supplémentaires de connexion à Internet peuvent être appliqués par votre opérateur."\n\n"La configuration du téléphone peut générer une forte activité sur le réseau." + "AVERTISSEMENT : Des frais supplémentaires de connexion à Internet peuvent être appliqués par votre opérateur.\n\nLa configuration de la tablette peut générer une forte activité sur le réseau." + "AVERTISSEMENT : Des frais supplémentaires de connexion à Internet peuvent être appliqués par votre opérateur.\n\nLa configuration du téléphone peut générer une forte activité sur le réseau." "AVERTISSEMENT : Vous ne pourrez vérifier que vos logiciels sont à jour sur votre tablette que lorsque vous disposerez d\'une connexion à Internet." "AVERTISSEMENT : Vous ne pourrez vérifier que vos logiciels sont à jour sur votre téléphone que lorsque vous disposerez d\'une connexion à Internet." "Connexion impossible de la tablette à ce réseau Wi-Fi." @@ -773,9 +774,9 @@ "Code PIN de la carte SIM" "Code PIN incorrect." "Les codes PIN ne correspondent pas." - "Impossible de modifier le code PIN."\n"Le code PIN est peut-être incorrect." + "Impossible de modifier le code PIN.\nLe code PIN est peut-être incorrect." "Le code PIN de la carte SIM a été modifié." - "Impossible de changer l\'état de verrouillage de la carte SIM."\n"Le code PIN est peut-être incorrect." + "Impossible de changer l\'état de verrouillage de la carte SIM.\nLe code PIN est peut-être incorrect." "OK" "Annuler" "État de la tablette" @@ -918,9 +919,9 @@ "Restaurer valeurs d\'usine" "Effacer toutes les données de la tablette" "Effacer toutes les données du téléphone" - "Cette action effacera toutes les données de la ""mémoire de stockage interne"" de votre tablette, y compris :"\n\n
  • "Votre compte Google"
  • \n
  • "Les données et paramètres du système et de l\'application"
  • \n
  • "Les applications téléchargées"
  • - "Cette action effacera toutes les données du ""stockage interne"" de votre téléphone, y compris :"\n\n
  • "Votre compte Google"
  • \n
  • "Les données et paramètres du système et de l\'application"
  • \n
  • "Les applications téléchargées"
  • - \n\n"Vous êtes actuellement connecté aux comptes suivants :"\n + "Cette action effacera toutes les données de la ""mémoire de stockage interne"" de votre tablette, y compris :\n\n"
  • "Votre compte Google"
  • \n
  • "Les données et paramètres du système et de l\'application"
  • \n
  • "Les applications téléchargées"
  • + "Cette action effacera toutes les données du ""stockage interne"" de votre téléphone, y compris :\n\n"
  • "Votre compte Google"
  • \n
  • "Les données et paramètres du système et de l\'application"
  • \n
  • "Les applications téléchargées"
  • + \n\n"Vous êtes actuellement connecté aux comptes suivants :\n"
  • "Musique"
  • \n
  • "Photos"
  • \n
  • "Autres données utilisateur"
  • \n\n"Pour supprimer la musique, les photos et les autres données utilisateur, vous devez effacer la ""mémoire de stockage USB""." \n\n"Pour supprimer la musique, les photos et les autres données utilisateur, vous devez effacer la ""carte SD""." @@ -1105,7 +1106,7 @@ "Voir processus en cache" "Réinitialiser préf. applis" "Réinitialiser préférences ?" - "Cette opération entraîne la réinitialisation de toutes les préférences pour : "\n\n" "
  • "les applications désactivées ;"
  • \n" "
  • "les notifications des applications désactivées ;"
  • \n" "
  • "les applications utilisées par défaut pour certaines actions ;"
  • \n" "
  • "les restrictions relatives aux données en arrière-plan pour les applications."
  • \n\n" Vous ne perdrez aucune des données relatives à ces applications."
    + "Cette opération entraîne la réinitialisation de toutes les préférences pour : \n\n "
  • "les applications désactivées ;"
  • \n" "
  • "les notifications des applications désactivées ;"
  • \n" "
  • "les applications utilisées par défaut pour certaines actions ;"
  • \n" "
  • "les restrictions relatives aux données en arrière-plan pour les applications."
  • \n\n" Vous ne perdrez aucune des données relatives à ces applications."
    "Réinitialiser applis" "Gérer l\'espace" "Filtrer" @@ -1240,9 +1241,7 @@ "Appuyez sur Ctrl+Espace pour changer disposition" "Par défaut" "Dispositions du clavier" - "Dictionnaire personnel" - "Dictionnaire personnel" - "Dictionnaires personnels" + "Dictionnaire personnel" "Ajouter" "Ajouter au dictionnaire" @@ -1303,6 +1302,11 @@ "Inclure une option permettant d\'établir un rapport de bug dans le menu de démarrage" "Rester activé" "L\'écran ne se met jamais en veille lors du chargement" + "Activer les journaux par espionnage HCI Bluetooth" + "Enregistrer tous les paquets HCI Bluetooth dans un fichier" + "Sélect. moteur d\'exécution" + "Sélect. moteur d\'exécution" + "Redémarrer pour remplacer le moteur d\'exécution %1$s par %2$s ?" "Positions fictives" "Autoriser les positions fictives" "Autoriser le débogage USB ?" @@ -1315,11 +1319,13 @@ "Protéger mémoire de stockage USB" "Les applis doivent demander l\'autorisation pour lire la mémoire." "Protéger mémoire stockage USB ?" - "Lorsque la mémoire de stockage USB est protégée, les applications doivent demander l\'autorisation de lire les données de la mémoire de stockage externe."\n\n"Certaines applications peuvent ne pas fonctionner jusqu\'à ce que leurs développeurs les mettent à jour." + "Lorsque la mémoire de stockage USB est protégée, les applications doivent demander l\'autorisation de lire les données de la mémoire de stockage externe.\n\nCertaines applications peuvent ne pas fonctionner jusqu\'à ce que leurs développeurs les mettent à jour." "Protéger la carte SD" "Les applications doivent demander autorisation de lire carte SD." "Protéger la carte SD ?" - "Lorsque la carte SD est protégée, les applications doivent demander l\'autorisation de lire les données de la mémoire de stockage externe."\n\n"Certaines applications peuvent ne pas fonctionner jusqu\'à ce que leurs développeurs les mettent à jour." + "Lorsque la carte SD est protégée, les applications doivent demander l\'autorisation de lire les données de la mémoire de stockage externe.\n\nCertaines applications peuvent ne pas fonctionner jusqu\'à ce que leurs développeurs les mettent à jour." + "Terminal local" + "Activer l\'application Terminal permettant l\'accès au shell local" "Choisir un gadget" "Choisir un widget" "Créer un widget et autoriser l\'accès ?" @@ -1340,11 +1346,11 @@ "Services" "Système" "Gestes d\'agrandissement" - "Lorsque cette fonctionnalité est activée, vous pouvez effectuer des zooms avant et arrière en appuyant trois fois sur l\'écran."\n\n"Lorsque vous effectuez un zoom avant, vous pouvez :"\n
    • "Effectuer un panoramique : faites glisser deux doigts ou plus sur l\'écran."
    • \n
    • "Régler le niveau de zoom : pincez deux doigts ou plus, ou écartez-les."
    \n\n"Vous pouvez également agrandir le contenu se trouvant sous votre doigt en appuyant trois fois sur l\'écran et en prolongeant la troisième pression. Lorsque la loupe est activée, vous pouvez faire glisser votre doigt sur l\'écran pour en explorer les différentes parties. Relevez votre doigt pour revenir à l\'état précédent."\n\n"Remarque : vous pouvez appuyer trois fois sur l\'écran pour agrandir le contenu partout, sauf sur le clavier et la barre de navigation."
    + "Lorsque cette fonctionnalité est activée, vous pouvez effectuer des zooms avant et arrière en appuyant trois fois sur l\'écran.\n\nLorsque vous effectuez un zoom avant, vous pouvez :\n"
    • "Effectuer un panoramique : faites glisser deux doigts ou plus sur l\'écran."
    • \n
    • "Régler le niveau de zoom : pincez deux doigts ou plus, ou écartez-les."
    \n\n"Vous pouvez également agrandir le contenu se trouvant sous votre doigt en appuyant trois fois sur l\'écran et en prolongeant la troisième pression. Lorsque la loupe est activée, vous pouvez faire glisser votre doigt sur l\'écran pour en explorer les différentes parties. Relevez votre doigt pour revenir à l\'état précédent.\n\nRemarque : vous pouvez appuyer trois fois sur l\'écran pour agrandir le contenu partout, sauf sur le clavier et la barre de navigation."
    "Raccourci d\'accessibilité" "Activé" "Désactivé" - "Lorsque cette fonctionnalité est activée, vous pouvez rapidement activer les fonctionnalités d\'accessibilité en deux étapes :"\n\n"Étape 1 : Appuyez de manière prolongée sur le bouton Marche/Arrêt jusqu\'à ce que le téléphone sonne ou vibre."\n\n"Étape 2 : Appuyez de manière prolongée avec deux doigts jusqu\'à ce que vous entendiez la confirmation audio."\n\n"Si l\'appareil est utilisé par plusieurs personnes, l’utilisation de ce raccourci sur l\'écran de verrouillage active l\'accessibilité de manière temporaire jusqu\'au déverrouillage de l\'appareil." + "Lorsque cette fonctionnalité est activée, vous pouvez rapidement activer les fonctionnalités d\'accessibilité en deux étapes :\n\nÉtape 1 : Appuyez de manière prolongée sur le bouton Marche/Arrêt jusqu\'à ce que le téléphone sonne ou vibre.\n\nÉtape 2 : Appuyez de manière prolongée avec deux doigts jusqu\'à ce que vous entendiez la confirmation audio.\n\nSi l\'appareil est utilisé par plusieurs personnes, l’utilisation de ce raccourci sur l\'écran de verrouillage active l\'accessibilité de manière temporaire jusqu\'au déverrouillage de l\'appareil." "Grands caractères" "Loupe" "Mise à jour auto de la loupe" @@ -1366,6 +1372,16 @@ "TalkBack fournit des commentaires audio aux personnes malvoyantes. Voulez-vous l\'installer gratuitement depuis l\'Android Market ?" "Aucune description fournie" "Paramètres" + "Impression" + "Paramètres d\'impression" + "Services" + "Utiliser %1$s ?" + "Le service %1$s peut recevoir les tâches d\'impression. Il est possible que les documents que vous imprimez contiennent des données confidentielles." + "Aucun service installé" + "Paramètres" + "Ajouter des imprimantes" + "Activé" + "Désactivé" "Batterie" "Répartition de l\'utilisation de la batterie" "Info d\'utilisation batterie indispo" @@ -1405,8 +1421,10 @@ "Wi-Fi actif" "Tablette" "Téléphone" - "Données envoyées" - "Données reçues" + "Données mobiles envoyées" + "Données mobiles reçues" + "Données Wi‑Fi envoyées" + "Données Wi‑Fi reçues" "Audio" "Vidéo" "Durée d\'activation" @@ -1460,6 +1478,7 @@ "Ton" "Affecte le ton utilisé par la synthèse vocale" "Langue" + "Langue non sélectionnée" "Définir la langue utilisée par la synthèse vocale" "Écouter un échantillon" "Lire une courte démonstration de la synthèse vocale" @@ -1594,7 +1613,7 @@ "L\'EAP n\'est pas compatible." "Impossible de paramétrer de connexion Wi-Fi EAP lors de la configuration. Une fois celle-ci effectuée, vous pourrez le faire via Paramètres > Sans fil et réseaux." "La connexion peut prendre quelques minutes…" - "Appuyez sur ""Suivant"" pour poursuivre la configuration."\n\n"Appuyez sur ""Précédent"" pour vous connecter à un autre réseau Wi-Fi." + "Appuyez sur ""Suivant"" pour poursuivre la configuration.\n\nAppuyez sur ""Précédent"" pour vous connecter à un autre réseau Wi-Fi." "Synchronisation activée" "Synchronisation désactivée" "Erreur de synchronisation." @@ -1676,8 +1695,7 @@ "Faire clignoter les éléments dessinés avec le GPU" "Mises à jour couches mat." "Couches matérielles en vert une fois mises à jour" - "Afficher dépassements GPU" - "Du mieux au pire : bleu, vert, rouge clair, rouge" + "Déboguer les conflits GPU" "Désact. superpos. matér." "Toujours utiliser le GPU pour la composition écran" "Activer les traces OpenGL" @@ -1738,11 +1756,11 @@ "Désactiver données arrière-plan sur réseaux mobiles. Utiliser autres réseaux si dispos." "Pour restreindre les données en arrière-plan, définissez un quota de données mobiles." "Limiter les données en arrière-plan ?" - "Cette fonctionnalité peut empêcher certaines applications de s\'exécuter lorsque celles-ci sont dépendantes des données en arrière-plan et que seuls des réseaux mobiles sont disponibles."\n\n"Vous trouverez des options plus adaptées en matière de contrôle de la consommation des données dans les paramètres de l\'application." + "Cette fonctionnalité peut empêcher certaines applications de s\'exécuter lorsque celles-ci sont dépendantes des données en arrière-plan et que seuls des réseaux mobiles sont disponibles.\n\nVous trouverez des options plus adaptées en matière de contrôle de la consommation des données dans les paramètres de l\'application." "La limitation des données en arrière-plan n\'est disponible que lorsque vous avez défini un plafond de données mobiles." "Activer synchro auto données ?" - "Les modifications que vous apportez à vos comptes sur le Web sont automatiquement copiées sur votre tablette."\n\n"Certains comptes permettent également de copier automatiquement sur le Web toutes les modifications que vous effectuez sur la tablette. C\'est le cas des comptes Google."\n\n"Pour sélectionner le type d\'informations à synchroniser au sein de chaque compte, accédez à Paramètres > Comptes." - "Les modifications que vous apportez à vos comptes sur le Web sont automatiquement copiées sur votre téléphone."\n\n"Certains comptes permettent également de copier automatiquement sur le Web toutes les modifications que vous effectuez sur le téléphone. C\'est le cas des comptes Google."\n\n"Pour sélectionner le type d\'informations à synchroniser au sein de chaque compte, accédez à Paramètres > Comptes." + "Les modifications que vous apportez à vos comptes sur le Web sont automatiquement copiées sur votre tablette.\n\nCertains comptes permettent également de copier automatiquement sur le Web toutes les modifications que vous effectuez sur la tablette. C\'est le cas des comptes Google.\n\nPour sélectionner le type d\'informations à synchroniser au sein de chaque compte, accédez à Paramètres > Comptes." + "Les modifications que vous apportez à vos comptes sur le Web sont automatiquement copiées sur votre téléphone.\n\nCertains comptes permettent également de copier automatiquement sur le Web toutes les modifications que vous effectuez sur le téléphone. C\'est le cas des comptes Google.\n\nPour sélectionner le type d\'informations à synchroniser au sein de chaque compte, accédez à Paramètres > Comptes." "Désactiver synchro auto données ?" "Cela limite la consommation des données et l\'utilisation de la batterie, mais vous devrez synchroniser manuellement chaque compte pour recueillir les informations récentes. Par ailleurs, vous ne recevrez pas de notifications en cas de mise à jour." "Date de réinitialisation du cycle de consommation" @@ -1751,12 +1769,12 @@ "Définir avertissement utilisation des données" "Définir un quota d\'utilisation des données" "Limitation de la consommation de données mobiles" - "Votre connexion Internet mobile sera désactivée une fois le seuil défini atteint."\n\n"La consommation des données étant mesurée par la tablette, celle mesurée par votre opérateur peut différer. Nous vous recommandons donc de définir un seuil plus bas." - "Votre connexion Internet mobile sera désactivée une fois le seuil défini atteint."\n\n"La consommation des données étant mesurée par le téléphone, celle mesurée par votre opérateur peut différer. Nous vous recommandons donc de définir un seuil plus bas." + "Votre connexion Internet mobile sera désactivée une fois le seuil défini atteint.\n\nLa consommation des données étant mesurée par la tablette, celle mesurée par votre opérateur peut différer. Nous vous recommandons donc de définir un seuil plus bas." + "Votre connexion Internet mobile sera désactivée une fois le seuil défini atteint.\n\nLa consommation des données étant mesurée par le téléphone, celle mesurée par votre opérateur peut différer. Nous vous recommandons donc de définir un seuil plus bas." "Limiter les données en arrière-plan ?" "Si vous limitez les données mobiles en arrière-plan, certains services et applications ne fonctionneront que si vous êtes connecté à un réseau Wi-Fi." - "Si vous limitez les données mobiles en arrière-plan, certaines applications et certains services ne fonctionneront pas correctement, sauf si vous êtes connecté à un réseau Wi-Fi."\n\n"Ce paramètre affecte tous les utilisateurs de cette tablette." - "Si vous limitez les données mobiles en arrière-plan, certaines applications et certains services ne fonctionneront pas correctement, sauf si vous êtes connecté à un réseau Wi-Fi."\n\n"Ce paramètre affecte tous les utilisateurs de ce téléphone." + "Si vous limitez les données mobiles en arrière-plan, certaines applications et certains services ne fonctionneront pas correctement, sauf si vous êtes connecté à un réseau Wi-Fi.\n\nCe paramètre affecte tous les utilisateurs de cette tablette." + "Si vous limitez les données mobiles en arrière-plan, certaines applications et certains services ne fonctionneront pas correctement, sauf si vous êtes connecté à un réseau Wi-Fi.\n\nCe paramètre affecte tous les utilisateurs de ce téléphone." "^1""^2"\n"alerte" "^1""^2"\n"plafond" "Applications supprimées" @@ -1845,8 +1863,8 @@ "Utilisateur" "Profil limité" "Ajouter un utilisateur" - "Vous pouvez partager cet appareil avec d\'autres personnes en créant des utilisateurs. Chaque utilisateur dispose de son propre espace, où il peut personnaliser, entre autres, ses applications et son fond d\'écran. Chacun peut également modifier les paramètres de la tablette, tels que le Wi-Fi, qui affectent tous les utilisateurs."\n\n"Lorsque vous créez un utilisateur, celui-ci doit suivre une procédure de configuration."\n\n"N\'importe quel utilisateur peut accepter, au nom de tous les autres, des autorisations mises à jour relatives aux applications." - "Lorsque vous créez un nouvel utilisateur, celui-ci doit suivre une procédure d\'installation."\n\n"N\'importe quel utilisateur peut accepter des autorisations mises à jour pour les applications au nom de tous les autres." + "Vous pouvez partager cet appareil avec d\'autres personnes en créant des utilisateurs. Chaque utilisateur dispose de son propre espace, où il peut personnaliser, entre autres, ses applications et son fond d\'écran. Chacun peut également modifier les paramètres de la tablette, tels que le Wi-Fi, qui affectent tous les utilisateurs.\n\nLorsque vous créez un utilisateur, celui-ci doit suivre une procédure de configuration.\n\nN\'importe quel utilisateur peut accepter, au nom de tous les autres, des autorisations mises à jour relatives aux applications." + "Lorsque vous créez un nouvel utilisateur, celui-ci doit suivre une procédure d\'installation.\n\nN\'importe quel utilisateur peut accepter des autorisations mises à jour pour les applications au nom de tous les autres." "Configurer l\'utilisateur ?" "Assurez-vous que la personne est disponible, et qu\'elle peut utiliser la tablette et configurer son espace." "Configurer le profil maintenant ?" @@ -1877,6 +1895,9 @@ "Ce paramètre affecte tous les utilisateurs de ce téléphone." "Modifier la langue" "Modifier la taille de la police" + "Restrictions" + "Annuler les restrictions" + "Modifier le code PIN" "Afficher notifications" "Aide" "Compte pour contenu" diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml index 6ae78a90fee..678b837713a 100644 --- a/res/values-hi/arrays.xml +++ b/res/values-hi/arrays.xml @@ -233,7 +233,8 @@ "स्थान" "व्यक्तिगत" "संदेश सेवा" - "उपकरण" + "मीडिया" + "उपकरण"
    "अस्पष्ट स्थान" @@ -267,6 +268,17 @@ "ऑडियो चलाएं" "क्लिपबोर्ड पढ़ें" "क्लिपबोर्ड बदलें" + "मीडिया बटन" + "ऑडियो फ़ोकस" + "मास्टर वॉल्यूम" + "ध्वनि वॉल्यूम" + "रिंग वॉल्यूम" + "मीडिया वॉल्‍यूम" + "अलार्म वॉल्यूम" + "सूचना वॉल्‍यूम" + "bluetooth वॉल्यूम" + "सचेत रखें" + "मॉनिटर का स्थान" "स्थान" @@ -300,12 +312,33 @@ "ऑडियो चलाएं" "क्लिपबोर्ड पढ़ें" "क्लिपबोर्ड बदलें" + "मीडिया बटन" + "ऑडियो फ़ोकस" + "मास्टर वॉल्यूम" + "ध्वनि वॉल्यूम" + "रिंग वॉल्यूम" + "मीडिया वॉल्‍यूम" + "अलार्म वॉल्यूम" + "सूचना वॉल्‍यूम" + "Bluetooth वॉल्‍यूम" + "सचेत रखें" + "स्थान" "कम" "मध्यम" "अधिक" + + "Dalvik" + "ART" + "ART (डीबग)" + + + "Dalvik का उपयोग करें" + "ART का उपयोग करें" + "ART डीबग बिल्ड का उपयोग करें" + "कभी न जांचें" "केवल DRM सामग्री जांचें" @@ -367,6 +400,11 @@ "रेखाओं के रूप में स्‍क्रीन पर" "adb shell dumpsys gfxinfo में" + + "बंद" + "ओवरड्रॉ क्षेत्रों को दिखाएं" + "ओवरड्रॉ काउंटर दिखाएं" + "मानक सीमा" "कोई पृष्ठभूमि प्रक्रियाएं नहीं" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index fb6bb2ef779..a99ff8beca8 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -275,8 +275,8 @@ "आपने डेटा कनेक्टिविटी खो दी है क्योंकि आपने डेटा रोमिंग बंद रखकर अपना होम नेटवर्क छोड़ दिया." "इसे चालू करें" "जब आप डेटा रोमिंग की अनुमति देते हैं, तो परिणामस्वरूप आप पर रोमिंग शुल्‍क लग सकते हैं!" - "जब आप डेटा रोमिंग की अनुमति देते हैं, तो हो सकता है कि आपको अधिक रोमिंग शुल्क लगे!"\n\n"यह सेटिंग इस टेबलेट के सभी उपयोगकर्ताओं को प्रभावित करती है." - "जब आप डेटा रोमिंग की अनुमति देते हैं, तो हो सकता है कि आपको अधिक रोमिंग शुल्क लगे!"\n\n"यह सेटिंग इस फ़ोन के सभी उपयोगकर्ताओं को प्रभावित करती है." + "जब आप डेटा रोमिंग की अनुमति देते हैं, तो हो सकता है कि आपको अधिक रोमिंग शुल्क लगे!\n\nयह सेटिंग इस टेबलेट के सभी उपयोगकर्ताओं को प्रभावित करती है." + "जब आप डेटा रोमिंग की अनुमति देते हैं, तो हो सकता है कि आपको अधिक रोमिंग शुल्क लगे!\n\nयह सेटिंग इस फ़ोन के सभी उपयोगकर्ताओं को प्रभावित करती है." "डेटा रोमिंग की अनुमति दें?" "ऑपरेटर चयन" "कोई नेटवर्क ऑपरेटर चुनें" @@ -322,8 +322,8 @@ "हर बार अपना टेबलेट चालू करते समय आपको उसे डीक्रिप्‍ट करने के लिए एक संख्‍यात्‍मक पिन या पासवर्ड की आवश्‍यकता होती है" "हर बार अपना फ़ोन चालू करते समय आपको उसे डीक्रिप्‍ट करने के लिए एक संख्‍यात्‍मक पिन या पासवर्ड की आवश्‍यकता होती है" "एन्‍िक्रप्ट किया गया" - "आप अपने खाते, सेटिंग, डाउनलोड किए गए एप्लिकेशन और उनका डेटा, मीडिया, और अन्‍य फ़ाइलें एन्क्रिप्ट कर सकते हैं. जब आप अपना टेबलेट एन्क्रिप्ट कर लें, तो हर बार उसे चालू करने पर आपको उसे डीक्रिप्ट करने के लिए संख्यात्मक पिन या पासवर्ड लिखना होगा. आप अपना सभी डेटा मिटाकर, फ़ैक्टरी डेटा रीसेट किए जाने के अलावा अपने टेबलेट को डीक्रिप्ट नहीं कर सकते."\n\n"एन्क्रिप्शन एक घंटा या अधिक समय लेता है. आपको चार्ज की हुई बैटरी से प्रारंभ करना चाहिए और एन्क्रिप्शन पूर्ण होने तक अपने टेबलेट को प्लग इन रखना चाहिए. यदि आप एन्क्रिप्शन प्रक्रिया को बाधित करते हैं, तो आप अपना कुछ या सभी डेटा खो देंगे." - "आप अपने खाते, सेटिंग, डाउनलोड किए गए एप्लिकेशन और उनका डेटा, मीडिया, और अन्‍य फ़ाइलें एन्क्रिप्ट कर सकते हैं. जब आप अपना फ़ोन एन्क्रिप्ट कर लें, तो हर बार उसे चालू करने पर आपको उसे डीक्रिप्ट करने के लिए संख्यात्मक पिन या पासवर्ड लिखना होगा. आप अपना सभी डेटा मिटाकर, फ़ैक्टरी डेटा रीसेट किए जाने के अलावा अपने टेबलेट को डीक्रिप्ट नहीं कर सकते."\n\n"एन्क्रिप्शन एक घंटा या अधिक समय लेता है. आपको चार्ज की हुई बैटरी से प्रारंभ करना चाहिए और एन्क्रिप्शन पूर्ण होने तक अपने फ़ोन को प्लग इन रखना चाहिए. यदि आप एन्क्रिप्शन प्रक्रिया को बाधित करते हैं, तो आप अपना कुछ या सभी डेटा खो देंगे." + "आप अपने खाते, सेटिंग, डाउनलोड किए गए एप्लिकेशन और उनका डेटा, मीडिया, और अन्‍य फ़ाइलें एन्क्रिप्ट कर सकते हैं. जब आप अपना टेबलेट एन्क्रिप्ट कर लें, तो हर बार उसे चालू करने पर आपको उसे डीक्रिप्ट करने के लिए संख्यात्मक पिन या पासवर्ड लिखना होगा. आप अपना सभी डेटा मिटाकर, फ़ैक्टरी डेटा रीसेट किए जाने के अलावा अपने टेबलेट को डीक्रिप्ट नहीं कर सकते.\n\nएन्क्रिप्शन एक घंटा या अधिक समय लेता है. आपको चार्ज की हुई बैटरी से प्रारंभ करना चाहिए और एन्क्रिप्शन पूर्ण होने तक अपने टेबलेट को प्लग इन रखना चाहिए. यदि आप एन्क्रिप्शन प्रक्रिया को बाधित करते हैं, तो आप अपना कुछ या सभी डेटा खो देंगे." + "आप अपने खाते, सेटिंग, डाउनलोड किए गए एप्लिकेशन और उनका डेटा, मीडिया, और अन्‍य फ़ाइलें एन्क्रिप्ट कर सकते हैं. जब आप अपना फ़ोन एन्क्रिप्ट कर लें, तो हर बार उसे चालू करने पर आपको उसे डीक्रिप्ट करने के लिए संख्यात्मक पिन या पासवर्ड लिखना होगा. आप अपना सभी डेटा मिटाकर, फ़ैक्टरी डेटा रीसेट किए जाने के अलावा अपने टेबलेट को डीक्रिप्ट नहीं कर सकते.\n\nएन्क्रिप्शन एक घंटा या अधिक समय लेता है. आपको चार्ज की हुई बैटरी से प्रारंभ करना चाहिए और एन्क्रिप्शन पूर्ण होने तक अपने फ़ोन को प्लग इन रखना चाहिए. यदि आप एन्क्रिप्शन प्रक्रिया को बाधित करते हैं, तो आप अपना कुछ या सभी डेटा खो देंगे." "टेबलेट एन्‍क्रिप्‍ट करें" "फ़ोन एन्‍क्रिप्‍ट करें" "अपनी बैटरी चार्ज करें और पुन: प्रयास करें." @@ -339,8 +339,8 @@ "^1 सेकंड में पुन: प्रयास करें." "अपना पासवर्ड लिखें" "एन्क्रिप्‍शन विफल" - "एन्‍क्रिप्‍शन बाधित किया था और पूर्ण नहीं हो सकता. परिणामस्‍वरूप, आपके टेबलेट का डेटा अब पहुंच योग्‍य नहीं है. "\n\n" अपने टेबलेट का उपयोग फिर से शुरू करने के लिए, आपको फ़ैक्‍टरी रीसेट करना होगा. जब आप रीसेट करने के बाद अपना टेबलेट सेट करते हैं, तो आप अपने Google खाते पर बैकअप लिए गए किसी भी डेटा को पुनर्स्थापित कर सकेंगे." - "एन्‍क्रिप्‍शन बाधित था और पूर्ण नहीं हो सकता. इसके परिणामस्‍वरूप, आपके फ़ोन का डेटा अब पहुंच योग्‍य नहीं है. "\n\n"अपने फ़ोन का उपयोग फिर से शुरू करने के लिए, आपको फ़ैक्‍टरी रीसेट करना होगा. जब आप रीसेट करने के बाद अपना फ़ोन सेट करते हैं, तो आप अपने Google खाते पर बैकअप लिए गए किसी भी डेटा को पुनर्स्थापित कर सकेंगे." + "एन्‍क्रिप्‍शन बाधित किया था और पूर्ण नहीं हो सकता. परिणामस्‍वरूप, आपके टेबलेट का डेटा अब पहुंच योग्‍य नहीं है. \n\n अपने टेबलेट का उपयोग फिर से शुरू करने के लिए, आपको फ़ैक्‍टरी रीसेट करना होगा. जब आप रीसेट करने के बाद अपना टेबलेट सेट करते हैं, तो आप अपने Google खाते पर बैकअप लिए गए किसी भी डेटा को पुनर्स्थापित कर सकेंगे." + "एन्‍क्रिप्‍शन बाधित था और पूर्ण नहीं हो सकता. इसके परिणामस्‍वरूप, आपके फ़ोन का डेटा अब पहुंच योग्‍य नहीं है. \n\nअपने फ़ोन का उपयोग फिर से शुरू करने के लिए, आपको फ़ैक्‍टरी रीसेट करना होगा. जब आप रीसेट करने के बाद अपना फ़ोन सेट करते हैं, तो आप अपने Google खाते पर बैकअप लिए गए किसी भी डेटा को पुनर्स्थापित कर सकेंगे." "इनपुट पद्धति‍ स्विच करें" "स्‍क्रीन लॉक चुनें" "बैकअप लॉक चुनें" @@ -514,6 +514,7 @@ "कनेक्ट कर रहा है" "कनेक्ट किया गया" "उपलब्ध" + "उपयोग में" "प्रदर्शन सेटिंग" "डिस्‍कनेक्‍ट करें?" "इससे <br><b>%1$s</b> के साथ आपका कनेक्शन समाप्त हो जाएगा" @@ -532,7 +533,7 @@ "बंद" "अनुपलब्‍ध है क्‍योंकि NFC बंद है" "Android Beam" - "जब यह सुविधा चालू हो, तो आप एप्लिकेशन सामग्री को किसी अन्‍य NFC-सक्षम उपकरण पर दोनों उपकरणों को पास-पास रख कर बीम कर सकते हैं. उदाहरण के लिए, आप ब्राउज़र पृष्ठ, YouTube वीडियो, लोग संपर्क, इत्‍यादि बहुत कुछ बीम कर सकते हैं."\n\n"बस दोनों उपकरणों को साथ लाएं (आमतौर पर एक के पीछे एक) और फिर अपनी स्‍क्रीन को स्‍पर्श करें. एप्लिकेशन पता लगा लेता है कि क्‍या बीम हुआ." + "जब यह सुविधा चालू हो, तो आप एप्लिकेशन सामग्री को किसी अन्‍य NFC-सक्षम उपकरण पर दोनों उपकरणों को पास-पास रख कर बीम कर सकते हैं. उदाहरण के लिए, आप ब्राउज़र पृष्ठ, YouTube वीडियो, लोग संपर्क, इत्‍यादि बहुत कुछ बीम कर सकते हैं.\n\nबस दोनों उपकरणों को साथ लाएं (आमतौर पर एक के पीछे एक) और फिर अपनी स्‍क्रीन को स्‍पर्श करें. एप्लिकेशन पता लगा लेता है कि क्‍या बीम हुआ." "नेटवर्क सेवा खोज" "अन्‍य उपकरणों पर एप्‍लिकेशन को इस उपकरण पर एप्‍लिकेशन खोजने दें" "Wi‑Fi" @@ -620,7 +621,7 @@ "%1$s द्वारा सुरक्षित" ", %1$s द्वारा सुरक्षित" "कोई नहीं" - "स्थान की सटीकता को बेहतर बनाने और अन्य प्रयोजनों के लिए, Wi-Fi बंद होने पर भी %1$s नेटवर्क स्कैनिंग को चालू करना चाहता है."\n\n"इसकी अनुमति उन सभी एप्लिकेशन के लिए दें जो स्कैन करना चाहते हैं?" + "स्थान की सटीकता को बेहतर बनाने और अन्य प्रयोजनों के लिए, Wi-Fi बंद होने पर भी %1$s नेटवर्क स्कैनिंग को चालू करना चाहता है.\n\nइसकी अनुमति उन सभी एप्लिकेशन के लिए दें जो स्कैन करना चाहते हैं?" "अनुमति दें" "अस्वीकार करें" "कनेक्‍ट करें" @@ -632,8 +633,8 @@ "रद्द करें" "फिर भी छोड़ें" "छोड़े नहीं" - "चेतावनी: आपको अतिरिक्त कैरियर डेटा शुल्क लग सकते हैं."\n\n"टेबलेट सेटअप के लिए महत्वपूर्ण नेटवर्क गतिविधि की आवश्यकता हो सकती है." - "चेतावनी: आपको अतिरिक्त कैरियर डेटा शुल्क लग सकते हैं."\n\n"फ़ोन सेटअप के लिए अत्यधिक नेटवर्क गतिविधि की आवश्यकता हो सकती है." + "चेतावनी: आपको अतिरिक्त कैरियर डेटा शुल्क लग सकते हैं.\n\nटेबलेट सेटअप के लिए महत्वपूर्ण नेटवर्क गतिविधि की आवश्यकता हो सकती है." + "चेतावनी: आपको अतिरिक्त कैरियर डेटा शुल्क लग सकते हैं.\n\nफ़ोन सेटअप के लिए अत्यधिक नेटवर्क गतिविधि की आवश्यकता हो सकती है." "चेतावनी: जब तक आपके पास इंटरनेट कनेक्शन न हो, तब तक टेबलेट सत्यापित नहीं कर पाएगा कि आपका सॉफ़्टवेयर अद्यतित है." "चेतावनी: जब तक आपके पास इंटरनेट कनेक्शन न हो, तब तक फ़ोन सत्यापित नहीं कर पाएगा कि आपका सॉफ़्टवेयर अद्यतित है." "टेबलेट इस Wi-Fi नेटवर्क से कनेक्ट नहीं हो सका था." @@ -773,9 +774,9 @@ "सिम पिन" "गलत पिन" "पिनों का मिलान नहीं होता" - "पिन नहीं बदल सकता."\n"संभवत: गलत पिन." + "पिन नहीं बदल सकता.\nसंभवत: गलत पिन." "सिम पिन सफलतापूर्वक बदला गया" - "सिम कार्ड लॉक स्‍थिति नहीं बदल सकता."\n"संभवत: गलत पिन." + "सिम कार्ड लॉक स्‍थिति नहीं बदल सकता.\nसंभवत: गलत पिन." "ठीक" "रद्द करें" "टेबलेट स्‍थिति" @@ -918,9 +919,9 @@ "फ़ैक्टरी डेटा रीसेट" "टेबलेट से सभी डेटा मिटाएं" "फ़ोन से सभी डेटा मिटाएं" - "इससे आपके टेबलेट के ""आंतरिक संग्रहण"" से सभी डेटा मिट जाएगा, जिसमें शामिल है:"\n\n
  • "आपका Google खाता"
  • \n
  • "सिस्‍टम और एप्‍लिकेशन डेटा और सेटिंग"
  • \n
  • "डाउनलोड किए गए एप्‍लिकेशन"
  • - "इससे आपके फ़ोन के ""आंतरिक संग्रहण"" से सभी डेटा मिट जाएगा, जिसमें शामिल है:"\n\n
  • "आपका Google खाता"
  • \n
  • "सिस्‍टम और एप्‍लिकेशन डेटा और सेटिंग"
  • \n
  • "डाउनलोड किए गए एप्‍लिकेशन"
  • - \n\n"आप वर्तमान में निम्‍न खातों में साइन इन हैं:"\n + "इससे आपके टेबलेट के ""आंतरिक संग्रहण"" से सभी डेटा मिट जाएगा, जिसमें शामिल है:\n\n"
  • "आपका Google खाता"
  • \n
  • "सिस्‍टम और एप्‍लिकेशन डेटा और सेटिंग"
  • \n
  • "डाउनलोड किए गए एप्‍लिकेशन"
  • + "इससे आपके फ़ोन के ""आंतरिक संग्रहण"" से सभी डेटा मिट जाएगा, जिसमें शामिल है:\n\n"
  • "आपका Google खाता"
  • \n
  • "सिस्‍टम और एप्‍लिकेशन डेटा और सेटिंग"
  • \n
  • "डाउनलोड किए गए एप्‍लिकेशन"
  • + \n\n"आप वर्तमान में निम्‍न खातों में साइन इन हैं:\n"
  • "संगीत"
  • \n
  • "फ़ोटो"
  • \n
  • "अन्‍य उपयोगकर्ता डेटा"
  • \n\n"संगीत, चित्र और अन्‍य उपयोगकर्ता डेटा साफ़ करने के लिए "" USB संग्रहण"" मिटाना होगा." \n\n"संगीत, चित्र और अन्‍य उपयोगकर्ता डेटा साफ़ करने के लिए ""SD कार्ड"" को साफ़ करना होगा." @@ -1105,7 +1106,7 @@ "कैश की गई प्रक्रियाएं दिखाएं" "एप्लि. प्राथमिकताएं रीसेट करें" "एप्लि. प्राथमिकताएं रीसेट करें?" - "इससे इनके लिए सभी प्राथमिकताएं रीसेट हो जाएंगी:"\n\n" "
  • "अक्षम एप्लिकेशन"
  • \n" "
  • "अक्षम एप्लिकेशन सूचनाएं"
  • \n" "
  • "क्रियाओं के लिए डिफ़ॉल्ट एप्लिकेशन"
  • \n" "
  • "एप्लिकेशन के लिए पृष्ठभूमि डेटा प्रतिबंध"
  • \n\n" आपका एप्लिकेशन डेटा नहीं खोएगा."
    + "इससे इनके लिए सभी प्राथमिकताएं रीसेट हो जाएंगी:\n\n "
  • "अक्षम एप्लिकेशन"
  • \n" "
  • "अक्षम एप्लिकेशन सूचनाएं"
  • \n" "
  • "क्रियाओं के लिए डिफ़ॉल्ट एप्लिकेशन"
  • \n" "
  • "एप्लिकेशन के लिए पृष्ठभूमि डेटा प्रतिबंध"
  • \n\n" आपका एप्लिकेशन डेटा नहीं खोएगा."
    "एप्लिकेशन रीसेट करें" "स्‍थान प्रबंधित करें" "फ़िल्टर" @@ -1240,9 +1241,7 @@ "स्‍विच करने हेतु, Control-Spacebar दबाएं" "डिफ़ॉल्ट" "कीबोर्ड लेआउट" - "उपयोगकर्ता शब्‍दकोश" - "व्यक्तिगत डिक्शनरी" - "व्यक्तिगत डिक्शनरी" + "व्यक्तिगत शब्दकोष" "जोड़ें" "शब्‍दकोश में जोड़ें" @@ -1303,6 +1302,11 @@ "बग रिपोर्ट लेने के लिए पावर मेनू में विकल्‍प शामिल करें" "सचेत रहें" "चार्ज होने के दौरान स्‍क्रीन कभी निष्‍क्रिय नहीं होगी" + "Bluetooth HCI स्‍नूप लॉग सक्षम करें" + "फ़ाइल के सभी Bluetooth HCI पैकेट कैप्‍चर करें" + "रनटाइम चुनें" + "रनटाइम चुनें" + "रनटाइम को %1$s से %2$s में बदलने के लिए रीबूट करें?" "कृत्रिम स्‍थानों को अनुमति दें" "कृत्रिम स्‍थानों को अनुमति दें" "USB डीबग करने की अनुमति दें?" @@ -1315,11 +1319,13 @@ "USB संग्रहण सुरक्षित करें" "USB संग्रहण पढ़ने हेतु एप्‍लिकेशन को अनुमति का अनुरोध करना होगा" "USB संग्रहण सुरक्षित करें?" - "USB संग्रहण के सुरक्षित होने पर, एप्‍लिकेशन को बाहरी संग्रहण से डेटा पढ़ने की अनुमति का अनुरोध करना होगा."\n\n"हो सकता है कुछ एप्‍लिकेशन उनके डेवलपर द्वारा अपडेट नहीं किए जाने तक कार्य न करें." + "USB संग्रहण के सुरक्षित होने पर, एप्‍लिकेशन को बाहरी संग्रहण से डेटा पढ़ने की अनुमति का अनुरोध करना होगा.\n\nहो सकता है कुछ एप्‍लिकेशन उनके डेवलपर द्वारा अपडेट नहीं किए जाने तक कार्य न करें." "SD कार्ड सुरक्षित करें" "SD कार्ड पढ़ने के लिए एप्‍लिकेशन को अनुमति का अनुरोध करना होगा" "SD कार्ड सुरक्षित करें?" - "SD कार्ड के सुरक्षित होने पर, एप्‍लिकेशन को बाहरी संग्रहण से डेटा पढ़ने की अनुमति का अनुरोध करना होगा."\n\n"हो सकता है कुछ एप्‍लिकेशन उनके डेवलपर द्वारा अपडेट नहीं किए जाने तक कार्य न करें." + "SD कार्ड के सुरक्षित होने पर, एप्‍लिकेशन को बाहरी संग्रहण से डेटा पढ़ने की अनुमति का अनुरोध करना होगा.\n\nहो सकता है कुछ एप्‍लिकेशन उनके डेवलपर द्वारा अपडेट नहीं किए जाने तक कार्य न करें." + "स्थानीय टर्मिनल" + "स्थानीय शेल एक्सेस ऑफ़र करने वाला टर्मिनल एप्लिकेशन सक्षम करें" "गैजेट चुनें" "विजेट चुनें" "विजेट बनाएं और पहुंच की अनुमति दें?" @@ -1340,11 +1346,11 @@ "सेवाएं" "सिस्‍टम" "आवर्धन जेस्चर" - "इस सुविधा के चालू होने पर, आप स्क्रीन को तीन बार टैप करके ज़ूम इन और आउट कर सकते हैं."\n\n"ज़ूम इन होने पर, आप निम्न कार्य कर सकते हैं:"\n
    • "पैन करना: स्क्रीन पर दो या अधिक अंगुलियों को खींचें."
    • \n
    • "ज़ूम स्तर एडजस्ट करना: दो या अधिक अंगुलियों को साथ में पिंच करें या उन्हें दूर फैलाएं."
    \n\n"आप तीन बार टैप करके और टैप किया हुआ रखकर, अपनी अंगुलियों के नीचे की सामग्री को अस्थायी रूप से आवर्धित भी कर सकते हैं. इस आवर्धित स्थिति में, आप स्क्रीन के विभिन्न भागों को एक्सप्लोर करने के लिए अपनी अंगुलियों को खींच सकते हैं. अपनी पूर्व स्थिति में पहुंचने के लिए अपनी अंगुली को उठाएं."\n\n"ध्यान दें: आवर्धन कार्यों के लिए कीबोर्ड और नेविगेशन बार को छोड़कर कहीं भी तीन बार टैप करें."
    + "इस सुविधा के चालू होने पर, आप स्क्रीन को तीन बार टैप करके ज़ूम इन और आउट कर सकते हैं.\n\nज़ूम इन होने पर, आप निम्न कार्य कर सकते हैं:\n"
    • "पैन करना: स्क्रीन पर दो या अधिक अंगुलियों को खींचें."
    • \n
    • "ज़ूम स्तर एडजस्ट करना: दो या अधिक अंगुलियों को साथ में पिंच करें या उन्हें दूर फैलाएं."
    \n\n"आप तीन बार टैप करके और टैप किया हुआ रखकर, अपनी अंगुलियों के नीचे की सामग्री को अस्थायी रूप से आवर्धित भी कर सकते हैं. इस आवर्धित स्थिति में, आप स्क्रीन के विभिन्न भागों को एक्सप्लोर करने के लिए अपनी अंगुलियों को खींच सकते हैं. अपनी पूर्व स्थिति में पहुंचने के लिए अपनी अंगुली को उठाएं.\n\nध्यान दें: आवर्धन कार्यों के लिए कीबोर्ड और नेविगेशन बार को छोड़कर कहीं भी तीन बार टैप करें."
    "पहुंच-योग्यता शॉर्टकट" "चालू" "बंद" - "यह सुविधा चालू होने पर आप पहुंच-योग्यता सुविधाओं को दो चरणों में तेज़ी से सक्षम कर सकते हैं:"\n\n"चरण 1: पावर बटन को तब तक दबाए रखें जब तक आपको ध्वनि न सुनाई दे या कंपन महसूस न हो."\n\n"चरण 2: दो अंगुलियों से तब तक स्पर्श करके रखें जब तक आपको ऑडियो पुष्टिकरण न सुनाई दे."\n\n"यदि उपकरण के एक से अधिक उपयोगकर्ता हैं, तो लॉक स्क्रीन पर इस शॉर्टकट का उपयोग करने से पहुंच-योग्यता तब तक के लिए अस्थायी रूप से सक्षम हो जाती है जब तक कि उपकरण अनलॉक न किया जाए." + "यह सुविधा चालू होने पर आप पहुंच-योग्यता सुविधाओं को दो चरणों में तेज़ी से सक्षम कर सकते हैं:\n\nचरण 1: पावर बटन को तब तक दबाए रखें जब तक आपको ध्वनि न सुनाई दे या कंपन महसूस न हो.\n\nचरण 2: दो अंगुलियों से तब तक स्पर्श करके रखें जब तक आपको ऑडियो पुष्टिकरण न सुनाई दे.\n\nयदि उपकरण के एक से अधिक उपयोगकर्ता हैं, तो लॉक स्क्रीन पर इस शॉर्टकट का उपयोग करने से पहुंच-योग्यता तब तक के लिए अस्थायी रूप से सक्षम हो जाती है जब तक कि उपकरण अनलॉक न किया जाए." "बड़ा पाठ" "स्क्रीन आवर्धन" "स्क्रीन आवर्धन को स्वतः अपडेट करें" @@ -1366,6 +1372,16 @@ "TalkBack नेत्रहीन और कम-दृष्टि वाले उपयोगकर्ताओं के लिए बोलकर फ़ीडबैक प्रदान करता है. क्‍या आप इसे Android Market से निशुल्‍क इंस्‍टॉल करना चाहते हैं?" "कोई विवरण नहीं दिया गया." "सेटिंग" + "प्रिंटिंग" + "प्रिंटिंग सेटिंग" + "सेवाएं" + "%1$s का उपयोग करें?" + "%1$s आपके द्वारा प्रिंट किए जाने वाले दस्तावेज़ों को प्राप्त कर सकती है. ऐसे दस्तावेज़ों में संवेदनशील डेटा हो सकता है." + "कोई सेवा इंस्‍टॉल नहीं है" + "सेटिंग" + "प्रिंटर जोड़ें" + "चालू" + "बंद" "बैटरी" "बैटरी का उपयोग कौन कर रहा है" "बैटरी उपयोग डेटा उपलब्ध नहीं है." @@ -1405,8 +1421,10 @@ "Wi-Fi चल रहा है" "टेबलेट" "फ़ोन" - "डेटा भेजा गया" - "डेटा प्राप्त" + "मोबाइल डेटा भेजा गया" + "मोबाइल डेटा प्राप्त हुआ" + "Wi‑Fi डेटा भेजा गया" + "Wi‑Fi डेटा प्राप्त हुआ" "ऑडियो" "वीडियो" "चालू करने का समय" @@ -1460,6 +1478,7 @@ "पिच" "बोले गए पाठ के लहजे को प्रभावित करता है" "भाषा" + "भाषा नहीं चुनी गई है" "बोले गए पाठ के लिए भाषा-विशिष्ट ध्‍वनि सेट करता है" "एक उदाहरण सुनें" "वाक् संश्लेषण का एक संक्षिप्त प्रदर्शन चलाएं" @@ -1594,7 +1613,7 @@ "EAP समर्थित नहीं है." "आप सेटअप के दौरान किसी EAP Wi-Fi कनेक्‍शन को कॉन्‍िफ़गर नहीं कर सकते. सेटअप करने के बाद, आप उसे सेटिंग > वायरलेस और नेटवर्क में कॉन्फ़िगर कर सकते हैं." "कनेक्‍ट होने में कुछ मिनट लग सकते हैं..." - "सेटअप जारी रखने के लिए ""अगला"" स्पर्श करें."\n\n"किसी भिन्न Wi‑Fi नेटवर्क से कनेक्ट करने के लिए ""वापस जाएं"" स्पर्श करें." + "सेटअप जारी रखने के लिए ""अगला"" स्पर्श करें.\n\nकिसी भिन्न Wi‑Fi नेटवर्क से कनेक्ट करने के लिए ""वापस जाएं"" स्पर्श करें." "समन्वयन सक्षम" "समन्वयन अक्षम" "समन्वयन त्रुटि." @@ -1676,8 +1695,7 @@ "GPU के साथ आरेखित करने पर विंडो में दृश्‍यों को फ़्लैश करें" "हार्डवेयर लेयर अप. दिखाएं" "हार्डवेयर लेयर अपडेट होने पर हरे फ़्लैश होते हैं" - "GPU ओवरड्रॉ दिखाएं" - "सबसे अच्छे से सबसे खराब: नीला, हरा, हल्का लाल, लाल" + "GPU ओवरड्रॉ डीबग करें" "HW ओवरले अक्षम करें" "स्‍क्रीन संयोजन के लिए हमेशा GPU का उपयोग करें" "OpenGL चिह्न सक्षम करें" @@ -1738,11 +1756,11 @@ "मो. नेटवर्क पर पृष्ठभूमि डेटा अक्षम करें. उपलब्ध होने पर गैर-मो. नेटवर्क का उपयोग होगा." "इस एप्‍लि. के लिए पृष्ठभूमि डेटा प्रतिबंधित करने हेतु, पहले मो. डेटा सीमा सेट करें." "पृष्ठभूमि डेटा प्रतिबंधित करें?" - "यह सुविधा केवल मोबाइल नेटवर्क उपलब्ध होने पर उस एप्ल‍िकेशन को कार्य करने से रोक सकती है जो पृष्ठभूमि डेटा पर निर्भर है."\n\n"आपको एप्ल‍िकेशन में उपलब्ध सेटिंग में अधिक उपयुक्त डेटा उपयोग नियंत्रण मिल सकते हैं." + "यह सुविधा केवल मोबाइल नेटवर्क उपलब्ध होने पर उस एप्ल‍िकेशन को कार्य करने से रोक सकती है जो पृष्ठभूमि डेटा पर निर्भर है.\n\nआपको एप्ल‍िकेशन में उपलब्ध सेटिंग में अधिक उपयुक्त डेटा उपयोग नियंत्रण मिल सकते हैं." "पृष्ठभूमि डेटा प्रतिबंधित करना केवल तभी संभव है जब आपने कोई नेटवर्क डेटा सीमा सेट की हुई हो." "स्वत: समन्वयन डेटा चालु करें?" - "वेब पर आपके खातों में कोई भी परिवर्तन करने पर आपके टेबलेट में उसकी प्रतिलिपि स्‍वत: बन जाएगी."\n\n"उसी प्रकार वेब पर टेबलेट में आपके द्वारा कोई भी परिवर्तन करने पर कुछ खाते उसकी प्रतिलिपि स्‍वत: बना सकते हैं. एक Google खाता इसी प्रकार कार्य करता है."\n\n"चयन करने के लिए कि प्रत्‍येक खाते के अन्तर्गत किस प्रकार की जानकारीयां समन्‍वयित करना है, सेटिंग > खाते पर जाएं." - "वेब पर आपके खातों में कोई भी परिवर्तन करने पर आपके फ़ोन में उसकी प्रतिलिपि स्‍वत: बन जाएगी."\n\n"उसी प्रकार वेब पर फ़ोन में आपके द्वारा कोई भी परिवर्तन होने पर कुछ खाते उसकी प्रतिलिपि स्‍वत: बना सकते हैं. एक Google खाता इसी प्रकार कार्य करता है."\n\n"चयन करने के लिए कि प्रत्‍येक खाते के अन्तर्गत किस प्रकार की जानकारीयां समन्‍वयित करना है, सेटिंग > खाते पर जाएं." + "वेब पर आपके खातों में कोई भी परिवर्तन करने पर आपके टेबलेट में उसकी प्रतिलिपि स्‍वत: बन जाएगी.\n\nउसी प्रकार वेब पर टेबलेट में आपके द्वारा कोई भी परिवर्तन करने पर कुछ खाते उसकी प्रतिलिपि स्‍वत: बना सकते हैं. एक Google खाता इसी प्रकार कार्य करता है.\n\nचयन करने के लिए कि प्रत्‍येक खाते के अन्तर्गत किस प्रकार की जानकारीयां समन्‍वयित करना है, सेटिंग > खाते पर जाएं." + "वेब पर आपके खातों में कोई भी परिवर्तन करने पर आपके फ़ोन में उसकी प्रतिलिपि स्‍वत: बन जाएगी.\n\nउसी प्रकार वेब पर फ़ोन में आपके द्वारा कोई भी परिवर्तन होने पर कुछ खाते उसकी प्रतिलिपि स्‍वत: बना सकते हैं. एक Google खाता इसी प्रकार कार्य करता है.\n\nचयन करने के लिए कि प्रत्‍येक खाते के अन्तर्गत किस प्रकार की जानकारीयां समन्‍वयित करना है, सेटिंग > खाते पर जाएं." "स्वत: समन्वयन डेटा बंद करें?" "यह डेटा और बैटरी उपयोग को संरक्षित करेगा, किन्‍तु हाल की जानकारी एकत्रित करने के लिए आपको प्रत्‍येक खाते का समन्‍वयन मैन्‍युअल रूप से करना होगा. और जब अपडेट होंगे तो आपको सूचनाएं प्राप्‍त नहीं होगी." "उपयोग चक्र रीसेट दिनांक" @@ -1751,12 +1769,12 @@ "डेटा उपयोग चेतावनी सेट करें" "डेटा उपयोग की सीमा सेट करें" "डेटा उपयोग सीमित करना" - "निर्दिष्ट सीमा तक पहुंचने पर आपका डेटा कनेक्‍शन अक्षम हो जाएगा."\n\n"चूंकि डेटा उपयोग को आपके टेबलेट द्वारा मापा जाता है, और आपका कैरियर उपयोग के लिए भिन्‍न तरह से शुल्क ले सकता है, इसलिए सीमित उपयोग पर विचार करें." - "निर्दिष्ट सीमा तक पहुंचने पर आपका डेटा कनेक्‍शन अक्षम हो जाएगा."\n\n"चूंकि डेटा उपयोग को आपके फ़ोन द्वारा मापा जाता है, और आपका कैरियर उपयोग के लिए भिन्‍न तरह से शुल्क ले सकता है, इसलिए सीमित उपयोग पर विचार करें." + "निर्दिष्ट सीमा तक पहुंचने पर आपका डेटा कनेक्‍शन अक्षम हो जाएगा.\n\nचूंकि डेटा उपयोग को आपके टेबलेट द्वारा मापा जाता है, और आपका कैरियर उपयोग के लिए भिन्‍न तरह से शुल्क ले सकता है, इसलिए सीमित उपयोग पर विचार करें." + "निर्दिष्ट सीमा तक पहुंचने पर आपका डेटा कनेक्‍शन अक्षम हो जाएगा.\n\nचूंकि डेटा उपयोग को आपके फ़ोन द्वारा मापा जाता है, और आपका कैरियर उपयोग के लिए भिन्‍न तरह से शुल्क ले सकता है, इसलिए सीमित उपयोग पर विचार करें." "पृष्ठभूमि डेटा प्रतिबंधित करें?" "यदि आप पृष्ठभूमि मोबाइल डेटा को प्रतिबंधित करते हैं, तो जब तक आप Wi-Fi नेटवर्क से कनेक्ट नहीं होते, तब तक कुछ एप्लिकेशन और सेवाएं काम नहीं करेंगी." - "यदि आप पृष्ठभूमि मोबाइल डेटा को प्रतिबंधित करते हैं, तो जब तक आप Wi-Fi नेटवर्क से कनेक्ट नहीं होते, तब तक कुछ एप्लिकेशन और सेवाएं काम नहीं करेंगी.."\n\n"यह सेटिंग इस टेबलेट के सभी उपयोगकर्ताओं को प्रभावित करती है." - "यदि आप पृष्ठभूमि मोबाइल डेटा को प्रतिबंधित करते हैं, तो जब तक आप Wi-Fi नेटवर्क से कनेक्ट नहीं होते, तब तक कुछ एप्लिकेशन और सेवाएं काम नहीं करेंगी."\n\n"यह सेटिंग इस फ़ोन के सभी उपयोगकर्ताओं को प्रभावित करती है." + "यदि आप पृष्ठभूमि मोबाइल डेटा को प्रतिबंधित करते हैं, तो जब तक आप Wi-Fi नेटवर्क से कनेक्ट नहीं होते, तब तक कुछ एप्लिकेशन और सेवाएं काम नहीं करेंगी..\n\nयह सेटिंग इस टेबलेट के सभी उपयोगकर्ताओं को प्रभावित करती है." + "यदि आप पृष्ठभूमि मोबाइल डेटा को प्रतिबंधित करते हैं, तो जब तक आप Wi-Fi नेटवर्क से कनेक्ट नहीं होते, तब तक कुछ एप्लिकेशन और सेवाएं काम नहीं करेंगी.\n\nयह सेटिंग इस फ़ोन के सभी उपयोगकर्ताओं को प्रभावित करती है." "^1"" ""^2"\n"चेतावनी" "^1"" ""^2"\n"सीमा" "निकाले गए एप्लिकेशन" @@ -1843,8 +1861,8 @@ "उपयोगकर्ता" "प्रतिबंधित प्रोफ़ाइल" "नया उपयोगकर्ता जोड़ें" - "आप अतिरिक्त उपयोगकर्ता बनाकर इस उपकरण को अन्य लोगों से साझा कर सकते हैं. प्रत्येक उपयोगकर्ता के पास अपना स्वयं का स्थान होता है, जिसे वह अपने एप्लिकेशन, वॉलपेपर, और ऐसी ही अन्य चीज़ों के साथ कस्टमाइज़ कर सकता है. उपयोगकर्ता Wi-Fi जैसी अन्य टेबलेट सेटिंग भी एडजस्ट कर सकते हैं जो सभी को प्रभावित करती है."\n\n"आपके द्वारा नया उपयोगकर्ता बनाने के बाद, उस व्यक्ति को सेटअप प्रक्रिया से गुज़रना आवश्यक है."\n\n"कोई भी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं की ओर से अपडेट की गई एप्लिकेशन अनुमतियां स्वीकार कर सकता है." - "आपके द्वारा नया उपयोगकर्ता बनाने के बाद, उस व्यक्ति को सेटअप प्रक्रिया से गुज़रना आवश्यक है."\n\n"कोई भी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं की ओर से अपडेट की गई एप्लिकेशन अनुमतियां स्वीकार कर सकता है." + "आप अतिरिक्त उपयोगकर्ता बनाकर इस उपकरण को अन्य लोगों से साझा कर सकते हैं. प्रत्येक उपयोगकर्ता के पास अपना स्वयं का स्थान होता है, जिसे वह अपने एप्लिकेशन, वॉलपेपर, और ऐसी ही अन्य चीज़ों के साथ कस्टमाइज़ कर सकता है. उपयोगकर्ता Wi-Fi जैसी अन्य टेबलेट सेटिंग भी एडजस्ट कर सकते हैं जो सभी को प्रभावित करती है.\n\nआपके द्वारा नया उपयोगकर्ता बनाने के बाद, उस व्यक्ति को सेटअप प्रक्रिया से गुज़रना आवश्यक है.\n\nकोई भी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं की ओर से अपडेट की गई एप्लिकेशन अनुमतियां स्वीकार कर सकता है." + "आपके द्वारा नया उपयोगकर्ता बनाने के बाद, उस व्यक्ति को सेटअप प्रक्रिया से गुज़रना आवश्यक है.\n\nकोई भी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं की ओर से अपडेट की गई एप्लिकेशन अनुमतियां स्वीकार कर सकता है." "उपयोगकर्ता को अभी सेट करें?" "सुनिश्चित करें कि व्यक्ति टेबलेट लेने और अपना स्थान सेट करने के लिए उपलब्ध है" "प्रोफ़ाइल अभी सेट करें?" @@ -1875,6 +1893,9 @@ "यह सेटिंग इस फ़ोन के सभी उपयोगकर्ताओं को प्रभावित करती है." "भाषा बदलें" "फ़ॉन्ट आकार बदलें" + "प्रतिबंध" + "प्रतिबंधों को निकालें" + "पिन बदलें" "सूचना दिखाएं" "सहायता" "सामग्री के लिए खाता" diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml index 0335e8cc468..6ef5fdce200 100644 --- a/res/values-hr/arrays.xml +++ b/res/values-hr/arrays.xml @@ -233,7 +233,8 @@ "Lokacija" "Osobno" "Slanje poruka" - "Uređaj" + "Mediji" + "Uređaj"
    "približna lokacija" @@ -267,6 +268,17 @@ "reprodukcija audiozapisa" "čitaj međuspremnik" "izmijeni međuspremnik" + "medijski gumbi" + "audiofokus" + "glavna glasnoća" + "glasnoća glasa" + "glasnoća zvona" + "glasnoća medija" + "glasnoća alarma" + "glasnoća obavijesti" + "glasnoća Bluetootha" + "zadrži u aktivnom stanju" + "praćenje lokacije" "Lokacija" @@ -300,12 +312,33 @@ "Reprodukcija audiozapisa" "Čitaj međuspremnik" "Izmijeni međuspremnik" + "Medijski gumbi" + "Audiofokus" + "Glavna glasnoća" + "Glasnoća glasa" + "Glasnoća zvona" + "Glasnoća medija" + "Glasnoća alarma" + "Glasnoća obavijesti" + "Glasnoća Bluetootha" + "Zadrži u aktivnom stanju" + "Lokacija" "Kratko" "Srednje" "Dugo" + + "Dalvik" + "ART" + "ART (uklanjanje program. pogrešaka)" + + + "Upotrijebi Dalvik" + "Upotrijebi ART" + "Upotrijebi verziju ART-a za uklanjanje programskih pogrešaka" + "Nikad ne provjeravaj" "Provjeri samo DRM sadržaj" @@ -367,6 +400,11 @@ "Na zaslonu u obliku crta" "U naredbi adb shell dumpsys gfxinfo" + + "Isključeno" + "Pokaži područja slojnih iscrtavanja" + "Pokaži brojač slojnih iscrtavanja" + "Standardna granica" "Nema pozadinskih procesa" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 2ca8e96eaae..336d73c7de0 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -275,8 +275,8 @@ "Izgubili ste podatkovnu vezu jer ste isključili mrežni roaming podataka." "Uključi" "Ako omogućite roaming podataka, može doći do značajnih troškova roaminga!" - "Kada dopustite podatkovni roaming, mogu nastati značajni troškovi roaminga!"\n\n"Ova postavka utječe na sve korisnike na ovom tabletu." - "Kada dopustite podatkovni roaming, mogu nastati značajni troškovi roaminga!"\n\n"Ova postavka utječe na sve korisnike na ovom telefonu." + "Kada dopustite podatkovni roaming, mogu nastati značajni troškovi roaminga!\n\nOva postavka utječe na sve korisnike na ovom tabletu." + "Kada dopustite podatkovni roaming, mogu nastati značajni troškovi roaminga!\n\nOva postavka utječe na sve korisnike na ovom telefonu." "Dopusti roaming podataka?" "Odabir operatora" "Odaberite mrežnog operatera" @@ -322,8 +322,8 @@ "Traži brojčani PIN ili zaporku za dekripciju tablet računala svaki put kada se uključi" "Traži brojčani PIN ili zaporku za dekripciju telefona svaki put kada se uključi" "Kriptirano" - "Možete kriptirati svoje račune, postavke, preuzete aplikacije i njihove podatkovne, multimedijske i ostale datoteke. Nakon kriptiranja tabletnog računala morate upisati numerički PIN ili zaporku kako biste ga dešifrirali svaki put kada ga uključite: svoje tabletno računalo možete dešifrirati samo vraćanjem u tvorničko stanje čime se brišu svi vaši podaci."\n\n"Enkripcija traje jedan sat ili dulje. Morate započeti s napunjenom baterijom i tabletno računalo držati priključeno dok se enkripcija ne završi. Ako prekinete postupak enkripcije, izgubit ćete neke ili sve svoje podatke." - "Možete kriptirati svoje račune, postavke, preuzete aplikacije i njihove podatkovne, multimedijske i ostale datoteke. Nakon kriptiranja telefona morate upisati numerički PIN ili zaporku kako biste ga dešifrirali svaki put kada ga uključite. Svoj telefon možete dešifrirati samo vraćanjem na tvorničke postavke čime se brišu svi vaši podaci."\n\n"Enkripcija traje jedan sat ili dulje. Morate započeti s napunjenom baterijom i telefon držati priključen dok se enkripcija ne završi. Ako prekinete postupak enkripcije, izgubit ćete neke ili sve svoje podatke." + "Možete kriptirati svoje račune, postavke, preuzete aplikacije i njihove podatkovne, multimedijske i ostale datoteke. Nakon kriptiranja tabletnog računala morate upisati numerički PIN ili zaporku kako biste ga dešifrirali svaki put kada ga uključite: svoje tabletno računalo možete dešifrirati samo vraćanjem u tvorničko stanje čime se brišu svi vaši podaci.\n\nEnkripcija traje jedan sat ili dulje. Morate započeti s napunjenom baterijom i tabletno računalo držati priključeno dok se enkripcija ne završi. Ako prekinete postupak enkripcije, izgubit ćete neke ili sve svoje podatke." + "Možete kriptirati svoje račune, postavke, preuzete aplikacije i njihove podatkovne, multimedijske i ostale datoteke. Nakon kriptiranja telefona morate upisati numerički PIN ili zaporku kako biste ga dešifrirali svaki put kada ga uključite. Svoj telefon možete dešifrirati samo vraćanjem na tvorničke postavke čime se brišu svi vaši podaci.\n\nEnkripcija traje jedan sat ili dulje. Morate započeti s napunjenom baterijom i telefon držati priključen dok se enkripcija ne završi. Ako prekinete postupak enkripcije, izgubit ćete neke ili sve svoje podatke." "Kriptiraj tablet uređaj" "Kriptiraj telefon" "Napunite bateriju i pokušajte ponovo." @@ -339,8 +339,8 @@ "Pokušajte ponovo za ^1 s." "Unesite svoju zaporku" "Enkripcija neuspješna" - "Enkripcija je prekinuta i ne može se dovršiti. Podaci na vašem tabletnom računali zbog toga više nisu dostupni."\n\n"Da biste nastavili upotrebljavati svoje tabletno računalo, trebate provesti vraćanje u tvorničko stanje. Prilikom postavljanja tabletnog računala nakon vraćanja u tvorničko stanje imat ćete priliku vratiti sve podatke za koje ste na Google računu izradili sigurnosnu kopiju." - "Enkripcija je prekinuta i ne može se dovršiti. Stoga podaci na vašem telefonu više nisu dostupni. "\n\n"Da biste nastavili upotrebljavati ​​telefon, morate vratiti tvorničke postavke. Kada nakon toga postavite svoj telefon, imat ćete priliku vratiti sve podatke čije su sigurnosne kopije stvorene na vašem Google računu." + "Enkripcija je prekinuta i ne može se dovršiti. Podaci na vašem tabletnom računali zbog toga više nisu dostupni.\n\nDa biste nastavili upotrebljavati svoje tabletno računalo, trebate provesti vraćanje u tvorničko stanje. Prilikom postavljanja tabletnog računala nakon vraćanja u tvorničko stanje imat ćete priliku vratiti sve podatke za koje ste na Google računu izradili sigurnosnu kopiju." + "Enkripcija je prekinuta i ne može se dovršiti. Stoga podaci na vašem telefonu više nisu dostupni. \n\nDa biste nastavili upotrebljavati ​​telefon, morate vratiti tvorničke postavke. Kada nakon toga postavite svoj telefon, imat ćete priliku vratiti sve podatke čije su sigurnosne kopije stvorene na vašem Google računu." "Promjena načina unosa" "Odaberite zaključavanje zaslona" "Odabir sig. zaključ." @@ -514,6 +514,7 @@ "Povezivanje" "Povezan" "Dostupan" + "U upotrebi" "Postavke zaslona" "Isključiti?" "To će prekinuti vašu vezu s uređajem:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Isključeno" "Nije dostupno jer je NFC isključen" "Android Beam" - "Kada je ta značajka uključena, možete emitirati sadržaj aplikacije na drugi uređaj na kojem je omogućen NFC tako da držite uređaje jedan uz drugi. Na primjer, možete emitirati stranice Preglednika, videozapise s YouTubea, kontakte s Osoba i više."\n\n"Jednostavno približite jedan uređaj drugom (obično se njihove stražnje strane prislanjaju jedna uz drugu), a zatim dodirnite zaslon. Aplikacija određuje što će se emitirati." + "Kada je ta značajka uključena, možete emitirati sadržaj aplikacije na drugi uređaj na kojem je omogućen NFC tako da držite uređaje jedan uz drugi. Na primjer, možete emitirati stranice Preglednika, videozapise s YouTubea, kontakte s Osoba i više.\n\nJednostavno približite jedan uređaj drugom (obično se njihove stražnje strane prislanjaju jedna uz drugu), a zatim dodirnite zaslon. Aplikacija određuje što će se emitirati." "Otkrivanje mrežne usluge" "Dopusti aplikacijama na drugim uređajima otkrivanje aplikacija na ovom uređaju" "Wi-Fi" @@ -620,7 +621,7 @@ "Osigurano značajkom %1$s" ", osigurano značajkom %1$s" "Nema" - "Radi poboljšanja preciznosti lokacije kao i u druge svrhe aplikacija %1$s želi uključiti pregledavanje mreže, čak i kada je Wi-Fi isključen."\n\n"Želite li to dozvoliti za sve aplikacije koje žele izvoditi pregledavanje?" + "Radi poboljšanja preciznosti lokacije kao i u druge svrhe aplikacija %1$s želi uključiti pregledavanje mreže, čak i kada je Wi-Fi isključen.\n\nŽelite li to dozvoliti za sve aplikacije koje žele izvoditi pregledavanje?" "Dopusti" "Odbij" "Poveži" @@ -632,8 +633,8 @@ "Odustani" "Svejedno preskoči" "Nemoj preskočiti" - "UPOZORENJE: mogući su dodatni troškovi za promet podataka."\n\n"Za postavljanje tabletnog računala može biti potrebna značajna mrežna aktivnost." - "UPOZORENJE: mogući su dodatni troškovi za promet podataka."\n\n"Za postavljanje telefona može biti potrebna značajna mrežna aktivnost." + "UPOZORENJE: mogući su dodatni troškovi za promet podataka.\n\nZa postavljanje tabletnog računala može biti potrebna značajna mrežna aktivnost." + "UPOZORENJE: mogući su dodatni troškovi za promet podataka.\n\nZa postavljanje telefona može biti potrebna značajna mrežna aktivnost." "UPOZORENJE: dok ne uspostavite vezu s internetom, tabletno računalo neće moći potvrditi da je vaš softver ažuran." "UPOZORENJE: dok ne uspostavite vezu s internetom, telefon neće moći potvrditi da je vaš softver ažuran." "Tabletno računalo nije se moglo povezati s ovom Wi-Fi mrežom." @@ -773,9 +774,9 @@ "SIM PIN" "Netočan PIN" "PIN-ovi se ne podudaraju" - "Nije moguće promijeniti PIN."\n"PIN je možda netočan." + "Nije moguće promijeniti PIN.\nPIN je možda netočan." "Uspješno je promijenjen PIN SIM-a" - "Nije moguće promijeniti stanje zaključanosti SIM kartice."\n"Možda je PIN pogrešan." + "Nije moguće promijeniti stanje zaključanosti SIM kartice.\nMožda je PIN pogrešan." "U redu" "Odustani" "Status tabletnog uređaja" @@ -918,9 +919,9 @@ "Vraćanje na tvorničko stanje" "Briše sve podatke na tabletnom uređaju" "Izbriši sve podatke na telefonu" - "To će izbrisati sve podatke s ""unutarnje pohrane"" tabletnog računala, uključujući:"\n\n
  • "vaš Google račun"
  • \n
  • "podatke i postavke sustava i aplikacija"
  • \n
  • "preuzete aplikacije"
  • - "To će izbrisati sve podatke s ""unutarnje pohrane"" telefona, uključujući:"\n\n
  • "vaš Google račun"
  • \n
  • "podatke i postavke sustava i aplikacija"
  • \n
  • "preuzete aplikacije"
  • - \n\n"Trenutačno ste prijavljeni na sljedeće račune:"\n + "To će izbrisati sve podatke s ""unutarnje pohrane"" tabletnog računala, uključujući:\n\n"
  • "vaš Google račun"
  • \n
  • "podatke i postavke sustava i aplikacija"
  • \n
  • "preuzete aplikacije"
  • + "To će izbrisati sve podatke s ""unutarnje pohrane"" telefona, uključujući:\n\n"
  • "vaš Google račun"
  • \n
  • "podatke i postavke sustava i aplikacija"
  • \n
  • "preuzete aplikacije"
  • + \n\n"Trenutačno ste prijavljeni na sljedeće račune:\n"
  • "Glazba"
  • \n
  • "Fotografije"
  • \n
  • "Ostali korisnički podaci"
  • \n\n"Da biste izbrisali glazbu, slike i ostale korisničke podatke, ""USB pohrana"" treba biti izbrisana." \n\n"Da biste izbrisali glazbu, slike i ostale korisničke podatke, trebate izbrisati ""SD karticu""." @@ -1105,7 +1106,7 @@ "Prikaži procese iz predmemorije" "Poništi postavke" "Poništiti postavke?" - "To će poništiti sve postavke za:"\n\n" "
  • "onemogućene aplikacije"
  • \n" "
  • "onemogućene obavijesti aplikacija"
  • \n" "
  • "zadane aplikacije za radnje"
  • \n" "
  • "ograničenja pozadinskih podataka za aplikacije"
  • \n\n" Nećete izgubiti podatke iz aplikacija."
    + "To će poništiti sve postavke za:\n\n "
  • "onemogućene aplikacije"
  • \n" "
  • "onemogućene obavijesti aplikacija"
  • \n" "
  • "zadane aplikacije za radnje"
  • \n" "
  • "ograničenja pozadinskih podataka za aplikacije"
  • \n\n" Nećete izgubiti podatke iz aplikacija."
    "Poništi aplikacije" "Upravljaj prostorom" "Filtar" @@ -1240,9 +1241,7 @@ "Za prijelaz pritisnite Ctrl i razmaknicu." "Zadano" "Izgledi tipkovnice" - "Korisnički rječnik" - "Osobni rječnik" - "Osobni rječnici" + "Osobni rječnik" "Dodaj" "Dodaj u rječnik" @@ -1303,6 +1302,11 @@ "U izbornik napajanja uključi opciju za izradu izvješća o bugovima" "Ne pokreći mirovanje" "Zaslon nikad neće prijeći u mirovanje tijekom punjenja" + "Omogući zapisnik naredbe \"snoop\" za Bluetooth HCI" + "Snimi sve Bluetooth HCI pakete u datoteci" + "Odabir vremena izvođenja" + "Odabir vremena izvođenja" + "Želite li pokrenuti ponovo da biste promijenili vrijeme izvođenja s %1$s na %2$s?" "Dopusti probne lokacije" "Dopusti probne lokacije" "Omogućiti rješavanje programske pogreške na USB-u?" @@ -1315,11 +1319,13 @@ "Zaštiti USB pohranu" "Aplikacije moraju tražiti dozvolu za čitanje USB pohrane" "Zaštititi USB pohranu?" - "Kad je USB pohrana zaštićena, aplikacije moraju tražiti dozvolu za čitanje podataka s vanjske pohrane."\n\n"Neke aplikacije možda neće raditi dok ih razvojni programeri ne ažuriraju." + "Kad je USB pohrana zaštićena, aplikacije moraju tražiti dozvolu za čitanje podataka s vanjske pohrane.\n\nNeke aplikacije možda neće raditi dok ih razvojni programeri ne ažuriraju." "Zaštiti SD karticu" "Aplikacije moraju tražiti dozvolu za čitanje SD kartice" "Zaštititi SD karticu?" - "Kad je SD kartica zaštićena, aplikacije moraju tražiti dozvolu za čitanje podataka s vanjske pohrane."\n\n"Neke aplikacije možda neće raditi dok ih razvojni programeri ne ažuriraju." + "Kad je SD kartica zaštićena, aplikacije moraju tražiti dozvolu za čitanje podataka s vanjske pohrane.\n\nNeke aplikacije možda neće raditi dok ih razvojni programeri ne ažuriraju." + "Lokalni terminal" + "Omogući aplikaciju terminala koja nudi pristup lokalnoj ovojnici" "Odaberi gadget" "Odaberite widget" "Želite izraditi widget i dozvoliti pristup?" @@ -1340,11 +1346,11 @@ "Usluge" "Sustav" "Pokret povećavanja" - "Ako je ova značajka uključena, možete povećati ili smanjiti prikaz ako triput dodirnete zaslon."\n\n"Nakon povećanja prikaza možete sljedeće:"\n
    • "Pomicati: pomoću dva prsta ili više prstiju povlačite prikaz na zaslonu."
    • \n
    • "Podesiti razinu zumiranja: stisnite dva prsta ili više prstiju ili ih raširite."
    \n\n"Također možete privremeno povećati stavku ispod prsta ako je triput dodirnete i držite. U tom slučaju možete povlačiti prst kako biste istražili različite dijelove zaslona. Podignite prst kako biste se vratili na prijašnje stanje."\n\n"Napomena: povećanje trostrukim dodirom moguće je svuda osim na tipkovnici i traci za navigaciju."
    + "Ako je ova značajka uključena, možete povećati ili smanjiti prikaz ako triput dodirnete zaslon.\n\nNakon povećanja prikaza možete sljedeće:\n"
    • "Pomicati: pomoću dva prsta ili više prstiju povlačite prikaz na zaslonu."
    • \n
    • "Podesiti razinu zumiranja: stisnite dva prsta ili više prstiju ili ih raširite."
    \n\n"Također možete privremeno povećati stavku ispod prsta ako je triput dodirnete i držite. U tom slučaju možete povlačiti prst kako biste istražili različite dijelove zaslona. Podignite prst kako biste se vratili na prijašnje stanje.\n\nNapomena: povećanje trostrukim dodirom moguće je svuda osim na tipkovnici i traci za navigaciju."
    "Prečac pristupačnosti" "Uključeno" "Isključeno" - "Kada je ova značajka uključena, možete brzo omogućiti značajke pristupačnosti u dva koraka:"\n\n"1. korak: pritisnite i držite gumb za uključivanje/isključivanje dok ne začujete zvuk ili osjetite vibraciju."\n\n"2. korak: dodirnite i držite s dva prsta dok ne začujete zvučnu potvrdu."\n\n"Ako uređaj ima više korisnika, ovaj prečac na zaključanom zaslonu omogućuje pristupačnost dok se uređaj ne otključa." + "Kada je ova značajka uključena, možete brzo omogućiti značajke pristupačnosti u dva koraka:\n\n1. korak: pritisnite i držite gumb za uključivanje/isključivanje dok ne začujete zvuk ili osjetite vibraciju.\n\n2. korak: dodirnite i držite s dva prsta dok ne začujete zvučnu potvrdu.\n\nAko uređaj ima više korisnika, ovaj prečac na zaključanom zaslonu omogućuje pristupačnost dok se uređaj ne otključa." "Veliki tekst" "Uvećanje zaslona" "Autom. ažuriranje uvećanja zaslona" @@ -1366,6 +1372,16 @@ "TalkBack daje govorne povratne informacije kao pomoć slijepim i slabovidnim korisnicima. Želite li ga besplatno instalirati s usluge Android Market?" "Nije dan opis." "Postavke" + "Ispis" + "Postavke ispisa" + "Usluge" + "Želite li upotrijebiti uslugu %1$s?" + "%1$s može primati dokumente koje ispisujete. Takvi dokumenti mogu sadržavati osjetljive podatke." + "Nema instaliranih usluga" + "Postavke" + "Dodavanje pisača" + "Uključeno" + "Isključeno" "Baterija" "Što troši bateriju" "Podaci o iskorištenosti baterije nisu dostupni." @@ -1405,8 +1421,10 @@ "Wi-Fi se izvodi" "Tabletni uređaj" "Telefon" - "Podaci poslani" - "Primljeni podaci" + "Poslani mobilni podaci" + "Primljeni mobilni podaci" + "Poslani Wi‑Fi podaci" + "Primljeni Wi‑Fi podaci" "Audio" "Videozapis" "Vrijeme uključenosti" @@ -1460,6 +1478,7 @@ "Visina glasa" "Utječe na ton izgovorenog teksta" "Jezik" + "Jezik nije odabran" "Postavlja jezik govora" "Poslušajte primjer" "Poslušajte primjer sinteze zvuka" @@ -1594,7 +1613,7 @@ "EAP nije podržan." "Ne možete konfigurirati EAP Wi-Fi vezu tijekom postavljanja. To možete učiniti nakon postavljanja u Postavkama pod stavkom Bežično povezivanje i mreže." "Povezivanje može potrajati nekoliko minuta..." - "Dodirnite ""Dalje"" za nastavak postavljanja."\n\n"Dodirnite ""Natrag"" za povezivanje s nekom drugom Wi-Fi mrežom." + "Dodirnite ""Dalje"" za nastavak postavljanja.\n\nDodirnite ""Natrag"" za povezivanje s nekom drugom Wi-Fi mrežom." "Sinkronizacija je omogućena" "Onemogućena je sinkronizacija" "Pogreška sinkronizacije" @@ -1676,8 +1695,7 @@ "Bljeskanje prikaza u prozorima pri crtanju GPU-om" "Prikaži ažuriranja hardverskih slojeva" "Neka hardverski slojevi bljeskaju zeleno kad se ažuriraju" - "Prikaz preoptereć. GPU-a" - "Najbolje do najgoreg: plavo, zeleno, svjetlocrveno, crveno" + "Ukl. pogr. GPU sl. iscrt." "Onemogući HW preklapanja" "Uvijek upotrijebi GPU kod slaganja zaslona" "Omogući OpenGL praćenja" @@ -1738,11 +1756,11 @@ "Onemogući pozadinske podatke na mobilnim mrežama. Upotrijebit će se fiksne mreže ako su dostupne." "Za ograničenje poz. podat. za ovu apl. ograničite mob. podatke." "Ograničenje pozadinskih podataka?" - "Zbog te značajke aplikacija koja ovisi o pozadinskim podacima može prestati raditi kada su dostupne samo mobilne mreže."\n\n"U postavkama možete pronaći prikladnije kontrole prijenosa podataka." + "Zbog te značajke aplikacija koja ovisi o pozadinskim podacima može prestati raditi kada su dostupne samo mobilne mreže.\n\nU postavkama možete pronaći prikladnije kontrole prijenosa podataka." "Ograničavanje pozadinskih podataka moguće je samo ako ste postavili ograničenje mobilnih podataka." "Uključiti auto. sinkronizaciju?" - "Sve promjene koje napravite na svojim računima na webu automatski će se kopirati na vaš tablet."\n\n"Neki računi također mogu automatski kopirati na web sve promjene koje napravite na tabletu. Tako funkcionira Google račun."\n\n"Da biste odabrali vrstu podataka koji će se za pojedini račun sinkronizirati, idite na Postavke > Računi." - "Sve promjene koje napravite na svojim računima na webu automatski će se kopirati na vaš telefon."\n\n"Neki računi također mogu automatski kopirati na web sve promjene koje napravite na telefonu. Tako funkcionira Google račun."\n\n"Da biste odabrali vrstu podataka koji će se za pojedini račun sinkronizirati, idite na Postavke > Računi." + "Sve promjene koje napravite na svojim računima na webu automatski će se kopirati na vaš tablet.\n\nNeki računi također mogu automatski kopirati na web sve promjene koje napravite na tabletu. Tako funkcionira Google račun.\n\nDa biste odabrali vrstu podataka koji će se za pojedini račun sinkronizirati, idite na Postavke > Računi." + "Sve promjene koje napravite na svojim računima na webu automatski će se kopirati na vaš telefon.\n\nNeki računi također mogu automatski kopirati na web sve promjene koje napravite na telefonu. Tako funkcionira Google račun.\n\nDa biste odabrali vrstu podataka koji će se za pojedini račun sinkronizirati, idite na Postavke > Računi." "Isključiti auto. sinkronizaciju?" "Time će se uštedjeti promet podataka i potrošnja baterije, ali svaki ćete račun morati ručno sinkronizirati kako biste dobili najnovije informacije. Nećete primati obavijesti o ažuriranjima." "Datum poništavanja ciklusa upotrebe" @@ -1751,12 +1769,12 @@ "Postavite upozorenje o upotrebi podataka" "Postavite ograničenje upotrebe podataka" "Ograničavanje upotrebe podataka" - "Vaša podatkovna veza mobilnog uređaja bit će onemogućena kada dosegnete navedeno ograničenje."\n\n"Budući da potrošnju podataka mjeri vaše tabletno računalo, a vaš mobilni operater možda obračunava na neki drugi način, razmislite o postavljanju opreznijeg ograničenja." - "Vaša podatkovna veza mobilnog uređaja bit će onemogućena kada dosegnete navedeno ograničenje."\n\n"Budući da potrošnju podataka mjeri vaš telefon, a vaš mobilni operater možda obračunava na neki drugi način, razmislite o postavljanju opreznijeg ograničenja." + "Vaša podatkovna veza mobilnog uređaja bit će onemogućena kada dosegnete navedeno ograničenje.\n\nBudući da potrošnju podataka mjeri vaše tabletno računalo, a vaš mobilni operater možda obračunava na neki drugi način, razmislite o postavljanju opreznijeg ograničenja." + "Vaša podatkovna veza mobilnog uređaja bit će onemogućena kada dosegnete navedeno ograničenje.\n\nBudući da potrošnju podataka mjeri vaš telefon, a vaš mobilni operater možda obračunava na neki drugi način, razmislite o postavljanju opreznijeg ograničenja." "Ograničenje pozadinskih podataka?" "Ako ograničite pozadinske mobilne podatke, neke aplikacije i usluge neće raditi ako niste povezani s Wi-Fi mrežom." - "Ako ograničite pozadinske mobilne podatke, neke aplikacije i usluge neće raditi ako niste povezani s Wi-Fi mrežom."\n\n"Ova postavka utječe na sve korisnike na ovom tabletnom računalu." - "Ako ograničite pozadinske mobilne podatke, neke aplikacije i usluge neće raditi ako niste povezani s Wi-Fi mrežom."\n\n"Ova postavka utječe na sve korisnike na ovom telefonu." + "Ako ograničite pozadinske mobilne podatke, neke aplikacije i usluge neće raditi ako niste povezani s Wi-Fi mrežom.\n\nOva postavka utječe na sve korisnike na ovom tabletnom računalu." + "Ako ograničite pozadinske mobilne podatke, neke aplikacije i usluge neće raditi ako niste povezani s Wi-Fi mrežom.\n\nOva postavka utječe na sve korisnike na ovom telefonu." "Upozorenja: ^1"" ""^2"\n "^1"" ""^2"\n"ograničenje" "Uklonjene aplikacije" @@ -1843,8 +1861,8 @@ "Korisnik" "Ograničeni profil" "Dodaj novog korisnika" - "Ovaj uređaj možete dijeliti s drugima tako da stvorite dodatne korisnike. Svaki korisnik ima vlastiti prostor koji može prilagoditi sa svojim aplikacijama, pozadinskom slikom i sličnim stvarima. Korisnici također mogu podesiti postavke tabletnog računala, primjerice Wi-Fi, koje utječu na sve."\n\n"Nakon što stvorite novog korisnika, ta osoba mora proći postupak postavljanja."\n\n"Bilo koji korisnik može prihvatiti ažurirane dozvole aplikacija u ime svih drugih korisnika." - "Nakon što stvorite novog korisnika, ta osoba mora proći postupak postavljanja."\n\n"Bilo koji korisnik može prihvatiti ažurirane dozvole aplikacija u ime svih drugih korisnika." + "Ovaj uređaj možete dijeliti s drugima tako da stvorite dodatne korisnike. Svaki korisnik ima vlastiti prostor koji može prilagoditi sa svojim aplikacijama, pozadinskom slikom i sličnim stvarima. Korisnici također mogu podesiti postavke tabletnog računala, primjerice Wi-Fi, koje utječu na sve.\n\nNakon što stvorite novog korisnika, ta osoba mora proći postupak postavljanja.\n\nBilo koji korisnik može prihvatiti ažurirane dozvole aplikacija u ime svih drugih korisnika." + "Nakon što stvorite novog korisnika, ta osoba mora proći postupak postavljanja.\n\nBilo koji korisnik može prihvatiti ažurirane dozvole aplikacija u ime svih drugih korisnika." "Postaviti korisnika sada?" "Provjerite može li osoba uzeti tabletno računalo i postaviti svoj prostor" "Želite li sada postaviti profil?" @@ -1875,6 +1893,9 @@ "Ova postavka utječe na sve korisnike na ovom telefonu." "Promjena jezika" "Promjena veličine fonta" + "Ograničenja" + "Uklanjanje ograničenja" + "Promjena PIN-a" "Prikaži obavijesti" "Pomoć" "Račun za sadržaj" diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml index 89037425c14..0971951120c 100644 --- a/res/values-hu/arrays.xml +++ b/res/values-hu/arrays.xml @@ -233,7 +233,8 @@ "Hely" "Személyes" "Üzenetváltás" - "Eszköz" + "Média" + "Eszköz"
    "hozzávetőleges helymeghatározás" @@ -246,7 +247,7 @@ "hívásnapló módosítása" "naptár olvasása" "naptár módosítása" - "wi-fi hálózat keresése" + "Wi-Fi hálózat keresése" "értesítés" "hálózatkeresés" "telefonálás" @@ -267,6 +268,17 @@ "hanganyag lejátszása" "vágólap olvasása" "vágólap módosítása" + "médiagombok" + "audiofókusz" + "hangerő-szabályozó" + "beszéd hangereje" + "csengés hangereje" + "média hangereje" + "ébresztés hangereje" + "értesítés hangereje" + "bluetooth hangereje" + "ébren tartás" + "hely figyelése" "Hely" @@ -300,12 +312,33 @@ "Hanganyag lejátszása" "Vágólap olvasása" "Vágólap módosítása" + "Médiagombok" + "Audiofókusz" + "Hangerő-szabályozó" + "Beszéd hangereje" + "Csengés hangereje" + "Média hangereje" + "Ébresztés hangereje" + "Értesítés hangereje" + "Bluetooth hangereje" + "Ébren tartás" + "Tartózkodási hely" "Rövid" "Közepes" "Hosszú" + + "Dalvik" + "ART" + "ART (hibakeresési)" + + + "A Dalvik használata" + "Az ART használata" + "Az ART hibakeresési verziójának használata" + "Ellenőrzés soha" "Csak DRM-tartalom ellenőrzése" @@ -367,6 +400,11 @@ "A képernyőn sorként" "adb shell dumpsys gfxinfo elemben" + + "Ki" + "Tartalom-felülírási területek mutatása" + "Tartalom-felülírási számláló mutatása" + "Normál korlátozás" "Nincsenek háttérfolyamatok" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 670fd2df468..c4b20f93af6 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -275,8 +275,8 @@ "Megszakadt az adatkapcsolat, mert elhagyta az otthoni hálózatot, és az adatbarangolás nincs bekapcsolva." "Bekapcsolás" "Ha engedélyezi az adatbarangolást, akkor jelentős barangolási költség merülhet fel!" - "Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat."\n\n"Ez a beállítás minden felhasználót érint ezen a táblagépen." - "Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat."\n\n"Ez a beállítás minden felhasználót érint ezen a telefonon." + "Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat.\n\nEz a beállítás minden felhasználót érint ezen a táblagépen." + "Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat.\n\nEz a beállítás minden felhasználót érint ezen a telefonon." "Engedélyezi az adatbarangolást?" "Szolgáltatóválasztás" "Válassza ki a hálózat üzemeltetőjét" @@ -322,8 +322,8 @@ "A táblagép titkosításának feloldásához kérjen minden bekapcsoláskor egy számokból álló PIN kódot vagy jelszót" "A telefon titkosításának feloldásához kérjen minden bekapcsoláskor egy számokból álló PIN kódot vagy jelszót" "Titkosítva" - "Titkosíthatja a fiókjait, beállításait, letöltött alkalmazásait és azok adatait, illetve média- és egyéb fájljait. Ha titkosítja táblagépét, akkor minden bekapcsolásakor be kell írnia egy numerikus PIN kódot vagy jelszót a titkosítás feloldásához: táblagépének titkosítását nem tudja visszavonni, kivéve, ha visszaállítja a gyári adatokat, és minden adatot töröl a gépről."\n\n"A titkosítás legalább egy órát vesz igénybe. Feltöltött akkumulátorral kezdjen hozzá, és a titkosítás befejezéséig hagyja töltőn a táblagépet. Ha megszakítja a titkosítási folyamatot, akkor elveszíti néhány vagy az összes adatát." - "Titkosíthatja a fiókjait, beállításait, letöltött alkalmazásait és azok adatait, illetve média- és egyéb fájljait. Ha titkosítja telefonját, akkor minden bekapcsolásakor be kell írnia egy numerikus PIN kódot vagy jelszót a titkosítás feloldásához: telefonjának titkosítását nem tudja visszavonni, kivéve, ha visszaállítja a gyári adatokat, és minden adatot töröl a gépről."\n\n"A titkosítás legalább egy órát vesz igénybe. Feltöltött akkumulátorral kezdjen hozzá, és a titkosítás befejeződéséig hagyja töltőn a telefonját. Ha megszakítja a titkosítási folyamatot, akkor elveszíti néhány vagy az összes adatát." + "Titkosíthatja a fiókjait, beállításait, letöltött alkalmazásait és azok adatait, illetve média- és egyéb fájljait. Ha titkosítja táblagépét, akkor minden bekapcsolásakor be kell írnia egy numerikus PIN kódot vagy jelszót a titkosítás feloldásához: táblagépének titkosítását nem tudja visszavonni, kivéve, ha visszaállítja a gyári adatokat, és minden adatot töröl a gépről.\n\nA titkosítás legalább egy órát vesz igénybe. Feltöltött akkumulátorral kezdjen hozzá, és a titkosítás befejezéséig hagyja töltőn a táblagépet. Ha megszakítja a titkosítási folyamatot, akkor elveszíti néhány vagy az összes adatát." + "Titkosíthatja a fiókjait, beállításait, letöltött alkalmazásait és azok adatait, illetve média- és egyéb fájljait. Ha titkosítja telefonját, akkor minden bekapcsolásakor be kell írnia egy numerikus PIN kódot vagy jelszót a titkosítás feloldásához: telefonjának titkosítását nem tudja visszavonni, kivéve, ha visszaállítja a gyári adatokat, és minden adatot töröl a gépről.\n\nA titkosítás legalább egy órát vesz igénybe. Feltöltött akkumulátorral kezdjen hozzá, és a titkosítás befejeződéséig hagyja töltőn a telefonját. Ha megszakítja a titkosítási folyamatot, akkor elveszíti néhány vagy az összes adatát." "Táblagép titkosítása" "Telefon titkosítása" "Töltse fel az akkumulátort, és próbálja újra." @@ -339,8 +339,8 @@ "Próbálja újra ^1 másodperc múlva." "Írja be a jelszavát" "A titkosítás sikertelen" - "A titkosítás megszakadt, és nem lehet befejezni. Ezért a táblagépen található adatokhoz nem lehet hozzáférni. "\n\n"Ahhoz, hogy újra használni tudja táblagépét, vissza kell állítani a gyári beállításokat. Amikor a visszaállítás után beállítja táblagépét, lehetősége lesz minden adat visszaállítására, amelyet a rendszer tárolt a Google Fiókjában." - "A titkosítás megszakadt, és nem lehet befejezni. Ezért a telefonon található adatokhoz nem lehet hozzáférni. "\n\n"Ahhoz, hogy újra használni tudja telefonját, vissza kell állítani a gyári beállításokat. Amikor a visszaállítás után beállítja telefonját, lehetősége lesz minden adat visszaállítására, amelyet a rendszer eltárolt a Google Fiókjában." + "A titkosítás megszakadt, és nem lehet befejezni. Ezért a táblagépen található adatokhoz nem lehet hozzáférni. \n\nAhhoz, hogy újra használni tudja táblagépét, vissza kell állítani a gyári beállításokat. Amikor a visszaállítás után beállítja táblagépét, lehetősége lesz minden adat visszaállítására, amelyet a rendszer tárolt a Google Fiókjában." + "A titkosítás megszakadt, és nem lehet befejezni. Ezért a telefonon található adatokhoz nem lehet hozzáférni. \n\nAhhoz, hogy újra használni tudja telefonját, vissza kell állítani a gyári beállításokat. Amikor a visszaállítás után beállítja telefonját, lehetősége lesz minden adat visszaállítására, amelyet a rendszer eltárolt a Google Fiókjában." "Beviteli mód váltása" "Képernyőzár választása" "Biztonsági zárolás" @@ -514,6 +514,7 @@ "Csatlakozás" "Csatlakozva" "Elérhető" + "Használatban" "Megjelenítési beállítások" "Megszakítja?" "Ezzel befejezi a kapcsolatot a következővel:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Ki" "Nem érhető el, mert az NFC ki van kapcsolva" "Android Beam" - "Ha ez a funkció be van kapcsolva, alkalmazástartalmat sugározhat át egy másik NFC-kompatibilis eszközre úgy, hogy egymáshoz közel tartja az eszközöket. Például átsugározhat böngészőoldalalakat, YouTube-videókat, névjegyeket stb."\n\n"Mindössze helyezze az eszközöket egymáshoz közel (lehetőleg a hátlapjaikat összeérintve), majd érintse meg a képernyőt. Az alkalmazás eldönti, hogy mit fog átsugározni." + "Ha ez a funkció be van kapcsolva, alkalmazástartalmat sugározhat át egy másik NFC-kompatibilis eszközre úgy, hogy egymáshoz közel tartja az eszközöket. Például átsugározhat böngészőoldalalakat, YouTube-videókat, névjegyeket stb.\n\nMindössze helyezze az eszközöket egymáshoz közel (lehetőleg a hátlapjaikat összeérintve), majd érintse meg a képernyőt. Az alkalmazás eldönti, hogy mit fog átsugározni." "Hálózati szolgáltatások keresése" "Más eszközökön lévő alkalmazások láthatják az ezen a készüléken lévő alkalmazásokat." "Wi-Fi" @@ -620,7 +621,7 @@ "%1$s védelemmel" ", %1$s védelemmel" "Nincs" - "A helymeghatározás pontosságának javítása és egyéb célok érdekében a(z) %1$s szeretné engedélyezni a hálózatkeresést még kikapcsolt Wi-Fi mellett is."\n\n"Engedélyezi ezt az összes olyan alkalmazásnál, amely keresést akar végezni?" + "A helymeghatározás pontosságának javítása és egyéb célok érdekében a(z) %1$s szeretné engedélyezni a hálózatkeresést még kikapcsolt Wi-Fi mellett is.\n\nEngedélyezi ezt az összes olyan alkalmazásnál, amely keresést akar végezni?" "Engedélyezés" "Elutasítás" "Kapcsolódás" @@ -632,8 +633,8 @@ "Mégse" "Mégis kihagyom" "Ne hagyja ki" - "FIGYELEM: Előfordulhat, hogy szolgáltatója további adatátviteli díjakat számít fel."\n\n"A táblagép beállításához jelentős hálózati tevékenységre lehet szükség." - "FIGYELEM: Előfordulhat, hogy szolgáltatója további adatátviteli díjakat számít fel."\n\n"A telefon beállításához jelentős hálózati tevékenységre lehet szükség." + "FIGYELEM: Előfordulhat, hogy szolgáltatója további adatátviteli díjakat számít fel.\n\nA táblagép beállításához jelentős hálózati tevékenységre lehet szükség." + "FIGYELEM: Előfordulhat, hogy szolgáltatója további adatátviteli díjakat számít fel.\n\nA telefon beállításához jelentős hálózati tevékenységre lehet szükség." "FIGYELEM: amíg nincs internetkapcsolat, a táblagép nem tudja ellenőrizni, hogy a szoftver naprakész-e." "FIGYELEM: amíg nincs internetkapcsolat, a telefon nem tudja ellenőrizni, hogy a szoftver naprakész-e." "A táblagép nem tudott csatlakozni ehhez a Wi-Fi hálózathoz." @@ -773,9 +774,9 @@ "SIM-kártya PIN-kódja" "Helytelen PIN kód" "A PIN kódok nem egyeznek" - "Nem lehet megváltoztatni a PIN kódot."\n"Lehet, hogy hibás a PIN kód." + "Nem lehet megváltoztatni a PIN kódot.\nLehet, hogy hibás a PIN kód." "A SIM-kártya PIN-kódja sikeresen módosításra került" - "Nem lehet megváltoztatni a SIM-kártya zárolási állapotát."\n"Lehet, hogy hibás a PIN kód." + "Nem lehet megváltoztatni a SIM-kártya zárolási állapotát.\nLehet, hogy hibás a PIN kód." "OK" "Mégse" "Táblagép állapota" @@ -918,9 +919,9 @@ "Gyári adatok visszaállítása" "Törli az összes adatot a táblagépről" "Minden adat törlése a telefonról" - "Ez minden adatot töröl a táblagép ""belső tárolójáról"", többek között: "\n" "\n
  • "Google Fiókját"
  • \n
  • "A rendszer- és alkalmazásadatokat és beállításokat"
  • " "\n" "
  • "A letöltött alkalmazásokat"
  • - "Ez minden adatot töröl a telefon ""belső tárolójáról"", többek között: "\n" "\n
  • "Google Fiókját"
  • \n
  • "A rendszer- és alkalmazásadatokat és beállításokat"
  • " "\n" "
  • "A letöltött alkalmazásokat"
  • - \n\n"Jelenleg a következő fiókokba van bejelentkezve:"\n + "Ez minden adatot töröl a táblagép ""belső tárolójáról"", többek között: \n \n"
  • "Google Fiókját"
  • \n
  • "A rendszer- és alkalmazásadatokat és beállításokat"
  • " \n "
  • "A letöltött alkalmazásokat"
  • + "Ez minden adatot töröl a telefon ""belső tárolójáról"", többek között: \n \n"
  • "Google Fiókját"
  • \n
  • "A rendszer- és alkalmazásadatokat és beállításokat"
  • " \n "
  • "A letöltött alkalmazásokat"
  • + \n\n"Jelenleg a következő fiókokba van bejelentkezve:\n"
  • "Zene"
  • \n
  • "Fotók"
  • \n
  • "Más felhasználói adatok"
  • \n\n"A zenék, képek és más felhasználói adatok törléséhez az ""USB-tárat"" is törölnie kell." \n\n"A zenék, képek és más felhasználói adatok törléséhez az ""SD-kártyát"" is törölnie kell." @@ -1105,7 +1106,7 @@ "Tárolt folyamatok" "Alapbeállítások" "Visszaállítja a beállításokat?" - "Ez visszaállítja az összes beállítást a következőknél:"\n\n" "
  • "Letiltott alkalmazások"
  • \n" "
  • "Letiltott alkalmazásokkal kapcsolatos értesítések"
  • \n" "
  • "Alapértelmezett alkalmazások az egyes műveletekhez"
  • \n" "
  • "Háttéradatokra vonatkozó korlátozások az alkalmazásoknál"
  • \n\n" Az alkalmazásokban található adatok nem fognak elveszni."
    + "Ez visszaállítja az összes beállítást a következőknél:\n\n "
  • "Letiltott alkalmazások"
  • \n" "
  • "Letiltott alkalmazásokkal kapcsolatos értesítések"
  • \n" "
  • "Alapértelmezett alkalmazások az egyes műveletekhez"
  • \n" "
  • "Háttéradatokra vonatkozó korlátozások az alkalmazásoknál"
  • \n\n" Az alkalmazásokban található adatok nem fognak elveszni."
    "Alapbeállítások" "Terület kezelése" "Szűrő" @@ -1240,9 +1241,7 @@ "Váltáshoz nyomja meg a Control+szóköz billentyűkódot" "Alapértelmezett" "Billentyűzetkiosztások" - "Felhasználói szótár" - "Személyes szótár" - "Személyes szótárak" + "Személyes szótár" "Hozzáadás" "Hozzáadás a szótárhoz" @@ -1303,6 +1302,11 @@ "Lehetőség az energiaellátási menüben a hibajelentésekre" "Nem kapcsolódik ki" "A képernyő soha nem kapcsol ki töltés során" + "Bluetooth HCI snoop napló engedélyezése" + "Az összes Bluetooth HCI-csomag rögzítése egy fájlban" + "Futtatási környezet kiválasztása" + "Futtatási környezet kiválasztása" + "Újraindítja, hogy a futtatási környezet módosuljon %1$s beállításról %2$s beállításra?" "Helyutánzatok engedélyezése" "Helyutánzatok engedélyezése" "Engedélyezi az USB hibakeresést?" @@ -1315,11 +1319,13 @@ "USB-tár védetté tétele" "Alkalmazások kérjenek engedélyt az USB-n lévő adatok olvasására" "Védetté teszi az USB-tárat?" - "Ha az USB-háttértár védett, az alkalmazásoknak engedélyt kell kérniük a külső tárhelyen tárolt adatok olvasására."\n\n"Előfordulhat, hogy egyes alkalmazások nem működnek addig, amíg a fejlesztők nem frissítik azokat." + "Ha az USB-háttértár védett, az alkalmazásoknak engedélyt kell kérniük a külső tárhelyen tárolt adatok olvasására.\n\nElőfordulhat, hogy egyes alkalmazások nem működnek addig, amíg a fejlesztők nem frissítik azokat." "SD-kártya védetté tétele" "Az alkalmazások kérjenek engedélyt az SD-kártya olvasására" "Védetté teszi az SD-kártyát?" - "Ha az SD-kártya védett, az alkalmazásoknak engedélyt kell kérniük a külső tárhelyen tárolt adatok olvasására."\n\n"Előfordulhat, hogy egyes alkalmazások nem működnek addig, amíg a fejlesztők nem frissítik azokat." + "Ha az SD-kártya védett, az alkalmazásoknak engedélyt kell kérniük a külső tárhelyen tárolt adatok olvasására.\n\nElőfordulhat, hogy egyes alkalmazások nem működnek addig, amíg a fejlesztők nem frissítik azokat." + "Helyi végpont" + "Végalkalmazás engedélyezése a helyi rendszerhéj eléréséhez" "Modul kiválasztása" "Modul kiválasztása" "Létrehozza a modult, és engedélyezi a hozzáférést?" @@ -1340,11 +1346,11 @@ "Szolgáltatások" "Rendszer" "Nagyítási kézmozdulatok" - "Ha a funkció be van kapcsolva, úgy kicsinyíthet/nagyíthat, hogy háromszor rákoppint a képernyőre."\n\n"Nagyított állapotban:"\n
    • "Pásztázhat: Két vagy több ujját húzza végig a képernyőn."
    • \n
    • "Módosíthatja a nagyítási szintet: Két ujját húzza össze vagy távolítsa el egymástól."
    \n\n"Ideiglenesen felnagyíthatja az ujja alatt lévő részt is, úgy hogy hármat koppint és lenyomva hagyja ujját. A nagyított nézetben az ujját húzva fedezheti fel a képernyő más részeit is. Az ujja felemelésével visszatérhet az előző állapotra."\n\n"Megjegyzés: A háromszoros koppintással való nagyítás a billentyűzet és a navigációs sáv kivételével mindenhol működik."
    + "Ha a funkció be van kapcsolva, úgy kicsinyíthet/nagyíthat, hogy háromszor rákoppint a képernyőre.\n\nNagyított állapotban:\n"
    • "Pásztázhat: Két vagy több ujját húzza végig a képernyőn."
    • \n
    • "Módosíthatja a nagyítási szintet: Két ujját húzza össze vagy távolítsa el egymástól."
    \n\n"Ideiglenesen felnagyíthatja az ujja alatt lévő részt is, úgy hogy hármat koppint és lenyomva hagyja ujját. A nagyított nézetben az ujját húzva fedezheti fel a képernyő más részeit is. Az ujja felemelésével visszatérhet az előző állapotra.\n\nMegjegyzés: A háromszoros koppintással való nagyítás a billentyűzet és a navigációs sáv kivételével mindenhol működik."
    "Hozzáférési gyorskombináció" "Be" "Ki" - "Ha a funkció engedélyezve van, gyorsan elérheti a kisegítő lehetőségeket két lépésben:"\n\n"1. lépés: tartsa lenyomva a bekapcsológombot a hangjelzésig vagy rezgésig."\n\n"2. lépés: két ujját tartsa lenyomva a hangjelzéssel történő jóváhagyásig."\n\n"Ha az eszközt több felhasználó is használja, akkor e kombináció zárolási képernyőn való használatával ideiglenesen hozzáférhetővé válik az eszköz, amíg fel nem oldják azt." + "Ha a funkció engedélyezve van, gyorsan elérheti a kisegítő lehetőségeket két lépésben:\n\n1. lépés: tartsa lenyomva a bekapcsológombot a hangjelzésig vagy rezgésig.\n\n2. lépés: két ujját tartsa lenyomva a hangjelzéssel történő jóváhagyásig.\n\nHa az eszközt több felhasználó is használja, akkor e kombináció zárolási képernyőn való használatával ideiglenesen hozzáférhetővé válik az eszköz, amíg fel nem oldják azt." "Nagy szöveg" "Képernyőnagyítás" "Képernyőnagyítás automatikus frissítése" @@ -1366,6 +1372,16 @@ "A TalkBack beszéddel történő visszajelzést kínál vak és gyengénlátó felhasználók számára. Szeretné ingyen telepíteni az Android Marketről?" "Nincs leírás." "Beállítások" + "Nyomtatás" + "Nyomtatási beállítások" + "Szolgáltatások" + "Használja a következő szolgáltatást: %1$s?" + "A(z) %1$s képes fogadni az Ön által nyomtatott dokumentumokat, amelyek bizalmas adatokat tartalmazhatnak." + "Nincs telepített szolgáltatás" + "Beállítások" + "Nyomtatók hozzáadása" + "Be" + "Ki" "Akkumulátor" "Mi használta az akkumulátort" "Nincs akkuhasználati adat" @@ -1405,8 +1421,10 @@ "Wi-Fi használat" "Táblagép" "Telefon" - "Elküldött adatok" - "Fogadott adatok" + "Küldött mobiladat" + "Fogadott mobiladat" + "Küldött Wi‑Fi adat" + "Fogadott Wi-Fi adat" "Hang" "Videó" "Bekapcsolva eltöltött idő" @@ -1460,6 +1478,7 @@ "Hangmagasság" "A beszélt szöveg hangszínét befolyásolja" "Nyelv" + "Nincs nyelv kiválasztva" "Beállítja a beszélt szöveg nyelvspecifikus hangját" "Példa meghallgatása" "Rövid demonstráció megtekintése a beszédszintézisről" @@ -1594,7 +1613,7 @@ "EAP nem támogatott." "A beállítás során nem állíthat be EAP Wi-Fi kapcsolatot. Ezt a beállítás után a Beállításokban teheti meg, a Vezeték nélküli és egyéb hálózatok menüpontban." "A kapcsolódás igénybe vehet pár percet..." - "Érintse meg a ""Tovább"" lehetőséget a telepítés folytatásához."\n\n"Érintse meg a ""Vissza"" lehetőséget egy másik Wi-Fi-hálózathoz való csatlakozáshoz." + "Érintse meg a ""Tovább"" lehetőséget a telepítés folytatásához.\n\nÉrintse meg a ""Vissza"" lehetőséget egy másik Wi-Fi-hálózathoz való csatlakozáshoz." "Szinkronizálás engedélyezve" "Szinkronizálás letiltva" "Szinkronizálási hiba" @@ -1622,7 +1641,7 @@ "Gmail" "Naptár" "Címtár" - "Üdvözli a Google Sync!"" "\n"Az adatok Google-féle szinkronizálása lehetővé teszi, hogy bárhonnan hozzáférjen címtárához, találkozóihoz stb." + "Üdvözli a Google Sync!"" \nAz adatok Google-féle szinkronizálása lehetővé teszi, hogy bárhonnan hozzáférjen címtárához, találkozóihoz stb." "Alkalmazás-szinkronizálási beállítások" "Adatok és szinkronizálás" "Jelszó módosítása" @@ -1676,8 +1695,7 @@ "Ablakbeli nézetek villognak GPU-s rajznál." "Hardverréteg-frissítések" "Frissítéskor a hardverrétegek zölden villognak" - "GPU-kitakarás megjelenít." - "Legjobbtól a legrosszabbig: kék, zöld, piros" + "GPU tartalom-felülírási hibakeresés" "HW fedvények letiltása" "Mindig a GPU használata képernyő-feldolgozáshoz" "OpenGL nyomon követése" @@ -1738,11 +1756,11 @@ "Háttéradatok kikapcsolása mobilhálózaton. Nem mobil hálózatok használata." "Háttéradatok korlátozásához előbb állítson be mobiladatkorlátot." "Korlátozza a háttéradatokat?" - "Lehetséges, hogy e funkció miatt a háttéradatoktól függő alkalmazások nem fognak működni, ha csak mobilhálózatok állnak rendelkezésre."\n\n"Az alkalmazásban lévő beállítások között megfelelőbb adathasználati beállításokat találhat." + "Lehetséges, hogy e funkció miatt a háttéradatoktól függő alkalmazások nem fognak működni, ha csak mobilhálózatok állnak rendelkezésre.\n\nAz alkalmazásban lévő beállítások között megfelelőbb adathasználati beállításokat találhat." "A háttéradatok korlátozása csak akkor lehetséges, ha beállított mobil adatkorlátot." "Bekapcsolja a szinkronizálást?" - "Az interneten végrehajtott fiókmódosítások automatikusan megjelennek táblagépén is."\n\n"Egyes fiókok esetében ez fordítva is igaz. A Google Fiók az utóbbi szerint működik."\n\n"Annak kiválasztásához, hogy mi legyen szinkronizálva az egyes fiókokon belül, menjen a Beállítások > Fiókok lehetőségre." - "Az interneten végrehajtott fiókmódosítások automatikusan megjelennek telefonján is."\n\n"Egyes fiókok esetében ez fordítva is igaz. A Google Fiók az utóbbi szerint működik."\n\n"Annak kiválasztásához, hogy mi legyen szinkronizálva az egyes fiókokon belül, menjen a Beállítások > Fiókok lehetőségre." + "Az interneten végrehajtott fiókmódosítások automatikusan megjelennek táblagépén is.\n\nEgyes fiókok esetében ez fordítva is igaz. A Google Fiók az utóbbi szerint működik.\n\nAnnak kiválasztásához, hogy mi legyen szinkronizálva az egyes fiókokon belül, menjen a Beállítások > Fiókok lehetőségre." + "Az interneten végrehajtott fiókmódosítások automatikusan megjelennek telefonján is.\n\nEgyes fiókok esetében ez fordítva is igaz. A Google Fiók az utóbbi szerint működik.\n\nAnnak kiválasztásához, hogy mi legyen szinkronizálva az egyes fiókokon belül, menjen a Beállítások > Fiókok lehetőségre." "Kikapcsolja a szinkronizálást?" "Ez mérsékelni fogja az adat- és akkumulátorhasználatot, de minden egyes fiókot manuálisan kell majd szinkronizálnia a legfrissebb információk begyűjtéséhez. Továbbá nem fog értesítéseket kapni a frissítésekről." "Használati ciklus visszaállításának ideje" @@ -1751,12 +1769,12 @@ "Adathasználati figyelmeztetés beállítása" "Adathasználati korlát beállítása" "Adatforgalom korlátozása" - "A mobilhálózat adatkapcsolatát a rendszer letiltja a megadott korlát elérésekor."\n\n"Mivel az adathasználatot a táblagép méri, és a szolgáltató mérése eltérhet ettől, célszerű óvatosabb korlátot beállítani." - "A mobilhálózat adatkapcsolatát a rendszer letiltja a megadott korlát elérésekor."\n\n"Mivel az adathasználatot a telefon méri, és a szolgáltató mérése eltérhet ettől, célszerű óvatosabb korlátot beállítani." + "A mobilhálózat adatkapcsolatát a rendszer letiltja a megadott korlát elérésekor.\n\nMivel az adathasználatot a táblagép méri, és a szolgáltató mérése eltérhet ettől, célszerű óvatosabb korlátot beállítani." + "A mobilhálózat adatkapcsolatát a rendszer letiltja a megadott korlát elérésekor.\n\nMivel az adathasználatot a telefon méri, és a szolgáltató mérése eltérhet ettől, célszerű óvatosabb korlátot beállítani." "Korlátozza a háttéradatokat?" "Ha korlátozza a háttérben zajló mobil adatforgalmat, néhány alkalmazás és szolgáltatás nem fog működni, ha a Wi-Fi nincs engedélyezve." - "Ha korlátozza a háttérben futó mobil adatátvitelt, bizonyos alkalmazások és szolgáltatások nem fognak működni, amíg nem kapcsolódik Wi-Fi hálózathoz."\n\n"Ez a beállítás minden felhasználót érint ezen a táblagépen." - "Ha korlátozza a háttérben futó mobil adatátvitelt, bizonyos alkalmazások és szolgáltatások nem fognak működni, amíg nem kapcsolódik Wi-Fi hálózathoz."\n\n"Ez a beállítás minden felhasználót érint ezen a telefonon." + "Ha korlátozza a háttérben futó mobil adatátvitelt, bizonyos alkalmazások és szolgáltatások nem fognak működni, amíg nem kapcsolódik Wi-Fi hálózathoz.\n\nEz a beállítás minden felhasználót érint ezen a táblagépen." + "Ha korlátozza a háttérben futó mobil adatátvitelt, bizonyos alkalmazások és szolgáltatások nem fognak működni, amíg nem kapcsolódik Wi-Fi hálózathoz.\n\nEz a beállítás minden felhasználót érint ezen a telefonon." "^1"" ""^2"\n"figyelmeztetés" "^1"" ""^2"\n"korlát" "Eltávolított alkalmazások" @@ -1845,8 +1863,8 @@ "Felhasználó" "Korlátozott profil" "Új felhasználó hozzáadása" - "Ezt a készüléket további felhasználókat létrehozva megoszthatja más személyekkel. Minden felhasználó rendelkezik saját térrel, amelyet személyre szabhat saját alkalmazásaival, háttérképével stb. A felhasználók módosíthatják a táblagép olyan beállításait is, amelyek mindenkit érintenek, például a Wi-Fi beállításait."\n" "\n"Miután létrehoz egy új felhasználót, az adott személynek el kell végeznie egy telepítési folyamatot."\n\n"Minden felhasználó elfogadhatja a frissített alkalmazások engedélyeit az összes többi felhasználó nevében." - "Miután létrehozott egy új felhasználót, az adott személynek keresztül kell mennie egy telepítési folyamaton."\n" "\n"Minden felhasználó elfogadhatja a frissített alkalmazások engedélyeit az összes többi felhasználó nevében." + "Ezt a készüléket további felhasználókat létrehozva megoszthatja más személyekkel. Minden felhasználó rendelkezik saját térrel, amelyet személyre szabhat saját alkalmazásaival, háttérképével stb. A felhasználók módosíthatják a táblagép olyan beállításait is, amelyek mindenkit érintenek, például a Wi-Fi beállításait.\n \nMiután létrehoz egy új felhasználót, az adott személynek el kell végeznie egy telepítési folyamatot.\n\nMinden felhasználó elfogadhatja a frissített alkalmazások engedélyeit az összes többi felhasználó nevében." + "Miután létrehozott egy új felhasználót, az adott személynek keresztül kell mennie egy telepítési folyamaton.\n \nMinden felhasználó elfogadhatja a frissített alkalmazások engedélyeit az összes többi felhasználó nevében." "Beállít most egy felhasználót?" "Győződjön meg arról, hogy a személy hozzá tud férni a táblagéphez, hogy beállíthassa a területét" "Létrehoz most egy profilt?" @@ -1877,6 +1895,9 @@ "Ez a beállítás minden felhasználót érint ezen a telefonon." "Nyelv módosítása" "Betűméret módosítása" + "Korlátozások" + "Korlátozások feloldása" + "PIN kód módosítása" "Értesítések megjelenítése" "Súgó" "Tartalom fiókja" diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml index baa34d0c7bc..b2a7df5bd1b 100644 --- a/res/values-in/arrays.xml +++ b/res/values-in/arrays.xml @@ -233,7 +233,8 @@ "Lokasi" "Pribadi" "Perpesanan" - "Perangkat" + "Media" + "Perangkat"
    "lokasi sementara" @@ -267,6 +268,17 @@ "putar audio" "baca papan klip" "ubah papan klip" + "tombol media" + "fokus audio" + "volume master" + "volume suara" + "volume dering" + "volume media" + "volume alarm" + "volume pemberitahuan" + "volume bluetooth" + "tetap aktif" + "monitor lokasi" "Lokasi" @@ -300,12 +312,33 @@ "Putar audio" "Baca papan klip" "Ubah papan klip" + "Tombol media" + "Fokus audio" + "Volume utama" + "Volume suara" + "Volume dering" + "Volume media" + "Volume alarm" + "Volume pemberitahuan" + "Volume bluetooth" + "Tetap aktif" + "Lokasi" "Singkat" "Sedang" "Lama" + + "Dalvik" + "ART" + "ART (debug)" + + + "Gunakan Dalvik" + "Gunakan ART" + "Gunakan bentukan debug ART" + "Jangan periksa" "Periksa hanya konten DRM" @@ -367,6 +400,11 @@ "Di layar dalam bentuk garis" "Di adb shell dumpsys gfxinfo" + + "Nonaktif" + "Tampilkan area overdraw" + "Lihat penghitung overdraw" + "Batas standar" "Tanpa proses latar belakang" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index f6f9149f1e8..cd37a1eed81 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -275,8 +275,8 @@ "Anda telah kehilangan konektivitas data karena Anda meninggalkan jaringan asal dalam keadaan roaming data dimatikan." "Hidupkan" "Saat Anda mengizinkan roaming data, Anda dapat dikenai tagihan roaming yang tinggi!" - "Jika Anda mengizinkan roaming data, Anda mungkin dikenai tagihan roaming!"\n\n"Setelan ini memengaruhi semua pengguna di tablet ini." - "Jika Anda mengizinkan roaming data, Anda mungkin dikenai tagihan roaming!"\n\n"Setelan ini memengaruhi semua pengguna di ponsel ini." + "Jika Anda mengizinkan roaming data, Anda mungkin dikenai tagihan roaming!\n\nSetelan ini memengaruhi semua pengguna di tablet ini." + "Jika Anda mengizinkan roaming data, Anda mungkin dikenai tagihan roaming!\n\nSetelan ini memengaruhi semua pengguna di ponsel ini." "Izinkan roaming data?" "Pilihan operator" "Pilih operator jaringan" @@ -322,8 +322,8 @@ "Memerlukan PIN atau sandi angka untuk mengurai enkripsi tablet tiap kali Anda menyalakannya" "Memerlukan PIN atau sandi angka untuk mengurai enkripsi ponsel tiap kali Anda menyalakannya" "Dienkripsi" - "Anda dapat mengenkripsi akun, setelan, apl yang diunduh dan datanya, media, serta file lainnya. Setelah mengenkripsi tablet, Anda perlu memasukkan PIN numerik atau sandi untuk mendekripsinya setiap kali Anda menyalakannya. Anda tidak dapat membatalkan enkripsi tablet kecuali dengan mengembalikannya ke setelan pabrik yang akan menghapus seluruh data Anda."\n\n"Enkripsi memakan waktu satu jam atau lebih. Anda harus memulainya dengan baterai yang terisi penuh dan terus menghubungkan tablet dengan sumber daya hingga enkripsi selesai. Jika Anda menghentikan proses enkripsi, Anda akan kehilangan sebagian atau seluruh data Anda." - "Anda dapat mengenkripsi akun, setelan, apl yang diunduh dan datanya, media, serta file lainnya. Setelah mengenkripsi ponsel, Anda perlu memasukkan PIN numerik atau sandi untuk mendekripsinya setiap kali Anda menghidupkannya. Anda tidak dapat membatalkan enkripsi ponsel kecuali dengan mengembalikan ke setelan pabrik dan akan menghapus seluruh data Anda."\n\n"Enkripsi memakan waktu satu jam atau lebih. Anda harus memulainya dengan baterai yang terisi penuh dan terus menghubungkan ponsel dengan sumber daya hingga enkripsi selesai. Jika Anda menghentikan proses enkripsi, Anda akan kehilangan sebagian atau seluruh data Anda." + "Anda dapat mengenkripsi akun, setelan, apl yang diunduh dan datanya, media, serta file lainnya. Setelah mengenkripsi tablet, Anda perlu memasukkan PIN numerik atau sandi untuk mendekripsinya setiap kali Anda menyalakannya. Anda tidak dapat membatalkan enkripsi tablet kecuali dengan mengembalikannya ke setelan pabrik yang akan menghapus seluruh data Anda.\n\nEnkripsi memakan waktu satu jam atau lebih. Anda harus memulainya dengan baterai yang terisi penuh dan terus menghubungkan tablet dengan sumber daya hingga enkripsi selesai. Jika Anda menghentikan proses enkripsi, Anda akan kehilangan sebagian atau seluruh data Anda." + "Anda dapat mengenkripsi akun, setelan, apl yang diunduh dan datanya, media, serta file lainnya. Setelah mengenkripsi ponsel, Anda perlu memasukkan PIN numerik atau sandi untuk mendekripsinya setiap kali Anda menghidupkannya. Anda tidak dapat membatalkan enkripsi ponsel kecuali dengan mengembalikan ke setelan pabrik dan akan menghapus seluruh data Anda.\n\nEnkripsi memakan waktu satu jam atau lebih. Anda harus memulainya dengan baterai yang terisi penuh dan terus menghubungkan ponsel dengan sumber daya hingga enkripsi selesai. Jika Anda menghentikan proses enkripsi, Anda akan kehilangan sebagian atau seluruh data Anda." "Enkripsi tablet" "Enkripsi ponsel" "Isi daya baterai Anda dan coba lagi." @@ -339,8 +339,8 @@ "Coba lagi dalam ^1 detik." "Ketikkan sandi Anda" "Enkripsi gagal" - "Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data pada tablet Anda tidak dapat diakses lagi. "\n\n" Untuk terus menggunakan tablet, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan tablet setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google." - "Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data di ponsel Anda tidak dapat diakses lagi. "\n\n" Untuk terus menggunakan ponsel, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan ponsel setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google." + "Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data pada tablet Anda tidak dapat diakses lagi. \n\n Untuk terus menggunakan tablet, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan tablet setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google." + "Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data di ponsel Anda tidak dapat diakses lagi. \n\n Untuk terus menggunakan ponsel, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan ponsel setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google." "Beralih metode masukan" "Pilih kunci layar" "Pilih gembok cadangan" @@ -514,6 +514,7 @@ "Menyambung" "Tersambung" "Tersedia" + "Sedang digunakan" "Setelan layar" "Putuskan sambungan?" "Ini akan mengakhiri sambungan Anda dengan:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Mati" "Tidak tersedia karena NFC dimatikan" "Android Beam" - "Jika fitur ini dihidupkan, Anda dapat memancarkan konten apl ke perangkat berkemampuan NFC lainnya dengan mendekatkan kedua perangkat. Contohnya, Anda dapat memancarkan laman Browser, video YouTube, kontak Orang, dan lain-lain."\n\n"Cukup dekatkan kedua perangkat (biasanya saling membelakangi) lalu sentuh layar Anda. Apl ini akan menentukan apa yang dipancarkan." + "Jika fitur ini dihidupkan, Anda dapat memancarkan konten apl ke perangkat berkemampuan NFC lainnya dengan mendekatkan kedua perangkat. Contohnya, Anda dapat memancarkan laman Browser, video YouTube, kontak Orang, dan lain-lain.\n\nCukup dekatkan kedua perangkat (biasanya saling membelakangi) lalu sentuh layar Anda. Apl ini akan menentukan apa yang dipancarkan." "Penemuan layanan jaringan" "Izinkan aplikasi di perangkat lain menemukan aplikasi di perangkat ini" "Wi‑Fi" @@ -620,7 +621,7 @@ "Diamankan dengan %1$s" ", diamankan dengan %1$s" "Tidak Ada" - "Untuk meningkatkan ketepatan lokasi dan untuk tujuan lainnya, %1$s ingin mengaktifkan pemindaian jaringan, bahkan saat Wi-Fi sedang tidak aktif."\n\n"Izinkan ini untuk semua aplikasi yang ingin memindai?" + "Untuk meningkatkan ketepatan lokasi dan untuk tujuan lainnya, %1$s ingin mengaktifkan pemindaian jaringan, bahkan saat Wi-Fi sedang tidak aktif.\n\nIzinkan ini untuk semua aplikasi yang ingin memindai?" "Izinkan" "Tolak" "Sambungkan" @@ -632,8 +633,8 @@ "Batal" "Lewati saja" "Jangan lewati" - "PERINGATAN: Anda mungkin dikenai tagihan data operator tambahan."\n\n"Penyiapan tablet mungkin memerlukan aktivitas jaringan yang signifikan." - "PERINGATAN: Anda mungkin dikenai tagihan data operator tambahan."\n\n"Penyiapan ponsel mungkin memerlukan aktivitas jaringan yang signifikan." + "PERINGATAN: Anda mungkin dikenai tagihan data operator tambahan.\n\nPenyiapan tablet mungkin memerlukan aktivitas jaringan yang signifikan." + "PERINGATAN: Anda mungkin dikenai tagihan data operator tambahan.\n\nPenyiapan ponsel mungkin memerlukan aktivitas jaringan yang signifikan." "PERINGATAN: Hingga Anda memiliki koneksi internet, tablet tidak akan dapat memverifikasi bahwa perangkat lunak Anda telah diperbarui." "PERINGATAN: Hingga Anda memiliki koneksi internet, ponsel tidak akan dapat memverifikasi bahwa perangkat lunak Anda telah diperbarui." "Tablet tidak dapat menyambung ke jaringan Wi-Fi ini." @@ -773,9 +774,9 @@ "PIN SIM" "PIN salah" "PIN tidak cocok" - "Tidak dapat mengubah PIN."\n"PIN mungkin salah." + "Tidak dapat mengubah PIN.\nPIN mungkin salah." "PIN SIM berhasil diubah" - "Tidak bisa mengubah status kunci kartu SIM."\n"PIN Mungkin salah." + "Tidak bisa mengubah status kunci kartu SIM.\nPIN Mungkin salah." "Oke" "Batal" "Status tablet" @@ -918,9 +919,9 @@ "Kembalikan ke setelan pabrik" "Hapus semua data di tablet" "Hapus semua data pada ponsel" - "Ini akan menghapus semua data dari ""penyimpanan internal"" tablet Anda, termasuk:"\n\n
  • "Akun Google Anda"
  • \n
  • "Data sistem dan apl serta setelan"
  • \n
  • "Apl unduhan"
  • - "Ini akan menghapus semua data dari ""penyimpanan internal"" ponsel Anda, termasuk:"\n\n
  • "Akun Google Anda"
  • \n
  • "Data sistem dan apl serta setelan"
  • \n
  • "Apl unduhan"
  • - \n\n"Saat ini Anda telah masuk ke akun berikut ini:"\n + "Ini akan menghapus semua data dari ""penyimpanan internal"" tablet Anda, termasuk:\n\n"
  • "Akun Google Anda"
  • \n
  • "Data sistem dan apl serta setelan"
  • \n
  • "Apl unduhan"
  • + "Ini akan menghapus semua data dari ""penyimpanan internal"" ponsel Anda, termasuk:\n\n"
  • "Akun Google Anda"
  • \n
  • "Data sistem dan apl serta setelan"
  • \n
  • "Apl unduhan"
  • + \n\n"Saat ini Anda telah masuk ke akun berikut ini:\n"
  • "Musik"
  • \n
  • "Foto"
  • \n
  • "Data pengguna lainnya"
  • \n\n"Untuk menghapus gambar, musik, dan data pengguna lainnya, ""penyimpanan USB"" perlu dihapus." \n\n"Untuk menghapus musik, gambar, dan data pengguna lainnya, ""kartu SD"" perlu dihapus." @@ -1105,7 +1106,7 @@ "Tampilkn proses pd tmbolok" "Setel ulang pref aplikasi" "Setel ulang pref aplikasi?" - "Tindakan ini akan menyetel ulang semua preferensi untuk:"\n\n" "
  • "Aplikasi yang dinonaktifkan"
  • \n" "
  • "Pemberitahuan aplikasi yang dinonaktifkan"
  • \n" "
  • "Aplikasi default untuk tindakan"
  • \n" "
  • "Batas data latar belakang untuk aplikasi"
  • \n\n" Anda tidak akan kehilangan data aplikasi apa pun."
    + "Tindakan ini akan menyetel ulang semua preferensi untuk:\n\n "
  • "Aplikasi yang dinonaktifkan"
  • \n" "
  • "Pemberitahuan aplikasi yang dinonaktifkan"
  • \n" "
  • "Aplikasi default untuk tindakan"
  • \n" "
  • "Batas data latar belakang untuk aplikasi"
  • \n\n" Anda tidak akan kehilangan data aplikasi apa pun."
    "Setel ulang aplikasi" "Kelola ruang" "Filter" @@ -1240,9 +1241,7 @@ "Untuk beralih, tekan Control-Spasi" "Default" "Tata letak keyboard" - "Kamus pengguna" - "Kamus pribadi" - "Kamus pribadi" + "Kamus pribadi" "Tambahkan" "Tambahkan ke kamus" @@ -1303,6 +1302,11 @@ "Menyertakan opsi dalam menu daya untuk mengambil laporan bug" "Tetap terjaga" "Layar tidak akan redup selama mengisi daya" + "Aktifkan log pengintaian HCI Bluetooth" + "Tangkap semua paket HCI bluetooth di dalam file" + "Pilih waktu operasi" + "Pilih waktu operasi" + "Nyalakan ulang untuk mengubah waktu operasi dari %1$s ke %2$s?" "Mengizinkan lokasi palsu" "Mengizinkan lokasi palsu" "Izinkan melakukan debug USB?" @@ -1315,11 +1319,13 @@ "Lindungi penyimpanan USB" "Aplikasi harus meminta izin untuk membaca penyimpanan USB" "Lindungi penyimpanan USB?" - "Jika penyimpanan USB dilindungi, aplikasi harus meminta izin untuk membaca data dari penyimpanan eksternal."\n\n"Beberapa aplikasi mungkin tidak berfungsi sebelum diperbarui oleh pengembangnya." + "Jika penyimpanan USB dilindungi, aplikasi harus meminta izin untuk membaca data dari penyimpanan eksternal.\n\nBeberapa aplikasi mungkin tidak berfungsi sebelum diperbarui oleh pengembangnya." "Lindungi kartu SD" "Aplikasi harus meminta izin untuk membaca kartu SD" "Lindungi kartu SD?" - "Jika kartu SD dilindungi, aplikasi harus meminta izin untuk membaca data dari penyimpanan eksternal."\n\n"Beberapa aplikasi mungkin tidak berfungsi sebelum diperbarui oleh pengembangnya." + "Jika kartu SD dilindungi, aplikasi harus meminta izin untuk membaca data dari penyimpanan eksternal.\n\nBeberapa aplikasi mungkin tidak berfungsi sebelum diperbarui oleh pengembangnya." + "Terminal lokal" + "Aktifkan aplikasi terminal yang menawarkan akses kerangka lokal" "Pilih gadget" "Pilih widget" "Buat widget dan izinkan akses?" @@ -1340,11 +1346,11 @@ "Layanan" "Sistem" "Isyarat pembesaran" - "Saat fitur ini diaktifkan, Anda dapat memperbesar dan memperkecil dengan mengetuk layar tiga kali."\n\n"Saat memperbesar, Anda dapat:"\n
    • "Menggeser: Seret dua jari atau lebih melintasi layar."
    • \n
    • "Menyesuaikan tingkat pembesaran/pengecilan: Cubit dua jari atau lebih bersamaan atau rentangkan jari Anda."
    \n\n"Anda juga dapat memperbesar yang ada di bawah jari Anda secara sementara dengan mengetuk tiga kali lalu tahan. Dalam keadaan yang diperbesar ini, Anda dapat menyeret jari untuk menjelajah bagian layar yang berbeda. Angkat jari Anda untuk mengembalikan ke keadaan sebelumnya."\n\n"Catatan: Ketukan tiga kali untuk pembesaran bekerja di mana pun kecuali pada keyboard dan bilah navigasi."
    + "Saat fitur ini diaktifkan, Anda dapat memperbesar dan memperkecil dengan mengetuk layar tiga kali.\n\nSaat memperbesar, Anda dapat:\n"
    • "Menggeser: Seret dua jari atau lebih melintasi layar."
    • \n
    • "Menyesuaikan tingkat pembesaran/pengecilan: Cubit dua jari atau lebih bersamaan atau rentangkan jari Anda."
    \n\n"Anda juga dapat memperbesar yang ada di bawah jari Anda secara sementara dengan mengetuk tiga kali lalu tahan. Dalam keadaan yang diperbesar ini, Anda dapat menyeret jari untuk menjelajah bagian layar yang berbeda. Angkat jari Anda untuk mengembalikan ke keadaan sebelumnya.\n\nCatatan: Ketukan tiga kali untuk pembesaran bekerja di mana pun kecuali pada keyboard dan bilah navigasi."
    "Pintasan aksesibilitas" "Aktif" "Mati" - "Jika fitur ini diaktifkan, Anda dapat mengaktifkan fitur aksesibilitas dengan cepat dalam dua langkah:"\n\n"Langkah 1: Tekan terus tombol daya sampai terdengar suara atau terasa getaran."\n\n"Langkah 2: Sentuh dan tahan dua jari sampai terdengar konfirmasi audio."\n\n"Jika perangkat memiliki beberapa pengguna, pintasan pada layar kunci ini dapat digunakan untuk mengaktifkan aksesibilitas sementara sampai perangkat terbuka kuncinya." + "Jika fitur ini diaktifkan, Anda dapat mengaktifkan fitur aksesibilitas dengan cepat dalam dua langkah:\n\nLangkah 1: Tekan terus tombol daya sampai terdengar suara atau terasa getaran.\n\nLangkah 2: Sentuh dan tahan dua jari sampai terdengar konfirmasi audio.\n\nJika perangkat memiliki beberapa pengguna, pintasan pada layar kunci ini dapat digunakan untuk mengaktifkan aksesibilitas sementara sampai perangkat terbuka kuncinya." "Teks besar" "Pembesaran layar" "Perbarui otomatis pembesaran layar" @@ -1366,6 +1372,16 @@ "TalkBack menyediakan masukan lisan untuk membantu pengguna yang buta dan tidak terlalu baik penglihatannya. Apakah Anda ingin memasangnya secara gratis dari Android Market?" "Tidak tersedia deskripsi." "Setelan" + "Pencetakan" + "Setelan pencetakan" + "Layanan" + "Gunakan %1$s?" + "%1$s dapat menerima dokumen yang Anda cetak. Dokumen seperti itu dapat berisi data sensitif." + "Tidak ada layanan terpasang" + "Setelan" + "Tambahkan printer" + "Aktif" + "Nonaktif" "Baterai" "Apa yang menggunakan daya baterai" "Data penggunaan baterai tidak tersedia." @@ -1405,8 +1421,10 @@ "Wi-Fi berjalan" "Tablet" "Telepon" - "Data terkirim" - "Data diterima" + "Data seluler terkirim" + "Data seluler diterima" + "Data Wi‑Fi terkirim" + "Data Wi-Fi diterima" "Audio" "Video" "Waktu hidup" @@ -1460,6 +1478,7 @@ "Tinggi nada" "Mempengaruhi nada teks yang disampaikan" "Bahasa" + "Bahasa tidak dipilih" "Menyetel suara spesifik bahasa untuk teks lisan" "Dengarkan contoh" "Putar demonstrasi singkat dari sintesis suara" @@ -1594,7 +1613,7 @@ "EAP tidak didukung." "Anda tidak dapat mengonfigurasi sambungan Wi-Fi EAP selama penyiapan. Setelah penyiapan, Anda dapat melakukannya di Setelan > Nirkabel & jaringan." "Menyambungkan membutuhkan waktu beberapa menit..." - "Sentuh ""Berikutnya"" untuk melanjutkan penyiapan."\n\n"Sentuh ""Kembali"" untuk menyambung ke jaringan Wi-Fi lain." + "Sentuh ""Berikutnya"" untuk melanjutkan penyiapan.\n\nSentuh ""Kembali"" untuk menyambung ke jaringan Wi-Fi lain." "Sinkronisasi diaktifkan" "Sinkronisasi dinonaktifkan" "Kesalahan sinkronisasi." @@ -1622,7 +1641,7 @@ "Gmail" "Kalender" "Kontak" - "Selamat datang di Google sync!"" "\n"Pendekatan Google untuk menyinkronkan data guna memungkinkan akses ke kontak, janji temu, dan lain-lain dari mana saja." + "Selamat datang di Google sync!"" \nPendekatan Google untuk menyinkronkan data guna memungkinkan akses ke kontak, janji temu, dan lain-lain dari mana saja." "Setelan sinkronisasi apl" "Data & sinkronisasi" "Ubah sandi" @@ -1676,8 +1695,7 @@ "Tampilan cepat dlm jendela saat digambar dgn GPU" "Tunjukkan pembaruan lapisan hardware" "Lapisan hardware berkedip hijau saat memperbarui" - "Tampilkan kelebihan GPU" - "Terbaik-terburuk: biru, hijau, merah terang, merah" + "Debug overdraw oleh GPU" "Nonaktifkan lapisan HW" "Selalu gunakan GPU untuk pengomposisian layar" "Aktifkan jejak OpenGL" @@ -1738,11 +1756,11 @@ "Matikan data latar di jaringan seluler. Jika ada, pakai lainnya." "Untuk membatasi data latar belakang pada apl ini, setel batas data seluler terlebih dulu." "Batasi data latar belakang?" - "Fitur ini dapat menghentikan aplikasi yang bergantung pada data latar saat hanya ada jaringan seluler."\n\n"Anda dapat menemukan kontrol penggunaan data yang lebih sesuai dalam setelan yang tersedia dalam aplikasi." + "Fitur ini dapat menghentikan aplikasi yang bergantung pada data latar saat hanya ada jaringan seluler.\n\nAnda dapat menemukan kontrol penggunaan data yang lebih sesuai dalam setelan yang tersedia dalam aplikasi." "Pembatasan data latar belakang hanya dimungkinkan bila Anda telah menyetel batas data seluler." "Aktifkan sinkronisasi data otomatis?" - "Semua perubahan yang dilakukan pada akun Anda di web akan disalin ke tablet Anda secara otomatis."\n\n"Beberapa akun juga dapat menyalin semua perubahan yang dilakukan di tablet ke web secara otomatis. Beginilah cara kerja Akun Google."\n\n"Untuk memilih jenis informasi yang akan disinkronkan dalam setiap akun, buka Setelan > Akun." - "Semua perubahan yang dilakukan pada akun Anda di web akan disalin ke ponsel Anda secara otomatis."\n\n"Beberapa akun juga dapat menyalin semua perubahan yang dilakukan di ponsel ke web secara otomatis. Beginilah cara kerja Akun Google."\n\n"Untuk memilih jenis informasi yang akan disinkronkan dalam setiap akun, buka Setelan > Akun." + "Semua perubahan yang dilakukan pada akun Anda di web akan disalin ke tablet Anda secara otomatis.\n\nBeberapa akun juga dapat menyalin semua perubahan yang dilakukan di tablet ke web secara otomatis. Beginilah cara kerja Akun Google.\n\nUntuk memilih jenis informasi yang akan disinkronkan dalam setiap akun, buka Setelan > Akun." + "Semua perubahan yang dilakukan pada akun Anda di web akan disalin ke ponsel Anda secara otomatis.\n\nBeberapa akun juga dapat menyalin semua perubahan yang dilakukan di ponsel ke web secara otomatis. Beginilah cara kerja Akun Google.\n\nUntuk memilih jenis informasi yang akan disinkronkan dalam setiap akun, buka Setelan > Akun." "Nonaktifkan sinkronisasi data otomatis?" "Hal ini akan menghemat penggunaan baterai dan data, tapi Anda perlu menyinkronkan setiap akun secara manual untuk mengumpulkan informasi terkini. Anda juga tidak akan menerima pemberitahuan ketika ada pembaruan." "Tanggal penyetelan ulang daur penggunaan" @@ -1751,12 +1769,12 @@ "Setel peringatan penggunaan data" "Setel batas penggunaan data" "Membatasi penggunaan data" - "Sambungan data seluler Anda akan dinonaktifkan ketika mencapai batas yang ditentukan."\n\n"Karena penggunaan data dihitung oleh tablet Anda, dan operator Anda mungkin menghitung penggunaan secara berbeda, pertimbangkan untuk menggunakan batas yang konservatif." - "Sambungan data seluler Anda akan dinonaktifkan ketika mencapai batas yang ditentukan."\n\n"Karena penggunaan data dihitung oleh ponsel Anda, dan operator Anda mungkin menghitung penggunaan secara berbeda, pertimbangkan untuk menggunakan batas yang konservatif." + "Sambungan data seluler Anda akan dinonaktifkan ketika mencapai batas yang ditentukan.\n\nKarena penggunaan data dihitung oleh tablet Anda, dan operator Anda mungkin menghitung penggunaan secara berbeda, pertimbangkan untuk menggunakan batas yang konservatif." + "Sambungan data seluler Anda akan dinonaktifkan ketika mencapai batas yang ditentukan.\n\nKarena penggunaan data dihitung oleh ponsel Anda, dan operator Anda mungkin menghitung penggunaan secara berbeda, pertimbangkan untuk menggunakan batas yang konservatif." "Batasi data latar belakang?" "Jika Anda membatasi data seluler latar belakang, beberapa aplikasi dan layanan tidak akan berfungsi kecuali jika Anda terhubung ke jaringan Wi-Fi." - "Jika Anda membatasi data seluler latar belakang, beberapa aplikasi dan layanan tidak akan berfungsi kecuali Anda terhubung ke jaringan Wi-Fi."\n\n"Setelan ini memengaruhi semua pengguna di tablet ini." - "Jika Anda membatasi data seluler latar belakang, beberapa aplikasi dan layanan tidak akan berfungsi kecuali Anda terhubung ke jaringan Wi-Fi."\n\n"Setelan ini memengaruhi semua pengguna di ponsel ini." + "Jika Anda membatasi data seluler latar belakang, beberapa aplikasi dan layanan tidak akan berfungsi kecuali Anda terhubung ke jaringan Wi-Fi.\n\nSetelan ini memengaruhi semua pengguna di tablet ini." + "Jika Anda membatasi data seluler latar belakang, beberapa aplikasi dan layanan tidak akan berfungsi kecuali Anda terhubung ke jaringan Wi-Fi.\n\nSetelan ini memengaruhi semua pengguna di ponsel ini." "^1""^2"\n"peringatan" "batas"\n"^1"" ""^2" "Apl dihapus" @@ -1843,8 +1861,8 @@ "Pengguna" "Profil dibatasi" "Tambahkan pengguna baru" - "Anda dapat berbagi perangkat ini bersama orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruangnya sendiri yang dapat disesuaikan dengan aplikasinya sendiri, wallpaper, dan sebagainya. Pengguna juga dapat menyesuaikan setelan tablet seperti Wi-Fi yang memengaruhi siapa saja."\n\n"Setelah Anda membuat pengguna baru, orang tersebut harus melakukan proses penyiapan."\n\n"Setiap pengguna dapat menerima izin aplikasi yang diperbarui atas nama semua pengguna lain." - "Setelah Anda membuat pengguna baru, orang tersebut perlu menjalani proses penyiapan."\n\n"Setiap pengguna dapat menerima izin aplikasi yang diperbarui atas nama semua pengguna lain." + "Anda dapat berbagi perangkat ini bersama orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruangnya sendiri yang dapat disesuaikan dengan aplikasinya sendiri, wallpaper, dan sebagainya. Pengguna juga dapat menyesuaikan setelan tablet seperti Wi-Fi yang memengaruhi siapa saja.\n\nSetelah Anda membuat pengguna baru, orang tersebut harus melakukan proses penyiapan.\n\nSetiap pengguna dapat menerima izin aplikasi yang diperbarui atas nama semua pengguna lain." + "Setelah Anda membuat pengguna baru, orang tersebut perlu menjalani proses penyiapan.\n\nSetiap pengguna dapat menerima izin aplikasi yang diperbarui atas nama semua pengguna lain." "Siapkan pengguna sekarang?" "Pastikan orang tersebut tersedia untuk mengambil tablet dan menyiapkan ruangnya" "Siapkan profil sekarang?" @@ -1875,6 +1893,9 @@ "Setelan ini memengaruhi semua pengguna di ponsel ini." "Ubah bahasa" "Ubah ukuran font" + "Batasan" + "Hapus batasan" + "Ubah PIN" "Tampilkan pemberitahuan" "Bantuan" "Akun untuk konten" diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml index 8763dc4577f..f1d1469697a 100644 --- a/res/values-it/arrays.xml +++ b/res/values-it/arrays.xml @@ -233,7 +233,8 @@ "Posizione" "Personali" "Messaggi" - "Dispositivo" + "Contenuti multimediali" + "Dispositivo"
    "posizione approssimativa" @@ -267,6 +268,17 @@ "riproduzione audio" "lettura degli appunti" "modifica degli appunti" + "pulsanti contenuti multimediali" + "focus audio" + "volume principale" + "volume voce" + "volume suoneria" + "volume contenuti multimediali" + "volume allarme" + "volume notifiche" + "volume bluetooth" + "mantieni attivo" + "monitora posizione" "Posizione" @@ -300,12 +312,33 @@ "Riproduzione audio" "Lettura degli appunti" "Modifica degli appunti" + "Pulsanti contenuti multimediali" + "Focus audio" + "Volume principale" + "Volume voce" + "Volume suoneria" + "Volume contenuti multimediali" + "Volume allarme" + "Volume notifiche" + "Volume Bluetooth" + "Mantieni attivo" + "Posizione" "Breve" "Medio" "Lungo" + + "Dalvik" + "ART" + "ART (debug)" + + + "Usa Dalvik" + "Usa ART" + "Usa la build di debug ART" + "Non verificare mai" "Verifica solo per contenuti DRM" @@ -367,6 +400,11 @@ "Su schermo sotto forma di linee" "In adb shell dumpsys gfxinfo" + + "Off" + "Mostra aree overdraw" + "Mostra contatore overdraw" + "Limite standard" "Nessun processo in background" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index c04ac267ca2..42bad7db26d 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -275,8 +275,8 @@ "Connettività dati persa: hai lasciato la rete del tuo operatore con il roaming dati disattivato." "Attiva" "Se consenti il roaming dei dati i costi potrebbero essere elevati." - "Quando consenti il roaming dei dati, potrebbero essere addebitati costi significativi per il roaming."\n\n"Questa impostazione influisce su tutti gli utenti di questo tablet." - "Quando consenti il roaming dei dati, potrebbero essere addebitati costi significativi per il roaming."\n\n"Questa impostazione influisce su tutti gli utenti di questo telefono." + "Quando consenti il roaming dei dati, potrebbero essere addebitati costi significativi per il roaming.\n\nQuesta impostazione influisce su tutti gli utenti di questo tablet." + "Quando consenti il roaming dei dati, potrebbero essere addebitati costi significativi per il roaming.\n\nQuesta impostazione influisce su tutti gli utenti di questo telefono." "Consentire il roaming dei dati?" "Selezione operatore" "Scegli un operatore di rete" @@ -322,8 +322,8 @@ "Richiedi un PIN numerico o una password per decrittografare il tablet a ogni accensione" "Richiedi un PIN numerico o una password per decrittografare il telefono a ogni accensione" "Crittografato" - "Puoi crittografare i tuoi account, le impostazioni, le applicazioni scaricate e i relativi dati, file multimediali e altri file. Una volta crittografato il tablet, devi digitare un PIN numerico o una password per decrittografarlo ogni volta che lo accendi. Non puoi decrittografare il tablet se non eseguendo un ripristino dati di fabbrica, cancellando tutti i tuoi dati."\n\n"La crittografia potrebbe richiedere più di un\'ora. Devi iniziare con una batteria carica e tenere il tablet collegato fino al completamento della crittografia. Se interrompi la procedura, perderai alcuni o tutti i tuoi dati." - "Puoi crittografare i tuoi account, le impostazioni, le applicazioni scaricate e i relativi dati, file multimediali e altri file. Una volta crittografato il telefono, devi digitare un PIN numerico o una password per decrittografarlo ogni volta che lo accendi. Non puoi decrittografare il telefono se non eseguendo un ripristino dati di fabbrica, cancellando tutti i tuoi dati."\n\n"La crittografia potrebbe richiedere più di un\'ora. Devi iniziare con una batteria carica e tenere il telefono collegato fino al completamento della crittografia. Se interrompi la procedura, perderai alcuni o tutti i tuoi dati." + "Puoi crittografare i tuoi account, le impostazioni, le applicazioni scaricate e i relativi dati, file multimediali e altri file. Una volta crittografato il tablet, devi digitare un PIN numerico o una password per decrittografarlo ogni volta che lo accendi. Non puoi decrittografare il tablet se non eseguendo un ripristino dati di fabbrica, cancellando tutti i tuoi dati.\n\nLa crittografia potrebbe richiedere più di un\'ora. Devi iniziare con una batteria carica e tenere il tablet collegato fino al completamento della crittografia. Se interrompi la procedura, perderai alcuni o tutti i tuoi dati." + "Puoi crittografare i tuoi account, le impostazioni, le applicazioni scaricate e i relativi dati, file multimediali e altri file. Una volta crittografato il telefono, devi digitare un PIN numerico o una password per decrittografarlo ogni volta che lo accendi. Non puoi decrittografare il telefono se non eseguendo un ripristino dati di fabbrica, cancellando tutti i tuoi dati.\n\nLa crittografia potrebbe richiedere più di un\'ora. Devi iniziare con una batteria carica e tenere il telefono collegato fino al completamento della crittografia. Se interrompi la procedura, perderai alcuni o tutti i tuoi dati." "Esegui crittografia tablet" "Esegui crittografia telefono" "Carica la batteria e riprova." @@ -339,8 +339,8 @@ "Riprova tra ^1 secondi." "Digita la password" "Crittografia non riuscita" - "La crittografia è stata interrotta e non è possibile portarla a termine. Di conseguenza, i dati memorizzati sul tablet non sono più accessibili. "\n\n"Per riprendere a utilizzare il tablet devi effettuare un ripristino dei dati di fabbrica. Quando configuri il tablet dopo il ripristino, hai la possibilità di ripristinare i dati di cui hai effettuato il backup nel tuo account Google." - "La crittografia è stata interrotta e non è possibile portarla a termine. Di conseguenza, i dati memorizzati sul telefono non sono più accessibili. "\n\n"Per riprendere a utilizzare il telefono devi effettuare il ripristino dei dati di fabbrica. Quando configuri il telefono dopo il ripristino, hai la possibilità di ripristinare i dati di cui hai effettuato il backup nel tuo account Google." + "La crittografia è stata interrotta e non è possibile portarla a termine. Di conseguenza, i dati memorizzati sul tablet non sono più accessibili. \n\nPer riprendere a utilizzare il tablet devi effettuare un ripristino dei dati di fabbrica. Quando configuri il tablet dopo il ripristino, hai la possibilità di ripristinare i dati di cui hai effettuato il backup nel tuo account Google." + "La crittografia è stata interrotta e non è possibile portarla a termine. Di conseguenza, i dati memorizzati sul telefono non sono più accessibili. \n\nPer riprendere a utilizzare il telefono devi effettuare il ripristino dei dati di fabbrica. Quando configuri il telefono dopo il ripristino, hai la possibilità di ripristinare i dati di cui hai effettuato il backup nel tuo account Google." "Cambia metodo di immissione" "Scegli blocco schermo" "Scegli blocco di backup" @@ -514,6 +514,7 @@ "Collegamento in corso" "Connesso" "Disponibile" + "In uso" "Impostazioni di visualizzazione" "Disconnettere?" "Questa operazione terminerà la connessione con:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Non attivo" "Non disponibile perché la tecnologia NFC non è attiva" "Android Beam" - "Quando questa funzione è attiva, puoi trasferire contenuti di applicazioni su un altro dispositivo che supporta la tecnologia NFC tenendo vicini i due dispositivi. Puoi trasferire, ad esempio, pagine dell\'applicazione Browser, video di YouTube, contatti di Persone e altri dati."\n\n"È sufficiente avvicinare i dispositivi (generalmente mettendo a contatto le due parti posteriori), quindi toccare lo schermo. L\'applicazione stabilisce i dati da trasferire." + "Quando questa funzione è attiva, puoi trasferire contenuti di applicazioni su un altro dispositivo che supporta la tecnologia NFC tenendo vicini i due dispositivi. Puoi trasferire, ad esempio, pagine dell\'applicazione Browser, video di YouTube, contatti di Persone e altri dati.\n\nÈ sufficiente avvicinare i dispositivi (generalmente mettendo a contatto le due parti posteriori), quindi toccare lo schermo. L\'applicazione stabilisce i dati da trasferire." "Rilevamento servizi di rete" "Consenti alle applicazioni su altri dispositivi di scoprire applicazioni su questo dispositivo" "Wi‑Fi" @@ -620,7 +621,7 @@ "Protetta con %1$s" ", protetta con %1$s" "Nessuna" - "Per migliorare la precisione della posizione e per altri scopi, %1$s chiede di attivare la ricerca della rete, anche quando il Wi-Fi è disattivato."\n\n"Consetirlo a tutte le app che vogliono eseguire la ricerca?" + "Per migliorare la precisione della posizione e per altri scopi, %1$s chiede di attivare la ricerca della rete, anche quando il Wi-Fi è disattivato.\n\nConsetirlo a tutte le app che vogliono eseguire la ricerca?" "Consenti" "Rifiuta" "Connetti" @@ -632,8 +633,8 @@ "Annulla" "Ignora comunque" "Non saltare" - "AVVISO. Potresti incorrere in addebiti extra dell\'operatore per i dati."\n\n"La configurazione del tablet può richiedere notevole attività di rete." - "AVVISO. Potresti incorrere in addebiti extra dell\'operatore per i dati."\n\n"La configurazione del telefono può richiedere notevole attività di rete." + "AVVISO. Potresti incorrere in addebiti extra dell\'operatore per i dati.\n\nLa configurazione del tablet può richiedere notevole attività di rete." + "AVVISO. Potresti incorrere in addebiti extra dell\'operatore per i dati.\n\nLa configurazione del telefono può richiedere notevole attività di rete." "AVVISO. Finché non disporrai di una connessione Internet, il tablet non sarà in grado di verificare che il software sia aggiornato." "AVVISO. Finché non disporrai di una connessione Internet, il telefono non sarà in grado di verificare che il software sia aggiornato." "Impossibile collegare il tablet alla rete Wi‑Fi." @@ -773,9 +774,9 @@ "PIN della SIM" "PIN errato" "I PIN non corrispondono" - "Impossibile cambiare il PIN."\n"Il PIN potrebbe essere errato." + "Impossibile cambiare il PIN.\nIl PIN potrebbe essere errato." "PIN della SIM modificato" - "Impossibile modificare lo stato di blocco della scheda SIM."\n"Il PIN potrebbe essere errato." + "Impossibile modificare lo stato di blocco della scheda SIM.\nIl PIN potrebbe essere errato." "OK" "Annulla" "Stato tablet" @@ -918,9 +919,9 @@ "Ripristino dati di fabbrica" "Cancella tutti i dati sul tablet" "Cancella tutti i dati sul telefono" - "Questa operazione cancellerà tutti i dati memorizzati nell\'""archivio interno"" del tablet, compresi:"\n\n
  • "Il tuo account Google"
  • \n
  • "Dati e impostazioni del sistema e delle applicazioni"
  • \n
  • "Applicazioni scaricate"
  • - "Questa operazione cancellerà tutti i dati memorizzati nell\'""archivio interno"" del telefono, compresi:"\n\n
  • "Il tuo account Google"
  • \n
  • "Dati e impostazioni del sistema e delle applicazioni"
  • \n
  • "Applicazioni scaricate"
  • - \n\n"Al momento sei collegato ai seguenti account:"\n + "Questa operazione cancellerà tutti i dati memorizzati nell\'""archivio interno"" del tablet, compresi:\n\n"
  • "Il tuo account Google"
  • \n
  • "Dati e impostazioni del sistema e delle applicazioni"
  • \n
  • "Applicazioni scaricate"
  • + "Questa operazione cancellerà tutti i dati memorizzati nell\'""archivio interno"" del telefono, compresi:\n\n"
  • "Il tuo account Google"
  • \n
  • "Dati e impostazioni del sistema e delle applicazioni"
  • \n
  • "Applicazioni scaricate"
  • + \n\n"Al momento sei collegato ai seguenti account:\n"
  • "Musica"
  • \n
  • "Foto"
  • \n
  • "Altri dati utente"
  • \n\n"Per cancellare musica, foto e altri dati dell\'utente, è necessario cancellare i dati dell\'""archivio USB""." \n\n"Per cancellare musica, foto e altri dati dell\'utente, è necessario cancellare i dati della ""scheda SD""." @@ -1105,7 +1106,7 @@ "Mostra processi nella cache" "Reimposta preferenze app" "Reimpostare preferenze app?" - "L\'operazione consentirà di reimpostare tutte le preferenze per:"\n\n" "
  • "App disattivate"
  • \n" "
  • "Notifiche di app disattivate"
  • \n" "
  • "App predefinite per determinate azioni"
  • \n" "
  • "Limitazioni sui dati in background per le app"
  • \n\n" I dati delle app non andranno persi."
    + "L\'operazione consentirà di reimpostare tutte le preferenze per:\n\n "
  • "App disattivate"
  • \n" "
  • "Notifiche di app disattivate"
  • \n" "
  • "App predefinite per determinate azioni"
  • \n" "
  • "Limitazioni sui dati in background per le app"
  • \n\n" I dati delle app non andranno persi."
    "Reimposta app" "Gestisci spazio" "Filtra" @@ -1240,9 +1241,7 @@ "Cambia premendo Ctrl-Barra spaziatr." "Predefinita" "Layout tastiera" - "Dizionario utente" - "Dizionario personale" - "Dizionari personali" + "Dizionario personale" "Aggiungi" "Aggiungi al dizionario" @@ -1303,6 +1302,11 @@ "Includi opzione per aprire una segnalazione bug nel menu di accensione" "Rimani attivo" "Lo schermo non va mai in stand-by se sotto carica" + "Attiva log di esame HCI Bluetooth" + "Acquisisci tutti i pacchetti HCI Bluetooth in un file" + "Seleziona runtime" + "Seleziona runtime" + "Riavviare per modificare runtime da %1$s a %2$s?" "Posizioni fittizie" "Consenti posizioni fittizie" "Consentire debug USB?" @@ -1315,11 +1319,13 @@ "Proteggi archivio USB" "Le app devono richiedere l\'autorizzazione per leggere l\'archivio USB" "Proteggere l\'archivio USB?" - "Quando l\'archivio USB è protetto, le applicazioni devono richiedere l\'autorizzazione per leggere i dati dalla memoria esterna."\n\n"Alcune applicazioni potrebbero non funzionare fino all\'aggiornamento da parte dei relativi sviluppatori." + "Quando l\'archivio USB è protetto, le applicazioni devono richiedere l\'autorizzazione per leggere i dati dalla memoria esterna.\n\nAlcune applicazioni potrebbero non funzionare fino all\'aggiornamento da parte dei relativi sviluppatori." "Proteggi scheda SD" "Le app devono richiedere l\'autorizzazione per leggere la scheda SD" "Proteggere la scheda SD?" - "Quando la scheda SD è protetta, le applicazioni devono richiedere l\'autorizzazione per leggere i dati dalla memoria esterna."\n\n"Alcune applicazioni potrebbero non funzionare fino all\'aggiornamento da parte dei relativi sviluppatori." + "Quando la scheda SD è protetta, le applicazioni devono richiedere l\'autorizzazione per leggere i dati dalla memoria esterna.\n\nAlcune applicazioni potrebbero non funzionare fino all\'aggiornamento da parte dei relativi sviluppatori." + "Terminale locale" + "Abilita l\'app Terminale che offre l\'accesso alla shell locale" "Scegli gadget" "Scegli widget" "Creare il widget e consentire l\'accesso?" @@ -1340,11 +1346,11 @@ "Servizi" "Sistema" "Gesti di ingrandimento" - "Quando questa funzione è attiva puoi aumentare e diminuire lo zoom toccando tre volte lo schermo."\n\n"Dopo avere aumentato lo zoom puoi:"\n
    • "Eseguire una panoramica: trascina due o più dita sullo schermo."
    • \n
    • "Regolare il livello di zoom: unisci due o più dita come per fare un pizzicotto o allontanale."
    \n\n"Puoi anche ingrandire temporaneamente l\'area su cui hai il dito toccando tre volte e tenendo premuto. Nello stato ingrandito puoi trascinare il dito per esaminare parti diverse dello schermo. Solleva il dito per tornare allo stato precedente."\n\n"Nota. Il tocco triplo per ingrandire funziona ovunque tranne che per la tastiera e la barra di navigazione."
    + "Quando questa funzione è attiva puoi aumentare e diminuire lo zoom toccando tre volte lo schermo.\n\nDopo avere aumentato lo zoom puoi:\n"
    • "Eseguire una panoramica: trascina due o più dita sullo schermo."
    • \n
    • "Regolare il livello di zoom: unisci due o più dita come per fare un pizzicotto o allontanale."
    \n\n"Puoi anche ingrandire temporaneamente l\'area su cui hai il dito toccando tre volte e tenendo premuto. Nello stato ingrandito puoi trascinare il dito per esaminare parti diverse dello schermo. Solleva il dito per tornare allo stato precedente.\n\nNota. Il tocco triplo per ingrandire funziona ovunque tranne che per la tastiera e la barra di navigazione."
    "Collegamento Accessibilità" "Attiva" "Disattivato" - "Quando questa funzione è attiva, puoi attivare rapidamente le funzioni di accessibilità in due passaggi:"\n\n"Passaggio 1. Premi e tieni premuto il tasto di accensione fino all\'emissione di un suono o una vibrazione."\n\n"Passaggio 2. Tocca con due dita e tieni premuto finché senti un suono di conferma."\n\n"Se sul dispositivo sono configurati più utenti e utilizzi questa scorciatoia nella schermata di blocco, l\'accessibilità viene attivata temporaneamente fino allo sblocco del dispositivo." + "Quando questa funzione è attiva, puoi attivare rapidamente le funzioni di accessibilità in due passaggi:\n\nPassaggio 1. Premi e tieni premuto il tasto di accensione fino all\'emissione di un suono o una vibrazione.\n\nPassaggio 2. Tocca con due dita e tieni premuto finché senti un suono di conferma.\n\nSe sul dispositivo sono configurati più utenti e utilizzi questa scorciatoia nella schermata di blocco, l\'accessibilità viene attivata temporaneamente fino allo sblocco del dispositivo." "Testo grande" "Ingrandimento schermo" "Aggiorn. autom. ingrandim. schermo" @@ -1366,6 +1372,16 @@ "TalkBack fornisce commenti vocali per utenti non vedenti o con problemi di vista. Vuoi installare gratuitamente l\'applicazione da Android Market?" "Nessuna descrizione fornita." "Impostazioni" + "Stampa" + "Impostazioni di stampa" + "Servizi" + "Utilizzare %1$s?" + "%1$s può ricevere i documenti stampati. Tali documenti potrebbero contenere dati riservati." + "Nessun servizio installato" + "Impostazioni" + "Aggiungi stampanti" + "Attiva" + "Non attiva" "Batteria" "Consumo batteria" "Dati uso batteria non disp." @@ -1405,8 +1421,10 @@ "Wi‑Fi attivo" "Tablet" "Telefono" - "Dati inviati" - "Dati ricevuti" + "Dati mobili inviati" + "Dati mobili ricevuti" + "Dati Wi-Fi inviati" + "Dati Wi-Fi ricevuti" "Audio" "Video" "Tempo in attività" @@ -1460,6 +1478,7 @@ "Tono" "Interessa il tono del testo parlato" "Lingua" + "Lingua non selezionata" "Imposta la voce specifica della lingua per il testo parlato" "Ascolta un esempio" "Riproduci una breve dimostrazione della sintesi vocale" @@ -1594,7 +1613,7 @@ "EAP non è supportato." "Impossibile configurare una connessione Wi‑Fi EAP durante l\'impostazione. Dopo l\'impostazione potrai configurarla nella sezione Impostazioni > Wireless e reti." "La connessione può richiedere qualche minuto..." - "Tocca ""Avanti"" per continuare con la configurazione."\n\n"Tocca ""Indietro"" per connetterti a un\'altra rete Wi‑Fi." + "Tocca ""Avanti"" per continuare con la configurazione.\n\nTocca ""Indietro"" per connetterti a un\'altra rete Wi‑Fi." "Sincronizzazione abilitata" "Sincronizzazione disabilata" "Errore di sincronizzazione." @@ -1622,7 +1641,7 @@ "Gmail" "Calendario" "Contatti" - "Benvenuto in Google Sync."" "\n"L\'approccio di Google alla sincronizzazione di dati per consentirti l\'accesso ai tuoi contatti, appuntamenti e altro ancora, ovunque tu sia." + "Benvenuto in Google Sync."" \nL\'approccio di Google alla sincronizzazione di dati per consentirti l\'accesso ai tuoi contatti, appuntamenti e altro ancora, ovunque tu sia." "Impostazioni sincronizzazione applicazioni" "Dati e sincronizzazione" "Cambia password" @@ -1676,8 +1695,7 @@ "Flash delle visualizzazioni dentro le finestre se disegnate con GPU" "Aggiornam. livelli hardware" "Lampeggia verde se aggiornam. livelli hardware" - "Mostra overdraw GPU" - "Dal migliore al peggiore: blu, verde, rosso chiaro, rosso" + "Debug overdraw GPU" "Disabilita overlay HW" "Usa sempre GPU per la composizione dello schermo" "Attiva tracce OpenGL" @@ -1738,11 +1756,11 @@ "Disattiva dati in background su reti mobili. Reti non mobili usate se disponibili." "Per limitare i dati in background, imposta un limite dati mobili." "Limitare i dati in background?" - "Questa funzione può causare l\'interruzione del funzionamento di un\'applicazione che dipende dai dati in background quando sono disponibili solo le reti mobili."\n\n"Puoi trovare controlli di utilizzo dei dati più appropriati nelle impostazioni disponibili all\'interno dell\'applicazione." + "Questa funzione può causare l\'interruzione del funzionamento di un\'applicazione che dipende dai dati in background quando sono disponibili solo le reti mobili.\n\nPuoi trovare controlli di utilizzo dei dati più appropriati nelle impostazioni disponibili all\'interno dell\'applicazione." "La limitazione dei dati in background è possibile solo se hai impostato un limite per i dati mobili." "Attivare sincr. autom. dati?" - "Tutte le modifiche che apporti ai tuoi account sul Web verranno automaticamente copiate sul tablet."\n\n"Alcuni account potrebbero inoltre copiare automaticamente sul Web tutte le modifiche che apporti sul tablet. Gli account Google funzionano in questo modo."\n\n"Per scegliere quali tipi di informazioni sincronizzare all\'interno di ogni account, vai a Impostazioni > Account." - "Tutte le modifiche che apporti ai tuoi account sul Web verranno automaticamente copiate sul telefono."\n\n"Alcuni account potrebbero inoltre copiare automaticamente sul Web tutte le modifiche che apporti sul telefono. Gli account Google funzionano in questo modo."\n\n"Per scegliere quali tipi di informazioni sincronizzare all\'interno di ogni account, vai a Impostazioni > Account." + "Tutte le modifiche che apporti ai tuoi account sul Web verranno automaticamente copiate sul tablet.\n\nAlcuni account potrebbero inoltre copiare automaticamente sul Web tutte le modifiche che apporti sul tablet. Gli account Google funzionano in questo modo.\n\nPer scegliere quali tipi di informazioni sincronizzare all\'interno di ogni account, vai a Impostazioni > Account." + "Tutte le modifiche che apporti ai tuoi account sul Web verranno automaticamente copiate sul telefono.\n\nAlcuni account potrebbero inoltre copiare automaticamente sul Web tutte le modifiche che apporti sul telefono. Gli account Google funzionano in questo modo.\n\nPer scegliere quali tipi di informazioni sincronizzare all\'interno di ogni account, vai a Impostazioni > Account." "Disattivare sincr. autom. dati?" "In questo modo limiterai l\'utilizzo di dati e della batteria, ma dovrai sincronizzare ciascun account manualmente per raccogliere le informazioni recenti. Inoltre non riceverai notifiche quando si verificano gli aggiornamenti." "Data reimpostazione ciclo utilizzo" @@ -1751,12 +1769,12 @@ "Imposta avviso sull\'utilizzo dei dati" "Imposta limite di utilizzo dati" "Limitazione utilizzo dati" - "La tua connessione dati mobili verrà disattivata al raggiungimento del limite specificato."\n\n"Dato che l\'utilizzo dei dati è misurato dal tuo tablet e che il tuo operatore potrebbe tenere conto dell\'utilizzo in modo diverso, è consigliabile utilizzare un limite conservativo." - "La tua connessione dati mobili verrà disattivata al raggiungimento del limite specificato."\n\n"Dato che l\'utilizzo dei dati è misurato dal tuo telefono e che il tuo operatore potrebbe tenere conto dell\'utilizzo in modo diverso, è consigliabile utilizzare un limite conservativo." + "La tua connessione dati mobili verrà disattivata al raggiungimento del limite specificato.\n\nDato che l\'utilizzo dei dati è misurato dal tuo tablet e che il tuo operatore potrebbe tenere conto dell\'utilizzo in modo diverso, è consigliabile utilizzare un limite conservativo." + "La tua connessione dati mobili verrà disattivata al raggiungimento del limite specificato.\n\nDato che l\'utilizzo dei dati è misurato dal tuo telefono e che il tuo operatore potrebbe tenere conto dell\'utilizzo in modo diverso, è consigliabile utilizzare un limite conservativo." "Limitare i dati in background?" "Se limiti i dati mobili in background, alcuni servizi e app non funzioneranno senza connessione a una rete Wi‑Fi." - "Se limiti i dati mobili in background, alcuni servizi e app non funzioneranno senza connessione a una rete Wi‑Fi."\n\n"Questa impostazione influisce su tutti gli utenti di questo tablet." - "Se limiti i dati mobili in background, alcuni servizi e app non funzioneranno senza connessione a una rete Wi‑Fi."\n\n"Questa impostazione influisce su tutti gli utenti di questo telefono." + "Se limiti i dati mobili in background, alcuni servizi e app non funzioneranno senza connessione a una rete Wi‑Fi.\n\nQuesta impostazione influisce su tutti gli utenti di questo tablet." + "Se limiti i dati mobili in background, alcuni servizi e app non funzioneranno senza connessione a una rete Wi‑Fi.\n\nQuesta impostazione influisce su tutti gli utenti di questo telefono." "^1"" ""^2"\n"avviso" "^1"" ""^2"\n"limite" "Applicazioni rimosse" @@ -1843,8 +1861,8 @@ "Utente" "Profilo con limitazioni" "Aggiungi nuovo utente" - "Puoi condividere il dispositivo con altre persone creando altri utenti. Ogni utente ha un proprio spazio personalizzabile con app, sfondo e così via. Gli utenti possono anche regolare le impostazioni del tablet, come il Wi‑Fi, che riguardano tutti."\n\n"Dopo la creazione di un nuovo utente, la persona in questione deve svolgere una procedura di configurazione."\n\n"Qualsiasi utente può accettare le autorizzazioni delle app aggiornate per conto di tutti gli altri utenti." - "Dopo la creazione di un nuovo utente, quella persona deve eseguire una procedura di configurazione."\n\n"Qualsiasi utente può accettare le autorizzazioni delle applicazioni aggiornate per conto di tutti gli altri utenti." + "Puoi condividere il dispositivo con altre persone creando altri utenti. Ogni utente ha un proprio spazio personalizzabile con app, sfondo e così via. Gli utenti possono anche regolare le impostazioni del tablet, come il Wi‑Fi, che riguardano tutti.\n\nDopo la creazione di un nuovo utente, la persona in questione deve svolgere una procedura di configurazione.\n\nQualsiasi utente può accettare le autorizzazioni delle app aggiornate per conto di tutti gli altri utenti." + "Dopo la creazione di un nuovo utente, quella persona deve eseguire una procedura di configurazione.\n\nQualsiasi utente può accettare le autorizzazioni delle applicazioni aggiornate per conto di tutti gli altri utenti." "Configurare l\'utente ora?" "Assicurati che la persona possa utilizzare il tablet e configurare il suo spazio." "Configurare il profilo ora?" @@ -1875,6 +1893,9 @@ "Questa impostazione influisce su tutti gli utenti di questo telefono." "Cambia lingua" "Cambia le dimensioni del carattere" + "Limitazioni" + "Rimuovi limitazioni" + "Cambia PIN" "Mostra notifiche" "Guida" "Account per i contenuti" diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml index 63566bb275b..11e95a28641 100644 --- a/res/values-iw/arrays.xml +++ b/res/values-iw/arrays.xml @@ -233,7 +233,8 @@ "מיקום" "אישי" "העברת הודעות" - "מכשיר" + "מדיה" + "מכשיר"
    "מיקום משוער" @@ -246,7 +247,7 @@ "שנה יומן שיחות" "קרא יומן" "שנה לוח שנה" - "סריקת wi-fi" + "סריקת Wi-Fi" "התראה" "סריקה סלולרית" "שיחת טלפון" @@ -267,6 +268,17 @@ "הפעל את האודיו" "קרא לוח" "שנה לוח" + "לחצני מדיה" + "מיקוד אודיו" + "שליטה ראשית בעוצמת קול" + "עוצמת קול של דיבור" + "עוצמת קול של צלצול" + "עוצמת קול של מדיה" + "עוצמת קול של התרעה" + "עוצמת קול של התראה" + "עוצמת קול של Bluetooth" + "שמור במצב פעיל" + "עקוב אחר מיקום" "מיקום" @@ -300,12 +312,33 @@ "הפעל את האודיו" "קרא לוח" "שנה לוח" + "לחצני מדיה" + "מיקוד אודיו" + "שליטה ראשית בעוצמת קול" + "עוצמת קול של דיבור" + "עוצמת קול של צלצול" + "עוצמת קול של מדיה" + "עוצמת קול של התראה" + "עוצמת קול של התראות" + "עוצמת קול של Bluetooth" + "שמור במצב פעיל" + "מיקום" "קצר" "בינוני" "ארוך" + + "Dalvik" + "ART" + "ART (ניקוי באגים)" + + + "השתמש ב-Dalvik" + "השתמש ב-ART" + "השתמש ב-Build ניקוי הבאגים של ART" + "אל תבדוק לעולם" "בדוק אם יש תוכן DRM בלבד" @@ -367,6 +400,11 @@ "במסך כקווים" "ב-adb shell dumpsys gfxinfo" + + "כבוי" + "הצגת אזורים עם חריגה" + "הצגת מונה חריגות" + "הגבלת תקן" "אין תהליכים ברקע" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index 6014192424b..6f1f8b2e486 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -275,8 +275,8 @@ "איבדת את קישוריות הנתונים כיוון שעזבת את הרשת הביתית בזמן שנדידת הנתונים היתה כבויה." "הפעל" "כשאתה מאפשר נדידה, ייתכן שתחויב בעלויות נדידה גבוהות!" - "כשאתה מאפשר נדידה, הדבר עשוי להיות כרוך בעלויות נדידה גבוהות!"\n\n"הגדרה זו משפיעה על כל המשתמשים בטאבלט הזה." - "כשאתה מאפשר נדידה, הדבר עשוי להיות כרוך בעלויות נדידה גבוהות!"\n\n"הגדרה זו משפיעה על כל המשתמשים בטלפון הזה." + "כשאתה מאפשר נדידה, הדבר עשוי להיות כרוך בעלויות נדידה גבוהות!\n\nהגדרה זו משפיעה על כל המשתמשים בטאבלט הזה." + "כשאתה מאפשר נדידה, הדבר עשוי להיות כרוך בעלויות נדידה גבוהות!\n\nהגדרה זו משפיעה על כל המשתמשים בטלפון הזה." "האם לאפשר נדידה?" "בחירת מפעיל" "בחר מפעיל רשת" @@ -322,8 +322,8 @@ "דורש PIN מספרי או סיסמה לפענוח הטבלט בכל הפעלה" "דורש PIN מספרי או סיסמה לפענוח הטלפון בכל הפעלה" "מוצפן" - "אתה יכול להצפין חשבונות, הגדרות, יישומים שהורדת ונתונים שלהם, מדיה וקבצים אחרים. לאחר שתצפין את הטבלט שלך, בכל פעם שתפעיל אותו תצטרך להקליד קוד PIN מספרי או סיסמה כדי לפענח את הנתונים. לא תוכל לבטל את הצפנת הטבלט שלך, אלא אם תבצע איפוס לנתוני יצרן. פעולה זו תמחק את כל הנתונים."\n\n"ההצפנה אורכת שעה לפחות. עליך לבצע הפעלה עם סוללה טעונה ולהשאיר את הטבלט מחובר עד לסיום ההצפנה. אם תפסיק את תהליך ההצפנה, תאבד את כל הנתונים או חלק מהם." - "אתה יכול להצפין חשבונות, הגדרות, יישומים שהורדת ונתונים שלהם, מדיה וקבצים אחרים. לאחר שתצפין את הטלפון שלך, בכל פעם שתפעיל אותו תצטרך להקליד קוד PIN מספרי או סיסמה כדי לפענח את הנתונים. לא תוכל לבטל את הצפנת הטלפון שלך, אלא אם תבצע איפוס לנתוני יצרן. פעולה זו תמחק את כל הנתונים."\n\n"ההצפנה אורכת שעה לפחות. עליך לבצע הפעלה עם סוללה טעונה ולהשאיר את הטלפון מחובר עד לסיום ההצפנה. אם תפסיק את תהליך ההצפנה, תאבד את כל הנתונים או חלק מהם." + "אתה יכול להצפין חשבונות, הגדרות, יישומים שהורדת ונתונים שלהם, מדיה וקבצים אחרים. לאחר שתצפין את הטבלט שלך, בכל פעם שתפעיל אותו תצטרך להקליד קוד PIN מספרי או סיסמה כדי לפענח את הנתונים. לא תוכל לבטל את הצפנת הטבלט שלך, אלא אם תבצע איפוס לנתוני יצרן. פעולה זו תמחק את כל הנתונים.\n\nההצפנה אורכת שעה לפחות. עליך לבצע הפעלה עם סוללה טעונה ולהשאיר את הטבלט מחובר עד לסיום ההצפנה. אם תפסיק את תהליך ההצפנה, תאבד את כל הנתונים או חלק מהם." + "אתה יכול להצפין חשבונות, הגדרות, יישומים שהורדת ונתונים שלהם, מדיה וקבצים אחרים. לאחר שתצפין את הטלפון שלך, בכל פעם שתפעיל אותו תצטרך להקליד קוד PIN מספרי או סיסמה כדי לפענח את הנתונים. לא תוכל לבטל את הצפנת הטלפון שלך, אלא אם תבצע איפוס לנתוני יצרן. פעולה זו תמחק את כל הנתונים.\n\nההצפנה אורכת שעה לפחות. עליך לבצע הפעלה עם סוללה טעונה ולהשאיר את הטלפון מחובר עד לסיום ההצפנה. אם תפסיק את תהליך ההצפנה, תאבד את כל הנתונים או חלק מהם." "הצפן טאבלט" "הצפן טלפון" "טען את הסוללה ונסה שוב." @@ -339,8 +339,8 @@ "נסה שוב בעוד ^1 שניות." "הקלד את הסיסמה שלך" "ההצפנה נכשלה" - "ההצפנה הופסקה ואין אפשרות להשלים אותה. בשל כך, לא ניתן עוד לגשת לנתונים בטבלט שלך. "\n\n"כדי לחזור ולהשתמש בטבלט, עליך לבצע איפוס נתוני יצרן. כאשר תגדיר את הטבלט לאחר האיפוס, תוכל לשחזר נתונים שגובו בחשבון Google שלך." - "ההצפנה הופסקה ואין אפשרות להשלים אותה. כתוצאה מכך, לא ניתן עוד לגשת לנתונים בטלפון שלך. "\n\n"כדי לחזור ולהשתמש בטלפון, עליך לבצע איפוס להגדרות היצרן. כאשר תגדיר את הטלפון לאחר האיפוס, תהיה לך הזדמנות לשחזר נתונים שגובו בחשבון Google שלך." + "ההצפנה הופסקה ואין אפשרות להשלים אותה. בשל כך, לא ניתן עוד לגשת לנתונים בטבלט שלך. \n\nכדי לחזור ולהשתמש בטבלט, עליך לבצע איפוס נתוני יצרן. כאשר תגדיר את הטבלט לאחר האיפוס, תוכל לשחזר נתונים שגובו בחשבון Google שלך." + "ההצפנה הופסקה ואין אפשרות להשלים אותה. כתוצאה מכך, לא ניתן עוד לגשת לנתונים בטלפון שלך. \n\nכדי לחזור ולהשתמש בטלפון, עליך לבצע איפוס להגדרות היצרן. כאשר תגדיר את הטלפון לאחר האיפוס, תהיה לך הזדמנות לשחזר נתונים שגובו בחשבון Google שלך." "החלפת שיטת קלט" "בחירת נעילת מסך" "בחר נעילת גיבוי" @@ -514,6 +514,7 @@ "מתחבר" "מחובר" "זמין" + "בשימוש" "הגדרות תצוגה" "להתנתק?" "פעולה זו תסיים את החיבור עם:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "כבוי" "לא זמין משום שה-NFC כבוי" "Android Beam" - "כאשר תכונה זו מופעלת, תוכל לשדר תוכן יישומים למכשיר אחר התומך ב-NFC על ידי החזקת המכשירים קרובים אחד לשני. לדוגמה, תוכל לשדר דפי דפדפן, סרטוני YouTube, אנשי קשר ועוד."\n\n"פשוט קרב את המכשירים זה לזה (בדרך כלל גב אל גב) ולאחר מכן גע במסך שלך. היישום יקבע מה ישודר." + "כאשר תכונה זו מופעלת, תוכל לשדר תוכן יישומים למכשיר אחר התומך ב-NFC על ידי החזקת המכשירים קרובים אחד לשני. לדוגמה, תוכל לשדר דפי דפדפן, סרטוני YouTube, אנשי קשר ועוד.\n\nפשוט קרב את המכשירים זה לזה (בדרך כלל גב אל גב) ולאחר מכן גע במסך שלך. היישום יקבע מה ישודר." "גילוי שירותי רשת" "אפשר ליישומים במכשירים אחרים לגלות יישומים במכשיר זה" "Wi-Fi" @@ -620,7 +621,7 @@ "מאובטח באמצעות %1$s" ", מאובטח באמצעות %1$s" "ללא" - "לשיפור דיוק המיקום ולמטרות אחרות, %1$s רוצה להפעיל את סריקת הרשתות, גם כאשר ה-Wi-Fi כבוי."\n\n"האם להתיר זאת עבור כל היישומים שרוצים לסרוק?" + "לשיפור דיוק המיקום ולמטרות אחרות, %1$s רוצה להפעיל את סריקת הרשתות, גם כאשר ה-Wi-Fi כבוי.\n\nהאם להתיר זאת עבור כל היישומים שרוצים לסרוק?" "אפשר" "דחה" "התחבר" @@ -632,8 +633,8 @@ "ביטול" "דלג בכל מקרה" "אל תדלג" - "אזהרה: הספק עלול לגבות עלויות נתונים נוספות."\n\n"הגדרת טאבלט עשויה לצרוך פעילות רבה ברשת." - "אזהרה: הספק עלול לגבות עלויות נתונים נוספות."\n\n"הגדרת טלפון עשויה לצרוך פעילות רבה ברשת." + "אזהרה: הספק עלול לגבות עלויות נתונים נוספות.\n\nהגדרת טאבלט עשויה לצרוך פעילות רבה ברשת." + "אזהרה: הספק עלול לגבות עלויות נתונים נוספות.\n\nהגדרת טלפון עשויה לצרוך פעילות רבה ברשת." "אזהרה: לפני שיהיה לך חיבור אינטרנט, הטאבלט לא יוכל לאמת שהתוכנה שלך עדכנית." "אזהרה: לפני שיהיה לך חיבור אינטרנט, הטלפון לא יוכל לאמת שהתוכנה שלך עדכנית." "הטאבלט לא הצליח להתחבר לרשת ה-Wi-Fi הזו." @@ -773,9 +774,9 @@ "PIN של SIM" "PIN שגוי" "קודי ה-PIN אינם תואמים" - "לא ניתן לשנות את קוד ה-PIN‏."\n"כנראה שקוד ה-PIN שגוי." + "לא ניתן לשנות את קוד ה-PIN‏.\nכנראה שקוד ה-PIN שגוי." "ה-PIN של ה-SIM השתנה בהצלחה" - "לא ניתן לשנות את מצב הנעילה של כרטיס ה-SIM‏."\n"כנראה שקוד ה-PIN שגוי." + "לא ניתן לשנות את מצב הנעילה של כרטיס ה-SIM‏.\nכנראה שקוד ה-PIN שגוי." "אישור" "ביטול" "סטטוס טאבלט" @@ -918,9 +919,9 @@ "איפוס נתוני יצרן" "מוחק את כל הנתונים בטבלט" "מחק את כל הנתונים בטלפון" - "פעולה זו תמחק את כל הנתונים מ""האחסון הפנימי"" של הטבלט שלך, כולל:"\n\n
  • "חשבון Google שלך"
  • \n
  • "הנתונים וההגדרות של המערכת והיישומים שלך"
  • \n
  • "היישומים שהורדת"
  • - "פעולה זו תמחק את כל הנתונים מ""האחסון הפנימי"" של הטלפון שלך, כולל:"\n\n
  • "חשבון Google שלך"
  • \n
  • "הנתונים וההגדרות של המערכת והיישומים שלך"
  • \n
  • "היישומים שהורדת"
  • - \n\n"אתה מחובר כעת לחשבונות הבאים:"\n + "פעולה זו תמחק את כל הנתונים מ""האחסון הפנימי"" של הטבלט שלך, כולל:\n\n"
  • "חשבון Google שלך"
  • \n
  • "הנתונים וההגדרות של המערכת והיישומים שלך"
  • \n
  • "היישומים שהורדת"
  • + "פעולה זו תמחק את כל הנתונים מ""האחסון הפנימי"" של הטלפון שלך, כולל:\n\n"
  • "חשבון Google שלך"
  • \n
  • "הנתונים וההגדרות של המערכת והיישומים שלך"
  • \n
  • "היישומים שהורדת"
  • + \n\n"אתה מחובר כעת לחשבונות הבאים:\n"
  • "מוסיקה"
  • \n
  • "תמונות"
  • \n
  • "נתוני משתמש אחרים"
  • \n\n"כדי למחוק פריטי מוסיקה, תמונות ונתוני משתמש אחרים, יש למחוק את ""אחסון ה-USB""." \n\n"כדי למחוק פריטי מוסיקה, תמונות ונתוני משתמש אחרים, יש למחוק את ""כרטיס ה-SD""." @@ -1105,7 +1106,7 @@ "הצג תהליכים המאוחסנים בקובץ שמור" "אפס העדפות יישום" "האם לאפס העדפות יישום?" - "פעולה זו תאפס את כל ההעדפות עבור:"\n\n" "
  • "יישומים מושבתים"
  • \n" "
  • "התראות יישום מושבת"
  • \n" "
  • "יישומי ברירת מחדל לפעולות"
  • \n" "
  • "הגבלות נתוני רקע ליישומים"
  • \n\n" לא תאבד נתוני יישומים."
    + "פעולה זו תאפס את כל ההעדפות עבור:\n\n "
  • "יישומים מושבתים"
  • \n" "
  • "התראות יישום מושבת"
  • \n" "
  • "יישומי ברירת מחדל לפעולות"
  • \n" "
  • "הגבלות נתוני רקע ליישומים"
  • \n\n" לא תאבד נתוני יישומים."
    "אפס יישומים" "נהל שטח אחסון" "סינון" @@ -1240,9 +1241,7 @@ "כדי להחליף פריסה, הקש Control-מקש רווח" "ברירת מחדל" "פריסות מקלדת" - "מילון משתמש" - "מילון אישי" - "מילונים אישיים" + "מילון אישי" "הוסף" "הוסף למילון" @@ -1303,6 +1302,11 @@ "כלול אפשרות ב-Power Menu לביצוע דיווח על באג" "השאר פועל" "המסך לעולם לא יהיה במצב שינה במהלך טעינה" + "הפעלת Snoop Log של Bluetooth HCI" + "אחד את כל חבילות Bluetooth HCI בקובץ" + "בחירת זמן ריצה" + "בחירת זמן ריצה" + "האם לאתחל על מנת לשנות את זמן הריצה מ-%1$s ל-%2$s?" "אפשר מיקומים מדומים" "אפשר מיקומים מדומים" "לאפשר ניקוי באגים של USB?" @@ -1315,11 +1319,13 @@ "הגנה על אחסון USB" "על יישומים לבקש רשות כדי לקרוא אחסון USB" "האם להגן על אחסון USB?" - "כאשר אחסון USB מוגן, על יישומים לבקש רשות כדי לקרוא נתונים מאחסון חיצוני."\n\n"ייתכן שיישומים מסוימים לא יפעלו עד שיעודכנו על ידי המפתחים שלהם." + "כאשר אחסון USB מוגן, על יישומים לבקש רשות כדי לקרוא נתונים מאחסון חיצוני.\n\nייתכן שיישומים מסוימים לא יפעלו עד שיעודכנו על ידי המפתחים שלהם." "הגנה על כרטיס SD" "על יישומים לבקש רשות כדי לקרוא כרטיס SD" "האם להגן על כרטיס ה-SD?" - "כאשר כרטיס ה-SD מוגן, על יישומים לבקש רשות כדי לקרוא נתונים מאחסון חיצוני."\n\n"ייתכן שיישומים מסוימים לא יפעלו עד שיעודכנו על ידי המפתחים שלהם." + "כאשר כרטיס ה-SD מוגן, על יישומים לבקש רשות כדי לקרוא נתונים מאחסון חיצוני.\n\nייתכן שיישומים מסוימים לא יפעלו עד שיעודכנו על ידי המפתחים שלהם." + "מסוף מקומי" + "הפעל יישום מסוף המציע גישה מקומית למעטפת" "בחר גאדג\'ט" "בחר Widget" "האם ליצור Widget‏ ולאפשר גישה?" @@ -1340,11 +1346,11 @@ "שירותים" "מערכת" "תנועות לשינוי גודל" - "כשתכונה זו מופעלת, ניתן להתקרב ולהתרחק באמצעות הקשה משולשת על המסך."\n\n"בזמן שההצגה מוגדלת ניתן:"\n
    • "להזיז לצדדים: גרור שתי אצבעות או יותר לאורך המסך."
    • \n
    • "לשנות את מידת ההגדלה: עשה תנועת צביטה באמצעות שתי אצבעות או הרחק אותן אחת מהשנייה."
    \n\n"ניתן גם להגדיל באופן זמני את הפריט שמתחת לאצבע על ידי הקשה משולשת והחזקה. במצב הגדלה זה ניתן לגרור את האצבע על מנת להציג כך חלקים שונים במסך. הרם את האצבע כדי לחזור למצב הקודם."\n\n"שים לב: הקשה משולשת להגדלה פועלת בכל מקום מלבד במקלדת ובסרגל הניווט."
    + "כשתכונה זו מופעלת, ניתן להתקרב ולהתרחק באמצעות הקשה משולשת על המסך.\n\nבזמן שההצגה מוגדלת ניתן:\n"
    • "להזיז לצדדים: גרור שתי אצבעות או יותר לאורך המסך."
    • \n
    • "לשנות את מידת ההגדלה: עשה תנועת צביטה באמצעות שתי אצבעות או הרחק אותן אחת מהשנייה."
    \n\n"ניתן גם להגדיל באופן זמני את הפריט שמתחת לאצבע על ידי הקשה משולשת והחזקה. במצב הגדלה זה ניתן לגרור את האצבע על מנת להציג כך חלקים שונים במסך. הרם את האצבע כדי לחזור למצב הקודם.\n\nשים לב: הקשה משולשת להגדלה פועלת בכל מקום מלבד במקלדת ובסרגל הניווט."
    "קיצור נגישות" "פועל" "כבוי" - "כאשר תכונה זו מופעלת, ניתן לאפשר במהירות תכונות של גישה על ידי ביצוע שני שלבים:"\n\n"שלב 1: לחץ על לחצן ההפעלה לחיצה מתמשכת עד שתשמע צליל או תרגיש רטט."\n\n"שלב 2: גע עם שתי אצבעות והחזק עד שתשמע אישור קולי."\n\n"אם יש למכשיר מספר משתמשים, שימוש בקיצור דרך זה במסך הנעילה יאפשר גישה באופן זמני, עד שתבוטל נעילת המכשיר." + "כאשר תכונה זו מופעלת, ניתן לאפשר במהירות תכונות של גישה על ידי ביצוע שני שלבים:\n\nשלב 1: לחץ על לחצן ההפעלה לחיצה מתמשכת עד שתשמע צליל או תרגיש רטט.\n\nשלב 2: גע עם שתי אצבעות והחזק עד שתשמע אישור קולי.\n\nאם יש למכשיר מספר משתמשים, שימוש בקיצור דרך זה במסך הנעילה יאפשר גישה באופן זמני, עד שתבוטל נעילת המכשיר." "טקסט גדול" "הגדלת מסך" "עדכון אוטומטי של הגדלת מסך" @@ -1366,6 +1372,16 @@ "TalkBack מספק משוב מוקרא בקול רם כדי לעזור למשתמשים עיוורים ולקויי ראייה. האם ברצונך להתקין אותו ללא תשלום מ\'חנות Android\'?" "לא סופק תיאור." "הגדרות" + "הדפסה" + "הגדרות הדפסה" + "שירותים" + "האם להשתמש ב-%1$s?" + "%1$s יכול לקבל מסמכים שאתה מדפיס. מסמכים כאלה עשויים להכיל נתונים רגישים." + "אין שירותים מותקנים" + "הגדרות" + "הוסף מדפסות" + "פועל" + "כבוי" "סוללה" "מה השתמש בסוללה" "אין נתונים זמינים על השימוש בסוללה." @@ -1405,8 +1421,10 @@ "Wi-Fi פועל" "טאבלט" "טלפון" - "הנתונים נשלחו" - "הנתונים התקבלו" + "נתונים לנייד נשלחו" + "נתונים לנייד התקבלו" + "נתוני Wi‑Fi נשלחו" + "נתוני Wi‑Fi התקבלו" "אודיו" "Google וידאו" "משך פעולה עד כה" @@ -1460,6 +1478,7 @@ "גובה צליל" "משפיע על הטון של הטקסט הנאמר" "שפה" + "לא נבחרה שפה" "מגדיר קול ספציפי לשפה עבור הטקסט הנאמר" "האזן לדוגמה" "הפעל הדגמה קצרה של סינתזת דיבור" @@ -1594,7 +1613,7 @@ "אין תמיכה ב-EAP." "אין אפשרות להגדיר חיבור Wi-Fi של EAP במהלך ההגדרה. לאחר ההגדרה, תוכל לעשות זאת ב\'הגדרות\' > \'רשתות ותקשורת אלחוטית\'." "ההתחברות עשויה להימשך מספר דקות..." - "גע ב""הבא"" כדי להמשיך בהגדרה."\n\n"גע ב""הקודם"" כדי להתחבר לרשת Wi-Fi אחרת." + "גע ב""הבא"" כדי להמשיך בהגדרה.\n\nגע ב""הקודם"" כדי להתחבר לרשת Wi-Fi אחרת." "הסינכרון מופעל" "הסינכרון מושבת" "שגיאת סינכרון" @@ -1622,7 +1641,7 @@ "Gmail" "יומן Google" "אנשי קשר" - "ברוכים הבאים אל סינכרון Google‏!"" "\n"זוהי גישה של Google לסינכרון נתונים במטרה לאפשר לך גישה לאנשי קשר, לפגישות ועוד מכל מקום שבו אתה נמצא." + "ברוכים הבאים אל סינכרון Google‏!"" \nזוהי גישה של Google לסינכרון נתונים במטרה לאפשר לך גישה לאנשי קשר, לפגישות ועוד מכל מקום שבו אתה נמצא." "הגדרות סנכרון יישומים" "נתונים וסינכרון" "שנה סיסמה" @@ -1676,8 +1695,7 @@ "הבזק תצוגות בתוך חלונות בעת ציור באמצעות ה-GPU" "הצג עדכוני שכבות חומרה" "הצג הבהוב ירוק לשכבות חומרה כשהן מתעדכנות" - "הצג שימוש יתר של GPU" - "מהטוב ביותר להכי גרוע: כחול, ירוק, אדום בהיר, אדום" + "חריגה בניקוי באגים ב-GPU" "השבת שכבות על של HW" "השתמש תמיד ב-GPU להרכבת מסך" "הפעל מעקבי OpenGL" @@ -1738,11 +1756,11 @@ "השבת נתוני רקע ברשתות לנייד. ייעשה שימוש ברשתות שאינן לנייד, אם יהיו זמינות." "כדי להגביל נתוני רקע עבור יישום זה, הגדר תחילה מגבלת נתונים לנייד." "להגביל נתוני רקע?" - "תכונה זו עלולה לגרום ליישום התלוי בנתוני רקע להפסיק לפעול כאשר רק רשתות לנייד זמינות."\n\n"ניתן למצוא אמצעים מתאימים יותר לבקרת השימוש בנתונים דרך ההגדרות הזמינות ביישום." + "תכונה זו עלולה לגרום ליישום התלוי בנתוני רקע להפסיק לפעול כאשר רק רשתות לנייד זמינות.\n\nניתן למצוא אמצעים מתאימים יותר לבקרת השימוש בנתונים דרך ההגדרות הזמינות ביישום." "הגבלת נתוני הרקע אפשרית רק אם הגדרת מגבלת נתונים לנייד." "האם להפעיל סנכרון אוטומטי של נתונים?" - "שינויים כלשהם שתבצע בחשבונך באינטרנט יועתקו אוטומטית אל הטאבלט."\n\n"חשבונות מסוימים עשויים גם להעתיק אוטומטית אל האינטרנט שינויים שאתה מבצע בטאבלט. חשבון Google פועל בצורה כזאת."\n\n"כדי לבחור את סוגי הפרטים שיסונכרנו בכל חשבון, עבור אל \'הגדרות\' > \'חשבונות\'." - "שינויים כלשהם שתבצע בחשבונך באינטרנט יועתקו אוטומטית אל הטלפון."\n\n"חשבונות מסוימים עשויים גם להעתיק אוטומטית אל האינטרנט שינויים שאתה מבצע בטלפון. חשבון Google פועל בצורה כזאת."\n\n"כדי לבחור את סוגי הפרטים שיסונכרנו בכל חשבון, עבור אל \'הגדרות\' > \'חשבונות\'." + "שינויים כלשהם שתבצע בחשבונך באינטרנט יועתקו אוטומטית אל הטאבלט.\n\nחשבונות מסוימים עשויים גם להעתיק אוטומטית אל האינטרנט שינויים שאתה מבצע בטאבלט. חשבון Google פועל בצורה כזאת.\n\nכדי לבחור את סוגי הפרטים שיסונכרנו בכל חשבון, עבור אל \'הגדרות\' > \'חשבונות\'." + "שינויים כלשהם שתבצע בחשבונך באינטרנט יועתקו אוטומטית אל הטלפון.\n\nחשבונות מסוימים עשויים גם להעתיק אוטומטית אל האינטרנט שינויים שאתה מבצע בטלפון. חשבון Google פועל בצורה כזאת.\n\nכדי לבחור את סוגי הפרטים שיסונכרנו בכל חשבון, עבור אל \'הגדרות\' > \'חשבונות\'." "האם לכבות סנכרון אוטומטי של נתונים?" "פעולה זו תחסוך בשימוש בנתונים ובעוצמת סוללה, אך יהיה עליך לסנכרן כל חשבון באופן ידני על מנת לאסוף מידע עדכני. לא תקבל התראות כאשר יתרחשו עדכונים." "תאריך איפוס של מחזור שימוש" @@ -1751,12 +1769,12 @@ "הגדר אזהרת שימוש בנתונים" "הגדר מגבלת שימוש בנתונים" "הגבלת שימוש בנתונים" - "חיבור הנתונים שלך בנייד יושבת כאשר תגיע למגבלה שצוינה."\n\n"מכיוון שנפח העברת הנתונים נמדד על ידי הטאבלט, ומכיוון שייתכן שספק השירות שלך מחשב את נפח העברת הנתונים אחרת, מומלץ להשתמש במגבלה שמרנית." - "חיבור הנתונים שלך בנייד יושבת כאשר תגיע למגבלה שצוינה."\n\n"מכיוון שנפח העברת הנתונים נמדד על ידי הטלפון, ומכיוון שייתכן שספק השירות שלך מחשב את נפח העברת הנתונים אחרת, מומלץ להשתמש במגבלה שמרנית." + "חיבור הנתונים שלך בנייד יושבת כאשר תגיע למגבלה שצוינה.\n\nמכיוון שנפח העברת הנתונים נמדד על ידי הטאבלט, ומכיוון שייתכן שספק השירות שלך מחשב את נפח העברת הנתונים אחרת, מומלץ להשתמש במגבלה שמרנית." + "חיבור הנתונים שלך בנייד יושבת כאשר תגיע למגבלה שצוינה.\n\nמכיוון שנפח העברת הנתונים נמדד על ידי הטלפון, ומכיוון שייתכן שספק השירות שלך מחשב את נפח העברת הנתונים אחרת, מומלץ להשתמש במגבלה שמרנית." "להגביל נתוני רקע?" "אם תגביל נתונים לנייד ברקע, יישומים ושירותים מסוימים לא יפעלו, אלא אם קיים חיבור Wi-Fi." - "אם תגביל נתונים לנייד ברקע, יישומים ושירותים מסוימים לא יפעלו, אלא אם אתה מחובר לרשת Wi-Fi‏."\n\n"הגדרה זו משפיעה על כל המשתמשים בטאבלט הזה." - "אם תגביל נתונים לנייד ברקע, יישומים ושירותים מסוימים לא יפעלו, אלא אם אתה מחובר לרשת Wi-Fi‏."\n\n"הגדרה זו משפיעה על כל המשתמשים בטלפון הזה." + "אם תגביל נתונים לנייד ברקע, יישומים ושירותים מסוימים לא יפעלו, אלא אם אתה מחובר לרשת Wi-Fi‏.\n\nהגדרה זו משפיעה על כל המשתמשים בטאבלט הזה." + "אם תגביל נתונים לנייד ברקע, יישומים ושירותים מסוימים לא יפעלו, אלא אם אתה מחובר לרשת Wi-Fi‏.\n\nהגדרה זו משפיעה על כל המשתמשים בטלפון הזה." "^1"" ""^2"\n"אזהרה" "^1""^2"\n"מגבלה" "יישומים שהוסרו" @@ -1843,8 +1861,8 @@ "משתמש" "פרופיל מוגבל" "הוסף משתמש חדש" - "ניתן לשתף את המכשיר הזה עם אנשים אחרים על ידי יצירת משתמשים נוספים. לכל משתמש יש שטח משלו שהוא יכול להתאים אישית עם יישומים, טפט וכן הלאה. משתמשים יכולים גם להתאים את הגדרות הטאבלט, כגון Wi-Fi, שמשפיעות על כולם."\n\n"לאחר יצירת משתמש חדש, עליו לבצע תהליך הגדרה."\n\n"כל משתמש יכול לקבל הרשאות יישום מעודכנות בשם כל המשתמשים האחרים." - "לאחר יצירת משתמש חדש, עליו לבצע תהליך הגדרה."\n\n"כל משתמש יכול לקבל הרשאות יישום מעודכנות בשם כל המשתמשים האחרים." + "ניתן לשתף את המכשיר הזה עם אנשים אחרים על ידי יצירת משתמשים נוספים. לכל משתמש יש שטח משלו שהוא יכול להתאים אישית עם יישומים, טפט וכן הלאה. משתמשים יכולים גם להתאים את הגדרות הטאבלט, כגון Wi-Fi, שמשפיעות על כולם.\n\nלאחר יצירת משתמש חדש, עליו לבצע תהליך הגדרה.\n\nכל משתמש יכול לקבל הרשאות יישום מעודכנות בשם כל המשתמשים האחרים." + "לאחר יצירת משתמש חדש, עליו לבצע תהליך הגדרה.\n\nכל משתמש יכול לקבל הרשאות יישום מעודכנות בשם כל המשתמשים האחרים." "האם להגדיר משתמש עכשיו?" "ודא שהאדם זמין לקחת את הטאבלט ולהגדיר את השטח שלו" "האם להגדיר פרופיל עכשיו?" @@ -1875,6 +1893,9 @@ "הגדרה זו משפיעה על כל המשתמשים בטלפון הזה." "שנה שפה" "שנה גודל גופן" + "הגבלות" + "הסר הגבלות" + "שנה PIN" "הצג התראות" "עזרה" "חשבון לתוכן" diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml index 21f877df2a8..f2b40b2f1d0 100644 --- a/res/values-ja/arrays.xml +++ b/res/values-ja/arrays.xml @@ -233,7 +233,8 @@ "位置情報" "プライベート" "メッセージ" - "端末" + "メディア" + "端末"
    "おおよその位置情報" @@ -267,6 +268,17 @@ "音声の再生" "クリップボードの読み取り" "クリップボードの変更" + "メディアボタン" + "音声フォーカス" + "主音量" + "音声の音量" + "着信音の音量" + "メディアの音量" + "アラームの音量" + "通知音量" + "Bluetoothの音量" + "スリープモードにしない" + "場所を監視" "位置情報" @@ -300,12 +312,33 @@ "音声の再生" "クリップボードの読み取り" "クリップボードの変更" + "メディアボタン" + "音声フォーカス" + "主音量" + "音声の音量" + "着信音の音量" + "メディアの音量" + "アラームの音量" + "通知の音量" + "Bluetoothの音量" + "スリープモードにしない" + "場所" "短め" "中" "長め" + + "Dalvik" + "ART" + "ART(デバッグ)" + + + "Dalvikを使用" + "ARTを使用" + "ARTデバッグビルドを使用" + "チェックしない" "DRMコンテンツのみをチェック" @@ -367,6 +400,11 @@ "行として画面に表示" "adb shell dumpsys gfxinfoを使用" + + "OFF" + "オーバードロー領域の表示" + "オーバードローカウンタの表示" + "標準の上限" "バックグラウンドプロセスを使用しない" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 8bb0b0a11fe..8b55f93874f 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -277,8 +277,8 @@ "データローミングをOFFにしたままホームネットワークの外に出たためデータ接続が切断されました。" "ONにする" "データローミングを許可すると高額な通信料が発生することがあります。" - "データローミングを許可すると高額な通信料が発生することがあります。"\n\n"この設定はこのタブレット上のすべてのユーザーに影響します。" - "データローミングを許可すると高額な通信料が発生することがあります。"\n\n"この設定はこの端末上のすべてのユーザーに影響します。" + "データローミングを許可すると高額な通信料が発生することがあります。\n\nこの設定はこのタブレット上のすべてのユーザーに影響します。" + "データローミングを許可すると高額な通信料が発生することがあります。\n\nこの設定はこの端末上のすべてのユーザーに影響します。" "データ ローミングを許可しますか?" "通信事業者の選択" "通信事業者を選択する" @@ -324,8 +324,8 @@ "電源を入れるたびに数値のPINまたはパスワードを入力してタブレットを復号化する必要がある" "電源を入れるたびに数値のPINまたはパスワードを入力して端末を復号化する必要がある" "暗号化されています" - "アカウント、設定、ダウンロードしたアプリとそのデータ、メディアなどのファイルを暗号化できます。タブレットを一度暗号化すると、電源を入れるたびに数値のPINまたはパスワードを入力して復号化する必要があります。暗号化を解除するためには、タブレットを出荷時設定にリセットしてすべてのデータを消去しなければなりません。"\n\n"暗号化には1時間以上かかります。開始する前に完全に充電し、暗号化が完了するまで電源を接続しておく必要があります。暗号化処理を中断すると、一部またはすべてのデータが失われます。" - "アカウント、設定、ダウンロードしたアプリとそのデータ、メディアなどのファイルを暗号化できます。端末を一度暗号化すると、電源を入れるたびに数値のPINまたはパスワードを入力して復号化する必要があります。暗号化を解除するためには、端末を出荷時設定にリセットしてすべてのデータを消去しなければなりません。"\n\n"暗号化には1時間以上かかります。開始する前に完全に充電し、暗号化が完了するまで電源を接続しておく必要があります。暗号化処理を中断すると、一部またはすべてのデータが失われます。" + "アカウント、設定、ダウンロードしたアプリとそのデータ、メディアなどのファイルを暗号化できます。タブレットを一度暗号化すると、電源を入れるたびに数値のPINまたはパスワードを入力して復号化する必要があります。暗号化を解除するためには、タブレットを出荷時設定にリセットしてすべてのデータを消去しなければなりません。\n\n暗号化には1時間以上かかります。開始する前に完全に充電し、暗号化が完了するまで電源を接続しておく必要があります。暗号化処理を中断すると、一部またはすべてのデータが失われます。" + "アカウント、設定、ダウンロードしたアプリとそのデータ、メディアなどのファイルを暗号化できます。端末を一度暗号化すると、電源を入れるたびに数値のPINまたはパスワードを入力して復号化する必要があります。暗号化を解除するためには、端末を出荷時設定にリセットしてすべてのデータを消去しなければなりません。\n\n暗号化には1時間以上かかります。開始する前に完全に充電し、暗号化が完了するまで電源を接続しておく必要があります。暗号化処理を中断すると、一部またはすべてのデータが失われます。" "タブレットを暗号化" "携帯端末を暗号化" "充電してからもう一度お試しください。" @@ -341,8 +341,8 @@ "^1秒後にやり直してください。" "パスワードを入力してください" "暗号化できませんでした" - "暗号化処理が中断されて完了できなかったためタブレット上のデータにアクセスできなくなりました。"\n\n"タブレットの使用を再開するには出荷時設定にリセットする必要があります。リセット後、タブレットのセットアップの段階で、Googleアカウントにバックアップしたデータの復元を選択できます。" - "暗号化処理が中断されて完了できなかったため端末上のデータにアクセスできなくなりました。"\n\n"端末の使用を再開するには出荷時設定にリセットする必要があります。リセット後、端末のセットアップの段階で、Googleアカウントにバックアップしたデータの復元を選択できます。" + "暗号化処理が中断されて完了できなかったためタブレット上のデータにアクセスできなくなりました。\n\nタブレットの使用を再開するには出荷時設定にリセットする必要があります。リセット後、タブレットのセットアップの段階で、Googleアカウントにバックアップしたデータの復元を選択できます。" + "暗号化処理が中断されて完了できなかったため端末上のデータにアクセスできなくなりました。\n\n端末の使用を再開するには出荷時設定にリセットする必要があります。リセット後、端末のセットアップの段階で、Googleアカウントにバックアップしたデータの復元を選択できます。" "入力方法の切り替え" "画面ロックを選択" "バックアップのロックの選択" @@ -516,6 +516,7 @@ "接続中" "接続済み" "使用可能" + "使用中" "ディスプレイの設定" "切断しますか?" "この操作を行うと、次のデバイスとの接続が切断されます:<br><b>%1$s</b>" @@ -534,7 +535,7 @@ "OFF" "NFCがOFFのため使用できません" "Androidビーム" - "この機能をONにすると、別のNFC対応の端末を近づけて持ち、アプリのコンテンツをビームすることができます。たとえば、ブラウザのページ、YouTubeの動画、連絡帳の連絡先などをビームできます。"\n\n"2 つの端末を近づけて(通常は背面を向かい合わせにして)、画面をタップします。何をビームするかはアプリが判断します。" + "この機能をONにすると、別のNFC対応の端末を近づけて持ち、アプリのコンテンツをビームすることができます。たとえば、ブラウザのページ、YouTubeの動画、連絡帳の連絡先などをビームできます。\n\n2 つの端末を近づけて(通常は背面を向かい合わせにして)、画面をタップします。何をビームするかはアプリが判断します。" "ネットワークサービスの検出" "別の端末上のアプリにこの端末上のアプリを検出することを許可する" "Wi-Fi" @@ -622,7 +623,7 @@ "%1$sで保護" "、%1$sで保護" "なし" - "現在地情報の精度向上やその他の目的で、%1$sではWi-FiがOFFのときでもネットワークスキャンをオンにすることを要求しています。"\n\n"スキャンを必要とするすべてのアプリでスキャンを許可しますか?" + "現在地情報の精度向上やその他の目的で、%1$sではWi-FiがOFFのときでもネットワークスキャンをオンにすることを要求しています。\n\nスキャンを必要とするすべてのアプリでスキャンを許可しますか?" "許可する" "許可しない" "接続" @@ -634,8 +635,8 @@ "キャンセル" "無視してスキップ" "スキップしない" - "警告: 追加のデータ通信料が発生する可能性があります。"\n\n"タブレットのセットアップでは大量のネットワーク処理が必要となる場合があります。" - "警告: 追加のデータ通信料が発生する可能性があります。"\n\n"タブレットのセットアップでは大量のネットワーク処理が必要となる場合があります。" + "警告: 追加のデータ通信料が発生する可能性があります。\n\nタブレットのセットアップでは大量のネットワーク処理が必要となる場合があります。" + "警告: 追加のデータ通信料が発生する可能性があります。\n\nタブレットのセットアップでは大量のネットワーク処理が必要となる場合があります。" "警告: インターネットに接続しないと、タブレットはソフトウェアが最新であることを確認できません。" "警告: インターネットに接続しないと、携帯端末はソフトウェアが最新であることを確認できません。" "タブレットからこのWi-Fiネットワークに接続できませんでした。" @@ -775,9 +776,9 @@ "SIM PIN" "PINが正しくありません" "PINが一致しません" - "PINを変更できません。"\n"PINが正しくない可能性があります。" + "PINを変更できません。\nPINが正しくない可能性があります。" "SIM PINが変更されました" - "SIMカードのロック状態を変更できません。"\n"PINが正しくない可能性があります。" + "SIMカードのロック状態を変更できません。\nPINが正しくない可能性があります。" "OK" "キャンセル" "タブレットの状態" @@ -920,9 +921,9 @@ "データの初期化" "タブレット内のすべてのデータを消去する" "携帯端末内のすべてのデータを消去する" - "この操作を行うと、タブレットの以下のデータを含む""内部ストレージ""の全データが消去されます:"\n\n
  • "Googleアカウント"
  • \n
  • "システムやアプリのデータと設定"
  • \n
  • "ダウンロードしたアプリ"
  • - "この操作を行うと、携帯端末の以下のデータを含む""内部ストレージ""の全データが消去されます:"\n\n
  • "Googleアカウント"
  • \n
  • "システムやアプリのデータと設定"
  • \n
  • "ダウンロードしたアプリ"
  • - \n\n"以下のアカウントにログインしています:"\n + "この操作を行うと、タブレットの以下のデータを含む""内部ストレージ""の全データが消去されます:\n\n"
  • "Googleアカウント"
  • \n
  • "システムやアプリのデータと設定"
  • \n
  • "ダウンロードしたアプリ"
  • + "この操作を行うと、携帯端末の以下のデータを含む""内部ストレージ""の全データが消去されます:\n\n"
  • "Googleアカウント"
  • \n
  • "システムやアプリのデータと設定"
  • \n
  • "ダウンロードしたアプリ"
  • + \n\n"以下のアカウントにログインしています:\n"
  • "音楽"
  • \n
  • "画像"
  • \n
  • "他のユーザーデータ"
  • \n\n"音楽、画像、その他のユーザーデータを消去する場合は""USBストレージデータ""を消去する必要があります。" \n\n"音楽、画像、その他のユーザーデータを消去するには、""SDカード""を消去する必要があります。" @@ -1107,7 +1108,7 @@ "キャッシュしたプロセスを表示" "アプリの設定をリセット" "設定をリセットしますか?" - "この操作により、次の設定がすべてリセットされます:"\n\n" "
  • "無効化されているアプリ"
  • \n" "
  • "無効化されているアプリの通知"
  • \n" "
  • "特定の操作で使用するデフォルトのアプリ"
  • \n" "
  • "アプリのバックグラウンドデータの制限"
  • \n\n" アプリのデータが失われることはありません。"
    + "この操作により、次の設定がすべてリセットされます:\n\n "
  • "無効化されているアプリ"
  • \n" "
  • "無効化されているアプリの通知"
  • \n" "
  • "特定の操作で使用するデフォルトのアプリ"
  • \n" "
  • "アプリのバックグラウンドデータの制限"
  • \n\n" アプリのデータが失われることはありません。"
    "アプリをリセット" "容量を管理" "フィルタ" @@ -1242,9 +1243,7 @@ "切り替えるにはCtrl+スペースを押します" "デフォルト" "キーボードレイアウト" - "単語リスト" - "ユーザー辞書" - "ユーザー辞書" + "ユーザー辞書" "追加" "辞書に追加" @@ -1305,6 +1304,11 @@ "電源メニューにバグレポートを取得するオプションを含める" "スリープモードにしない" "充電中に画面をスリープにしない" + "Bluetooth HCIスヌープログを有効にする" + "Bluetooth HCIパケットをすべてファイルにキャプチャする" + "ランタイムを選択" + "ランタイムを選択" + "再起動して、ランタイムを%1$sから%2$sに変更しますか?" "擬似ロケーションを許可" "擬似ロケーションを許可する" "USBデバッグを許可しますか?" @@ -1317,11 +1321,13 @@ "USBストレージの保護" "アプリによるUSBストレージの読み取り権限のリクエストが必要" "USBストレージの保護" - "USBストレージが保護されている場合、アプリは外部ストレージからデータを読み取る権限をリクエストする必要があります。"\n\n"一部のアプリについては、デベロッパーによって更新されるまで動作しない可能性があります。" + "USBストレージが保護されている場合、アプリは外部ストレージからデータを読み取る権限をリクエストする必要があります。\n\n一部のアプリについては、デベロッパーによって更新されるまで動作しない可能性があります。" "SDカードの保護" "アプリによるSDカードの読み取り権限のリクエストが必要" "SDカードの保護" - "SDカードが保護されている場合、アプリは外部ストレージからデータを読み取る権限をリクエストする必要があります。"\n\n"一部のアプリについては、デベロッパーによって更新されるまで動作しない可能性があります。" + "SDカードが保護されている場合、アプリは外部ストレージからデータを読み取る権限をリクエストする必要があります。\n\n一部のアプリについては、デベロッパーによって更新されるまで動作しない可能性があります。" + "ローカルターミナル" + "ローカルシェルアクセスを提供するターミナルアプリを有効にします" "ガジェットを選択" "ウィジェットを選択" "ウィジェットの作成とアクセスの許可" @@ -1342,11 +1348,11 @@ "サービス" "システム" "拡大操作" - "この機能をオンにすると、画面をトリプルタップして画面を拡大/縮小できます。"\n\n"拡大した画面で次のことを実行できます:"\n
    • "パン: 2本以上の指で画面上をドラッグします。"
    • \n
    • "拡大レベルの調整: 2本以上の指でピンチイン/ピンチアウトします。"
    \n\n"また、トリプルタップして押し続けると、指の下の部分を一時的に拡大することができます。この状態で、指をドラッグして画面の別の部分に移動することができます。指を画面から離すと元の状態に戻ります。"\n\n"注意: トリプルタップで拡大する方法は、キーボードとナビゲーションバー以外で使用できます。"
    + "この機能をオンにすると、画面をトリプルタップして画面を拡大/縮小できます。\n\n拡大した画面で次のことを実行できます:\n"
    • "パン: 2本以上の指で画面上をドラッグします。"
    • \n
    • "拡大レベルの調整: 2本以上の指でピンチイン/ピンチアウトします。"
    \n\n"また、トリプルタップして押し続けると、指の下の部分を一時的に拡大することができます。この状態で、指をドラッグして画面の別の部分に移動することができます。指を画面から離すと元の状態に戻ります。\n\n注意: トリプルタップで拡大する方法は、キーボードとナビゲーションバー以外で使用できます。"
    "ユーザー補助のショートカット" "ON" "OFF" - "この機能を有効にすると、次の2つのステップでユーザー補助機能をすぐに有効にできます:"\n\n"ステップ1: 音が鳴るか振動するまで電源ボタンを押し続けます。"\n\n"ステップ2: 確認音が鳴るまで2本の指でタップして押し続けます。"\n\n"複数のユーザーでこの端末を使用している場合は、ロック画面でこのショートカットを使用すると、端末がロック解除されるまでユーザー補助機能が一時的に有効になります。" + "この機能を有効にすると、次の2つのステップでユーザー補助機能をすぐに有効にできます:\n\nステップ1: 音が鳴るか振動するまで電源ボタンを押し続けます。\n\nステップ2: 確認音が鳴るまで2本の指でタップして押し続けます。\n\n複数のユーザーでこの端末を使用している場合は、ロック画面でこのショートカットを使用すると、端末がロック解除されるまでユーザー補助機能が一時的に有効になります。" "大きい文字サイズ" "画面の拡大" "画面の拡大を自動更新" @@ -1368,6 +1374,16 @@ "Talkbackは音声で応答するアプリで、目の不自由なユーザーや低視力のユーザーを支援します。Androidマーケットから無料でインストールできます。" "説明はありません。" "設定" + "印刷" + "印刷設定" + "サービス" + "%1$sを利用しますか?" + "%1$sは印刷したドキュメントを受け取ることができます。このようなドキュメントは機密データが含まれている可能性があります。" + "インストールされているサービスはありません" + "設定" + "プリンタを追加" + "ON" + "OFF" "電池" "電池の使用状況" "電池使用量データがありません。" @@ -1407,8 +1423,10 @@ "Wi-Fi使用" "タブレット" "電話" - "送信されたデータ" - "受信したデータ" + "送信したモバイルデータ" + "受信したモバイルデータ" + "送信したWi‑Fiデータ" + "受信したWi‑Fiデータ" "音声" "動画" "点灯時間" @@ -1462,6 +1480,7 @@ "音の高さ" "テキスト読み上げの音程を変更する" "言語" + "言語が選択されていません" "テキスト読み上げに使用する言語固有の音声を設定する" "サンプルを再生" "音声合成の短いサンプルを再生する" @@ -1600,7 +1619,7 @@ "EAPはサポートされていません。" "EAP Wi-Fi接続はセットアップ時に設定できません。セットアップの完了後に[設定]の[無線とネットワーク]で設定することができます。" "接続には数分かかることがあります..." - "セットアップを続けるには[""次へ""]をタップします。"\n\n"別のWi-Fiネットワークに接続するには[""戻る""]をタップします。" + "セットアップを続けるには[""次へ""]をタップします。\n\n別のWi-Fiネットワークに接続するには[""戻る""]をタップします。" "同期が有効です" "同期は無効になっています" "同期エラー。" @@ -1682,8 +1701,7 @@ "GPUでの描画時にウィンドウ内の表示を点滅させる" "ハードウェア層情報を表示" "ハードウェア層が更新されると緑を表示" - "GPUオーバードローを表示" - "良好な状態から順に: 青、緑、薄い赤、赤" + "GPUオーバードローをデバッグ" "HWオーバーレイを無効" "画面合成に常にGPUを使用する" "OpenGLトレースを有効化" @@ -1744,11 +1762,11 @@ "モバイルネットワークでバックグラウンドデータを無効にし、可能な場合はモバイル以外を使用。" "このアプリのバックグラウンドデータを制限するには、最初にモバイルデータの上限を設定してください。" "バックグラウンドデータを制限しますか?" - "この機能をONにすると、モバイルネットワークしか使用できない場合にバックグラウンドデータに依存するアプリが停止する可能性があります。"\n\n"データ使用をより適切に管理できるオプションがアプリの設定画面にないかどうかを確認してください。" + "この機能をONにすると、モバイルネットワークしか使用できない場合にバックグラウンドデータに依存するアプリが停止する可能性があります。\n\nデータ使用をより適切に管理できるオプションがアプリの設定画面にないかどうかを確認してください。" "バックグラウンドデータを制限できるのは、モバイルデータの上限が設定済みの場合のみです。" "データ自動同期をONにしますか?" - "ウェブでアカウントに変更を加えると自動的にタブレットに反映されます。"\n\n"Googleアカウントなど、アカウントによっては、タブレットで変更を加えた場合も自動的にウェブに反映されます。"\n\n"各アカウント内で同期する情報の種類は[設定]>[アカウント]で選択できます。" - "ウェブでアカウントに変更を加えると自動的に携帯端末に反映されます。"\n\n"Googleアカウントなど、アカウントによっては、携帯端末で変更を加えた場合も自動的にウェブに反映されます。"\n\n"各アカウント内で同期する情報の種類は[設定]>[アカウント]で選択できます。" + "ウェブでアカウントに変更を加えると自動的にタブレットに反映されます。\n\nGoogleアカウントなど、アカウントによっては、タブレットで変更を加えた場合も自動的にウェブに反映されます。\n\n各アカウント内で同期する情報の種類は[設定]>[アカウント]で選択できます。" + "ウェブでアカウントに変更を加えると自動的に携帯端末に反映されます。\n\nGoogleアカウントなど、アカウントによっては、携帯端末で変更を加えた場合も自動的にウェブに反映されます。\n\n各アカウント内で同期する情報の種類は[設定]>[アカウント]で選択できます。" "データ自動同期をOFFにしますか?" "無効にすると、データと電池の使用を節約できますが、最新情報を取得するには手動で各アカウントを同期する必要があります。また、更新があったときに通知されません。" "使用サイクルのリセット日" @@ -1757,12 +1775,12 @@ "データ使用の警告の設定" "データ使用の上限の設定" "データ使用上限の設定" - "モバイルデータ接続は指定の制限に達した場合無効になります。"\n\n"データ利用はタブレットで記録されますが、携帯通信会社の利用明細は異なる可能性があるため、制限にできるだけ余裕をみておくことをおすすめします。" - "モバイルデータ接続は指定の制限に達した場合無効になります。"\n\n"データ利用は携帯端末で記録されますが、携帯通信会社の利用明細は異なる可能性があるため、制限にできるだけ余裕をみておくことをおすすめします。" + "モバイルデータ接続は指定の制限に達した場合無効になります。\n\nデータ利用はタブレットで記録されますが、携帯通信会社の利用明細は異なる可能性があるため、制限にできるだけ余裕をみておくことをおすすめします。" + "モバイルデータ接続は指定の制限に達した場合無効になります。\n\nデータ利用は携帯端末で記録されますが、携帯通信会社の利用明細は異なる可能性があるため、制限にできるだけ余裕をみておくことをおすすめします。" "バックグラウンドデータを制限しますか?" "バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fiネットワーク未接続時に機能しない場合があります。" - "バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fiネットワーク未接続時に機能しない場合があります。"\n\n"この設定はこのタブレット上のすべてのユーザーに影響します。" - "バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fiネットワーク未接続時に機能しない場合があります。"\n\n"この設定はこの端末上のすべてのユーザーに影響します。" + "バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fiネットワーク未接続時に機能しない場合があります。\n\nこの設定はこのタブレット上のすべてのユーザーに影響します。" + "バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fiネットワーク未接続時に機能しない場合があります。\n\nこの設定はこの端末上のすべてのユーザーに影響します。" "^1"" ""^2"\n"警告" "^1"" ""^2"\n"に制限" "削除したアプリケーション" @@ -1849,8 +1867,8 @@ "ユーザー" "制限付きプロフィール" "新しいユーザーを追加する" - "追加ユーザーを作成して、この端末を他のユーザーと共有できます。各ユーザーは各自のスペースを所有でき、アプリや壁紙などを使用してカスタマイズできます。Wi-Fiなど、すべてのユーザーに影響するタブレット設定を変更することもできます。"\n\n"新しいユーザーを作成したら、そのユーザーはセットアップ処理を完了する必要があります。"\n\n"すべてのユーザーは他のユーザーの代わりに更新されたアプリの許可を承認できます。" - "新しいユーザーを作成したら、そのユーザーはセットアップ処理を完了する必要があります。"\n\n"すべてのユーザーは他のユーザーの代わりに更新されたアプリの許可を承認できます。" + "追加ユーザーを作成して、この端末を他のユーザーと共有できます。各ユーザーは各自のスペースを所有でき、アプリや壁紙などを使用してカスタマイズできます。Wi-Fiなど、すべてのユーザーに影響するタブレット設定を変更することもできます。\n\n新しいユーザーを作成したら、そのユーザーはセットアップ処理を完了する必要があります。\n\nすべてのユーザーは他のユーザーの代わりに更新されたアプリの許可を承認できます。" + "新しいユーザーを作成したら、そのユーザーはセットアップ処理を完了する必要があります。\n\nすべてのユーザーは他のユーザーの代わりに更新されたアプリの許可を承認できます。" "ユーザーを今すぐセットアップ" "ユーザーがタブレットを使って各自のスペースをセットアップできるよう確認してください" "プロフィールを今すぐセットアップしますか?" @@ -1881,6 +1899,9 @@ "この設定はこの端末上のすべてのユーザーに影響します。" "言語の変更" "フォントサイズの変更" + "制限" + "制限を削除" + "PINを変更" "通知を表示" "ヘルプ" "コンテンツのアカウント" diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml index ab1d5f81c55..862e6285e01 100644 --- a/res/values-ko/arrays.xml +++ b/res/values-ko/arrays.xml @@ -233,7 +233,8 @@ "위치" "개인" "메시지" - "기기" + "미디어" + "기기"
    "대략적 위치" @@ -267,6 +268,17 @@ "오디오 재생" "클립보드 읽기" "클립보드 수정" + "미디어 버튼" + "오디오 포커스" + "마스터 볼륨" + "음성 볼륨" + "벨소리 볼륨" + "미디어 볼륨" + "알람 볼륨" + "알림 볼륨" + "블루투스 볼륨" + "켜진 상태로 유지" + "위치 모니터링" "위치" @@ -300,12 +312,33 @@ "오디오 재생" "클립보드 읽기" "클립보드 수정" + "미디어 버튼" + "오디오 포커스" + "마스터 볼륨" + "음성 볼륨" + "벨소리 볼륨" + "미디어 볼륨" + "알람 볼륨" + "알림 볼륨" + "블루투스 볼륨" + "켜진 상태로 유지" + "위치" "짧게" "보통" "길게" + + "Dalvik" + "ART" + "ART(디버그)" + + + "Dalvik 사용" + "ART 사용" + "ART 디버그 빌드 사용" + "확인 안함" "DRM 콘텐츠만 확인" @@ -367,6 +400,11 @@ "화면에 선으로 표시" "adb shell dumpsys gfxinfo에서 사용" + + "OFF" + "오버드로 영역 표시" + "오버드로 카운터 표시" + "표준 제한" "백그라운드 프로세스 없음" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 951fccd3bfc..656aacfcd66 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -275,8 +275,8 @@ "데이터 로밍을 사용 중지한 상태에서 홈 네트워크를 벗어났으므로 데이터 연결이 끊어졌습니다." "사용" "데이터 로밍을 허용하면 높은 로밍 요금이 부과될 수 있습니다." - "데이터 로밍을 허용하면 높은 로밍 요금이 부과될 수 있습니다."\n\n"이 설정은 태블릿의 모든 사용자에게 영향을 줍니다." - "데이터 로밍을 허용하면 높은 로밍 요금이 부과될 수 있습니다."\n\n"이 설정은 휴대전화의 모든 사용자에게 영향을 줍니다." + "데이터 로밍을 허용하면 높은 로밍 요금이 부과될 수 있습니다.\n\n이 설정은 태블릿의 모든 사용자에게 영향을 줍니다." + "데이터 로밍을 허용하면 높은 로밍 요금이 부과될 수 있습니다.\n\n이 설정은 휴대전화의 모든 사용자에게 영향을 줍니다." "데이터 로밍을 허용하시겠습니까?" "운영자 선택" "네트워크 운영자 선택" @@ -322,8 +322,8 @@ "태블릿의 전원을 켤 때마다 암호 해독을 위해 숫자 PIN 또는 비밀번호 입력" "휴대전화의 전원을 켤 때마다 암호 해독을 위해 숫자 PIN 또는 비밀번호 입력" "암호화됨" - "계정, 설정, 다운로드된 애플리케이션과 데이터, 미디어 및 기타 파일을 암호화할 수 있습니다. 태블릿을 암호화하면 전원을 켤 때마다 숫자 PIN 또는 비밀번호를 입력하여 암호를 해제해야 합니다. 초기화하여 모든 데이터를 삭제해야만 태블릿 암호화를 해제할 수 있습니다."\n\n"암호화에는 1시간 이상이 걸릴 수 있습니다. 충전된 배터리로 암호화를 시작하고 완료될 때까지 태블릿의 전원 연결을 해제하지 않아야 합니다. 암호화 프로세스를 중단하면 데이터의 일부 또는 전부를 잃게 됩니다." - "계정, 설정, 다운로드된 애플리케이션과 데이터, 미디어 및 기타 파일을 암호화할 수 있습니다. 휴대전화를 암호화하면 전원을 켤 때마다 숫자 PIN 또는 비밀번호를 입력하여 암호를 해제해야 합니다. 초기화하여 모든 데이터를 삭제해야만 휴대전화 암호화를 해제할 수 있습니다."\n\n"암호화에는 1시간 이상이 걸릴 수 있습니다. 충전된 배터리로 암호화를 시작하고 완료될 때까지 휴대전화의 전원 연결을 해제하지 않아야 합니다. 암호화 프로세스를 중단하면 데이터의 일부 또는 전부를 잃게 됩니다." + "계정, 설정, 다운로드된 애플리케이션과 데이터, 미디어 및 기타 파일을 암호화할 수 있습니다. 태블릿을 암호화하면 전원을 켤 때마다 숫자 PIN 또는 비밀번호를 입력하여 암호를 해제해야 합니다. 초기화하여 모든 데이터를 삭제해야만 태블릿 암호화를 해제할 수 있습니다.\n\n암호화에는 1시간 이상이 걸릴 수 있습니다. 충전된 배터리로 암호화를 시작하고 완료될 때까지 태블릿의 전원 연결을 해제하지 않아야 합니다. 암호화 프로세스를 중단하면 데이터의 일부 또는 전부를 잃게 됩니다." + "계정, 설정, 다운로드된 애플리케이션과 데이터, 미디어 및 기타 파일을 암호화할 수 있습니다. 휴대전화를 암호화하면 전원을 켤 때마다 숫자 PIN 또는 비밀번호를 입력하여 암호를 해제해야 합니다. 초기화하여 모든 데이터를 삭제해야만 휴대전화 암호화를 해제할 수 있습니다.\n\n암호화에는 1시간 이상이 걸릴 수 있습니다. 충전된 배터리로 암호화를 시작하고 완료될 때까지 휴대전화의 전원 연결을 해제하지 않아야 합니다. 암호화 프로세스를 중단하면 데이터의 일부 또는 전부를 잃게 됩니다." "태블릿 암호화" "휴대전화 암호화" "배터리를 충전한 다음 다시 시도하세요." @@ -339,8 +339,8 @@ "^1초 후에 다시 시도하세요." "비밀번호 입력" "암호화하지 못했습니다." - "암호화가 중단되어 완료할 수 없습니다. 따라서 태블릿의 데이터에 더 이상 액세스할 수 없습니다. "\n\n" 태블릿을 다시 사용하려면 초기화해야 합니다. 초기화한 후 태블릿을 설정하면, Google 계정에 백업되어 있던 데이터를 복원할 수 있습니다." - "암호화가 중단되어 완료할 수 없습니다. 따라서 휴대전화의 데이터에 더 이상 액세스할 수 없습니다. "\n\n"휴대전화를 다시 사용하려면 초기화해야 합니다. 초기화한 후 휴대전화를 설정하면, Google 계정에 백업되어 있던 데이터를 복원할 수 있습니다." + "암호화가 중단되어 완료할 수 없습니다. 따라서 태블릿의 데이터에 더 이상 액세스할 수 없습니다. \n\n 태블릿을 다시 사용하려면 초기화해야 합니다. 초기화한 후 태블릿을 설정하면, Google 계정에 백업되어 있던 데이터를 복원할 수 있습니다." + "암호화가 중단되어 완료할 수 없습니다. 따라서 휴대전화의 데이터에 더 이상 액세스할 수 없습니다. \n\n휴대전화를 다시 사용하려면 초기화해야 합니다. 초기화한 후 휴대전화를 설정하면, Google 계정에 백업되어 있던 데이터를 복원할 수 있습니다." "입력 방법 전환" "화면 잠금 선택" "백업 잠금 선택" @@ -514,6 +514,7 @@ "연결 중" "연결됨" "사용 가능" + "사용 중" "디스플레이 설정" "연결을 해제하시겠습니까?" "%1$s와(과) 연결이 끊어집니다." @@ -532,7 +533,7 @@ "사용 안함" "NFC가 꺼져 있어 사용할 수 없음" "Android Beam" - "이 기능을 사용하도록 설정하면 기기를 서로 가까이 두어 앱 콘텐츠를 다른 NFC 지원 기기로 전송할 수 있습니다. 예를 들어 브라우저 페이지, YouTube 동영상, 주소록 등을 전송할 수 있습니다."\n\n"서로 뒷면을 향하는 방식 등으로 기기를 맞댄 후에 화면을 터치하기만 하면 됩니다. 전송할 대상은 앱이 결정합니다." + "이 기능을 사용하도록 설정하면 기기를 서로 가까이 두어 앱 콘텐츠를 다른 NFC 지원 기기로 전송할 수 있습니다. 예를 들어 브라우저 페이지, YouTube 동영상, 주소록 등을 전송할 수 있습니다.\n\n서로 뒷면을 향하는 방식 등으로 기기를 맞댄 후에 화면을 터치하기만 하면 됩니다. 전송할 대상은 앱이 결정합니다." "네트워크 서비스 검색" "다른 기기의 앱에서 이 기기의 앱을 검색하도록 허용" "Wi-Fi" @@ -620,7 +621,7 @@ "%1$s(으)로 보안" "%1$s(으)로 보안" "없음" - "위치 정확성 개선 등의 목적으로 %1$s에서 Wi-Fi가 꺼져 있을 때에도 네트워크 검색을 사용하도록 설정하려 합니다."\n\n"검색하려는 모든 앱에 대해 이를 허용하시겠습니까?" + "위치 정확성 개선 등의 목적으로 %1$s에서 Wi-Fi가 꺼져 있을 때에도 네트워크 검색을 사용하도록 설정하려 합니다.\n\n검색하려는 모든 앱에 대해 이를 허용하시겠습니까?" "허용" "거부" "연결" @@ -632,8 +633,8 @@ "취소" "건너뛰기" "건너뛰지 않음" - "경고: 추가 이동통신 데이터 요금이 발생할 수 있습니다."\n\n"태블릿 설정은 상당한 네트워크 활동을 요구할 수 있습니다." - "경고: 추가 이동통신 데이터 요금이 발생할 수 있습니다."\n\n"휴대전화 설정은 상당한 네트워크 활동을 요구할 수 있습니다." + "경고: 추가 이동통신 데이터 요금이 발생할 수 있습니다.\n\n태블릿 설정은 상당한 네트워크 활동을 요구할 수 있습니다." + "경고: 추가 이동통신 데이터 요금이 발생할 수 있습니다.\n\n휴대전화 설정은 상당한 네트워크 활동을 요구할 수 있습니다." "경고: 인터넷에 연결되어 있어야 태블릿에서 소프트웨어의 최신 상태 여부를 확인할 수 있습니다." "경고: 인터넷에 연결되어 있어야 휴대전화에서 소프트웨어의 최신 상태 여부를 확인할 수 있습니다." "해당 태블릿으로 이 Wi-Fi 네트워크에 연결할 수 없습니다." @@ -773,9 +774,9 @@ "SIM PIN" "잘못된 PIN" "PIN이 일치하지 않음" - "PIN을 변경할 수 없습니다."\n"PIN이 잘못된 것 같습니다." + "PIN을 변경할 수 없습니다.\nPIN이 잘못된 것 같습니다." "SIM PIN이 변경되었습니다." - "SIM 카드 잠금 상태를 변경할 수 없습니다."\n"PIN이 잘못된 것 같습니다." + "SIM 카드 잠금 상태를 변경할 수 없습니다.\nPIN이 잘못된 것 같습니다." "확인" "취소" "태블릿 상태" @@ -920,7 +921,7 @@ "휴대전화의 모든 데이터 지우기" "공장 초기화하면 태블릿의 ""내부 저장소의 모든 데이터가 삭제됩니다."\n\n
  • "Google 계정"
  • \n
  • "시스템과 앱 데이터 및 설정"
  • \n
  • "다운로드된 앱"
  • "공장 초기화하면 휴대전화의 ""내부 저장소의 모든 데이터가 삭제됩니다."\n\n
  • "Google 계정"
  • \n
  • "시스템과 앱 데이터 및 설정"
  • \n
  • "다운로드된 앱"
  • - \n\n"현재 로그인한 계정:"\n + \n\n"현재 로그인한 계정:\n"
  • "음악"
  • \n
  • "사진"
  • \n
  • "기타 사용자 데이터"
  • \n\n"음악이나 사진, 기타 사용자 데이터를 지우려면 ""USB 저장소""를 삭제해야 합니다." \n\n"음악이나 사진, 기타 사용자 데이터를 지우려면 ""SD 카드""를 삭제해야 합니다." @@ -1105,7 +1106,7 @@ "캐시된 프로세스 표시" "앱 환경설정 재설정" "앱 환경설정을 재설정하시겠습니까?" - "이 작업을 수행하면 다음 환경설정이 모두 재설정됩니다."\n\n" "
  • "사용 중지된 앱"
  • \n" "
  • "사용 중지된 앱 알림"
  • \n" "
  • "작업을 수행할 때 사용하는 기본 애플리케이션"
  • \n" "
  • "앱에 대한 백그라운드 데이터 제한"
  • \n\n" 앱 데이터는 손실되지 않습니다."
    + "이 작업을 수행하면 다음 환경설정이 모두 재설정됩니다.\n\n "
  • "사용 중지된 앱"
  • \n" "
  • "사용 중지된 앱 알림"
  • \n" "
  • "작업을 수행할 때 사용하는 기본 애플리케이션"
  • \n" "
  • "앱에 대한 백그라운드 데이터 제한"
  • \n\n" 앱 데이터는 손실되지 않습니다."
    "앱 재설정" "공간 관리" "필터" @@ -1240,9 +1241,7 @@ "전환하려면 Control-Spacebar를 누름" "기본값" "키보드 레이아웃" - "사용자 사전" - "개인 사전" - "개인 사전" + "개인 사전" "추가" "사전에 추가" @@ -1303,6 +1302,11 @@ "전원 메뉴에 버그 신고 옵션 포함" "켜진 상태로 유지" "충전하는 동안 화면이 꺼지지 않음" + "블루투스 HCI 스누프 로그 사용" + "모든 블루투스 HCI 패킷을 하나의 파일에 캡처" + "런타임 선택" + "런타임 선택" + "다시 부팅하여 %1$s에서 %2$s(으)로 런타임을 변경하시겠습니까?" "모의 위치 허용" "모의 위치 허용" "USB 디버깅을 허용하시겠습니까?" @@ -1315,11 +1319,13 @@ "USB 저장소 보호" "USB 저장소를 읽으려면 앱이 권한을 요청해야함" "USB 저장소를 보호하시겠습니까?" - "USB 저장소를 보호하도록 설정한 경우 앱이 외부 저장소에서 데이터를 읽을 수 있는 권한을 요청해야 합니다."\n\n"일부 앱은 개발자가 업데이트할 때까지 작동하지 않을 수 있습니다." + "USB 저장소를 보호하도록 설정한 경우 앱이 외부 저장소에서 데이터를 읽을 수 있는 권한을 요청해야 합니다.\n\n일부 앱은 개발자가 업데이트할 때까지 작동하지 않을 수 있습니다." "SD 카드 보호" "SD카드를 읽으려면 앱이 권한을 요청해야함" "SD 카드를 보호하시겠습니까?" - "SD 카드를 보호하도록 설정한 경우 앱이 외부 저장소에서 데이터를 읽을 수 있는 권한을 요청해야 합니다."\n\n"일부 앱은 개발자가 업데이트할 때까지 작동하지 않을 수 있습니다." + "SD 카드를 보호하도록 설정한 경우 앱이 외부 저장소에서 데이터를 읽을 수 있는 권한을 요청해야 합니다.\n\n일부 앱은 개발자가 업데이트할 때까지 작동하지 않을 수 있습니다." + "로컬 터미널" + "로컬 셸 액세스를 제공하는 터미널 앱 사용" "가젯 선택" "위젯 선택" "위젯을 만들고 액세스를 허용하시겠습니까?" @@ -1340,11 +1346,11 @@ "서비스" "시스템" "확대 동작" - "이 기능을 사용하면 화면을 3번 탭하여 확대 및 축소할 수 있습니다."\n\n"화면을 확대한 상태에서 다음 작업을 수행할 수 있습니다."\n
    • "이동: 화면에서 두 개 이상의 손가락을 드래그"
    • \n
    • "확대/축소 수준 조정: 두 개 이상의 손가락을 오므리거나 벌림"
    \n\n"또한 3번 탭한 상태를 유지하여 손가락 아래에 있는 항목을 일시적으로 확대할 수 있습니다. 확대한 상태에서 손가락을 드래그하여 화면의 다른 부분을 탐색할 수 있습니다. 손가락을 떼면 이전 상태로 돌아갑니다."\n\n"참고: 세 번 탭하여 확대 기능은 키보드와 탐색 바에서는 작동하지 않습니다."
    + "이 기능을 사용하면 화면을 3번 탭하여 확대 및 축소할 수 있습니다.\n\n화면을 확대한 상태에서 다음 작업을 수행할 수 있습니다.\n"
    • "이동: 화면에서 두 개 이상의 손가락을 드래그"
    • \n
    • "확대/축소 수준 조정: 두 개 이상의 손가락을 오므리거나 벌림"
    \n\n"또한 3번 탭한 상태를 유지하여 손가락 아래에 있는 항목을 일시적으로 확대할 수 있습니다. 확대한 상태에서 손가락을 드래그하여 화면의 다른 부분을 탐색할 수 있습니다. 손가락을 떼면 이전 상태로 돌아갑니다.\n\n참고: 세 번 탭하여 확대 기능은 키보드와 탐색 바에서는 작동하지 않습니다."
    "접근성 단축키" "켜기" "사용 안함" - "이 기능을 사용하면 다음 두 단계를 통해 접근성 기능을 빠르게 사용하도록 설정할 수 있습니다."\n\n"1단계: 소리가 나거나 진동이 느껴질 때까지 전원 버튼을 길게 누릅니다."\n\n"2단계: 확인음이 들릴 때까지 두 손가락으로 길게 터치합니다."\n\n"기기를 여러 사용자가 사용하는 경우 잠금 화면에 있는 바로가기를 사용하여 기기가 잠길 때까지 임시적으로 접근성 기능을 사용하도록 설정할 수 있습니다." + "이 기능을 사용하면 다음 두 단계를 통해 접근성 기능을 빠르게 사용하도록 설정할 수 있습니다.\n\n1단계: 소리가 나거나 진동이 느껴질 때까지 전원 버튼을 길게 누릅니다.\n\n2단계: 확인음이 들릴 때까지 두 손가락으로 길게 터치합니다.\n\n기기를 여러 사용자가 사용하는 경우 잠금 화면에 있는 바로가기를 사용하여 기기가 잠길 때까지 임시적으로 접근성 기능을 사용하도록 설정할 수 있습니다." "큰 텍스트" "화면 확대" "화면 확대 자동 업데이트" @@ -1366,6 +1372,16 @@ "TalkBack은 시각 장애인을 위한 음성 피드백을 제공합니다. Android 마켓에서 무료로 설치하시겠습니까?" "제공된 설명이 없습니다." "설정" + "인쇄" + "인쇄 설정" + "서비스" + "%1$s을(를) 사용하시겠습니까?" + "인쇄한 문서를 %1$s에서 받을 수 있습니다. 이런 문서에는 민감한 데이터가 포함되어 있을 수 있습니다." + "설치된 서비스 없음" + "설정" + "프린터 추가" + "ON" + "OFF" "배터리" "배터리 사용 세부정보" "배터리 사용 데이터가 없습니다." @@ -1405,8 +1421,10 @@ "Wi-Fi 실행 중" "태블릿" "휴대전화" - "보낸 데이터" - "수신된 데이터" + "모바일 데이터 전송" + "모바일 데이터 수신" + "Wi‑Fi 데이터 전송" + "Wi‑Fi 데이터 수신" "오디오" "동영상" "사용 시간" @@ -1460,6 +1478,7 @@ "피치" "발음된 텍스트의 톤에 적용" "언어" + "언어가 선택되지 않음" "발음된 텍스트에 대해 언어별로 음성 설정" "예제 듣기" "짧은 음성 합성 데모 재생" @@ -1594,7 +1613,7 @@ "EAP는 지원되지 않습니다." "설정하는 동안에는 EAP Wi-Fi 연결을 구성할 수 없습니다. 설정한 후에 설정 > 무선 및 네트워크에서 구성할 수 있습니다." "연결 시 몇 분 정도 걸릴 수 있습니다." - "설정을 계속하려면 ""다음""을 터치하세요."\n\n"다른 Wi-Fi 네트워크에 연결하려면 ""뒤로""를 터치하세요." + "설정을 계속하려면 ""다음""을 터치하세요.\n\n다른 Wi-Fi 네트워크에 연결하려면 ""뒤로""를 터치하세요." "동기화 사용" "동기화 사용중지됨" "동기화 오류입니다." @@ -1622,7 +1641,7 @@ "Gmail" "캘린더" "연락처" - "Google 동기화에 오신 것을 환영합니다."" "\n"Google 동기화는 사용자가 어디에서든지 연락처, 일정 등에 액세스할 수 있도록 데이터를 동기화하는 Google 서비스입니다." + "Google 동기화에 오신 것을 환영합니다."" \nGoogle 동기화는 사용자가 어디에서든지 연락처, 일정 등에 액세스할 수 있도록 데이터를 동기화하는 Google 서비스입니다." "앱 동기화 설정" "데이터 및 동기화" "비밀번호 변경" @@ -1676,8 +1695,7 @@ "GPU로 드로잉했을 때 창 내부 보기 플래시 처리" "하드웨어 업데이트 표시" "업데이트 할 때 하드웨어 레이어 깜박이기" - "GPU 오버드로 표시" - "오버드로가 적은 순으로: 파란색, 녹색, 옅은 빨간색, 빨간색" + "GPU 오버드로 디버깅" "HW 오버레이 사용 안함" "화면 합성 목적으로 항상 GPU 사용" "OpenGL 추적 사용 설정" @@ -1738,11 +1756,11 @@ "모바일 네트워크에서 백그라운드 데이터를 사용하지 않도록 설정합니다. 가능한 경우 모바일이 아닌 네트워크가 사용됩니다." "이 앱에 대해 백그라운드 데이터를 제한하려면 먼저 모바일 데이터 제한을 설정하세요." "백그라운드 데이터 사용 제한" - "모바일 네트워크만 사용할 수 있는 경우 백그라운드 데이터에 의존하는 앱이 중단될 수 있습니다."\n\n"앱 설정에서 데이터 사용을 더 적절하게 관리할 수 있는 컨트롤을 찾아볼 수 있습니다." + "모바일 네트워크만 사용할 수 있는 경우 백그라운드 데이터에 의존하는 앱이 중단될 수 있습니다.\n\n앱 설정에서 데이터 사용을 더 적절하게 관리할 수 있는 컨트롤을 찾아볼 수 있습니다." "백그라운드 데이터는 모바일 데이터 한도를 설정한 경우에만 제한할 수 있습니다." "데이터 자동 동기화를 사용하시겠습니까?" - "웹에서 변경한 계정 정보는 모두 태블릿에 자동으로 복사됩니다."\n\n"또한 일부 계정은 태블릿의 변경사항을 웹에 자동으로 복사할 수 있습니다. Google 계정은 이러한 자동 동기화를 지원합니다."\n\n"각 계정에서 동기화하려는 정보의 종류를 선택하려면 \'설정 > 계정\'으로 이동하세요." - "웹에서 변경한 계정 정보는 모두 휴대전화에 자동으로 복사됩니다."\n\n"또한 일부 계정은 휴대전화의 변경사항을 웹에 자동으로 복사할 수 있습니다. Google 계정은 이러한 자동 동기화를 지원합니다."\n\n"각 계정에서 동기화하려는 정보의 종류를 선택하려면 \'설정 > 계정\'으로 이동하세요." + "웹에서 변경한 계정 정보는 모두 태블릿에 자동으로 복사됩니다.\n\n또한 일부 계정은 태블릿의 변경사항을 웹에 자동으로 복사할 수 있습니다. Google 계정은 이러한 자동 동기화를 지원합니다.\n\n각 계정에서 동기화하려는 정보의 종류를 선택하려면 \'설정 > 계정\'으로 이동하세요." + "웹에서 변경한 계정 정보는 모두 휴대전화에 자동으로 복사됩니다.\n\n또한 일부 계정은 휴대전화의 변경사항을 웹에 자동으로 복사할 수 있습니다. Google 계정은 이러한 자동 동기화를 지원합니다.\n\n각 계정에서 동기화하려는 정보의 종류를 선택하려면 \'설정 > 계정\'으로 이동하세요." "데이터 자동 동기화를 사용 중지하시겠습니까?" "이 경우 데이터와 배터리 사용량이 절약되지만, 최근 정보를 수집하려면 각 계정을 직접 동기화해야 합니다. 또한 업데이트가 발생해도 알림을 받지 못합니다." "사용 주기 재설정" @@ -1751,12 +1769,12 @@ "데이터 사용 경고 설정" "데이터 사용 한도 설정" "데이터 사용 제한 중" - "지정된 한도에 도달하면 모바일 데이터 연결 사용이 중지됩니다."\n\n"태블릿을 기준으로 데이터 사용량이 측정되며 이동통신사에서는 사용량을 다르게 계산할 수 있으므로 한도를 최대한 낮춰 사용하세요." - "지정된 한도에 도달하면 모바일 데이터 연결 사용이 중지됩니다."\n\n"휴대전화를 기준으로 데이터 사용량이 측정되며 이동통신사에서는 사용량을 다르게 계산할 수 있으므로 한도를 최대한 낮춰 사용하세요." + "지정된 한도에 도달하면 모바일 데이터 연결 사용이 중지됩니다.\n\n태블릿을 기준으로 데이터 사용량이 측정되며 이동통신사에서는 사용량을 다르게 계산할 수 있으므로 한도를 최대한 낮춰 사용하세요." + "지정된 한도에 도달하면 모바일 데이터 연결 사용이 중지됩니다.\n\n휴대전화를 기준으로 데이터 사용량이 측정되며 이동통신사에서는 사용량을 다르게 계산할 수 있으므로 한도를 최대한 낮춰 사용하세요." "백그라운드 데이터 사용을 제한하시겠습니까?" "백그라운드 모바일 데이터를 제한하는 경우 Wi-Fi 네트워크에 연결되지 않으면 일부 앱 및 서비스가 작동하지 않습니다." - "백그라운드 모바일 데이터를 제한하는 경우 Wi-Fi 네트워크에 연결되지 않으면 일부 앱 및 서비스가 작동하지 않습니다."\n\n"이 설정은 태블릿의 모든 사용자에게 영향을 줍니다." - "백그라운드 모바일 데이터를 제한하는 경우 Wi-Fi 네트워크에 연결되지 않으면 일부 앱 및 서비스가 작동하지 않습니다."\n\n"이 설정은 휴대전화의 모든 사용자에게 영향을 줍니다." + "백그라운드 모바일 데이터를 제한하는 경우 Wi-Fi 네트워크에 연결되지 않으면 일부 앱 및 서비스가 작동하지 않습니다.\n\n이 설정은 태블릿의 모든 사용자에게 영향을 줍니다." + "백그라운드 모바일 데이터를 제한하는 경우 Wi-Fi 네트워크에 연결되지 않으면 일부 앱 및 서비스가 작동하지 않습니다.\n\n이 설정은 휴대전화의 모든 사용자에게 영향을 줍니다." "^1""^2"\n"경고" "^1""^2"\n"한도" "삭제된 앱" @@ -1843,8 +1861,8 @@ "사용자" "제한된 프로필" "새 사용자 추가" - "새로운 사용자를 추가로 만들어서 이 기기를 공유할 수 있습니다. 각 사용자는 별도의 공간을 갖게 되며 내 앱, 배경화면 등을 맞춤설정할 수 있습니다. 사용자는 또한 모두에게 영향을 주는 Wi-Fi와 같은 태블릿 설정을 조정할 수 있습니다."\n\n"새로운 사용자를 만든 후에 해당 사용자는 설정 과정을 진행해야 합니다."\n\n"모든 사용자는 다른 사용자들을 대신하여 업데이트된 앱 권한을 승인할 수 있습니다." - "새로운 사용자를 만들면 해당 사용자의 설정 과정을 진행해야 합니다."\n\n"모든 사용자는 다른 사용자들을 대신하여 업데이트된 앱 권한을 승인할 수 있습니다." + "새로운 사용자를 추가로 만들어서 이 기기를 공유할 수 있습니다. 각 사용자는 별도의 공간을 갖게 되며 내 앱, 배경화면 등을 맞춤설정할 수 있습니다. 사용자는 또한 모두에게 영향을 주는 Wi-Fi와 같은 태블릿 설정을 조정할 수 있습니다.\n\n새로운 사용자를 만든 후에 해당 사용자는 설정 과정을 진행해야 합니다.\n\n모든 사용자는 다른 사용자들을 대신하여 업데이트된 앱 권한을 승인할 수 있습니다." + "새로운 사용자를 만들면 해당 사용자의 설정 과정을 진행해야 합니다.\n\n모든 사용자는 다른 사용자들을 대신하여 업데이트된 앱 권한을 승인할 수 있습니다." "지금 사용자를 설정하시겠습니까?" "사용자가 태블릿을 사용하여 자신의 공간을 설정할 수 있는지 확인하세요." "지금 프로필을 설정하시겠습니까?" @@ -1875,6 +1893,9 @@ "이 설정은 휴대전화의 모든 사용자에게 영향을 줍니다." "언어 변경" "글꼴 크기 변경" + "제한사항" + "제한사항 삭제" + "PIN 변경" "알림 표시" "도움말" "콘텐츠용 계정" diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml index 498aa4d9548..288d4e3475b 100755 --- a/res/values-land/dimens.xml +++ b/res/values-land/dimens.xml @@ -22,4 +22,6 @@ 2dip 2dip 2 + + 100dp diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml index 2fde16776fe..9581200d3f9 100644 --- a/res/values-lt/arrays.xml +++ b/res/values-lt/arrays.xml @@ -233,7 +233,8 @@ "Vieta" "Asmeninės" "Susirašinėjimas žinutėmis" - "Įrenginys" + "Medija" + "Įrenginys"
    "apytikslė vietovė" @@ -267,6 +268,17 @@ "leisti garso įrašą" "skaityti iškarpinę" "keisti iškarpinę" + "medijos mygtukai" + "garso sutelktis" + "pagrindinis garsumas" + "balso garsumas" + "skambučio garsumas" + "medijos garsumas" + "signalo garsumas" + "pranešimų garsumas" + "„Bluetooth“ garsumas" + "neužmigdyti" + "stebėti vietovę" "Vietovė" @@ -300,12 +312,33 @@ "Leisti garso įrašą" "Skaityti iškarpinę" "Keisti iškarpinę" + "Medijos mygtukai" + "Garso sutelktis" + "Pagrindinis garsumas" + "Balso garsumas" + "Skambučio garsumas" + "Medijos garsumas" + "Signalo garsumas" + "Pranešimo garsumas" + "„Bluetooth“ garsumas" + "Neužmigdyti" + "Vietovė" "Trumpas" "Vidutinis" "Ilgas" + + "Dalvik" + "ART" + "ART (derinimas)" + + + "Naudoti „Dalvik“" + "Naudoti ART" + "Naudoti ART derinimo versiją" + "Niekada netikrinti" "Tikrinti tik DRM turinį" @@ -367,6 +400,11 @@ "Ekrane (linijos)" "adb shell dumpsys gfxinfo" + + "Išjungti" + "Rodyti perdangos sritis" + "Rodyti priešingą perdangą" + "Standartinis apribojimas" "Nėra fono procesų" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index 70ee336fdfa..a3320df2a16 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -275,8 +275,8 @@ "Praradote duomenų jungiamumą, nes pagrindinį tinklą palikote išjungę tarptinklinį ryšį." "Įjungti" "Leisdami tarptinklinį duomenų ryšį, galite būti apmokestinti nemažais tarptinklinio ryšio mokesčiais!" - "Kai leidžiate tarptinklinį duomenų ryšį, gali būti taikomi dideli tarptinklinio ryšio mokesčiai."\n\n"Šis nustatymas turi įtakos visiems šio planšetinio kompiuterio naudotojams." - "Kai leidžiate tarptinklinį duomenų ryšį, gali būti taikomi dideli tarptinklinio ryšio mokesčiai."\n\n"Šis nustatymas turi įtakos visiems šio telefono naudotojams." + "Kai leidžiate tarptinklinį duomenų ryšį, gali būti taikomi dideli tarptinklinio ryšio mokesčiai.\n\nŠis nustatymas turi įtakos visiems šio planšetinio kompiuterio naudotojams." + "Kai leidžiate tarptinklinį duomenų ryšį, gali būti taikomi dideli tarptinklinio ryšio mokesčiai.\n\nŠis nustatymas turi įtakos visiems šio telefono naudotojams." "Leisti tarptinklinį duomenų ryšį?" "Operatoriaus pasirinkimas" "Pasirinkite tinklo operatorių" @@ -322,8 +322,8 @@ "Reikalauti skaitinio PIN kodo ar slaptažodžio, norint iššifruoti planšetinį kompiuterį kaskart jį įjungus" "Reikalauti skaitinio PIN kodo ar slaptažodžio, norint iššifruoti telefoną kaskart jį įjungus" "Šifruotas" - "Galite užšifruoti paskyras, nustatymus, atsisiųstas programas ir jų duomenis, mediją ir kitus failus. Užšifravę planšetinį kompiuterį turėsite įvesti skaitinį PIN kodą arba slaptažodį, kad iššifruotumėte jį kiekvieną kartą įjungę. Planšetinio kompiuterio iššifruoti negalite, išskyrus atvejus, kai atkuriate gamyklinius duomenis, ištrindami visus turimus duomenis."\n\n"Šifravimas trunka valandą ar daugiau. Turite pradėti darbą naudodami įkrautą akumuliatorių ir laikyti planšetinį kompiuterį prijungtą prie maitinimo tinklo, kol šifravimas bus baigtas. Pertraukus šifravimo procesą bus prarasti kai kurie arba visi duomenys." - "Galite užšifruoti paskyras, nustatymus, atsisiųstas programas ir jų duomenis, mediją ir kitus failus. Užšifravę telefoną turėsite įvesti skaitinį PIN kodą arba slaptažodį, kad iššifruotumėte jį kiekvieną kartą įjungę. Telefono iššifruoti negalite, išskyrus atvejus, atkuriate gamyklinius duomenis, ištrindami visus turimus duomenis."\n\n"Šifravimas trunka valandą ar daugiau. Turite pradėti darbą naudodami įkrautą akumuliatorių ir laikyti telefoną prijungtą prie maitinimo tinklo, kol šifravimas bus baigtas. Pertraukus šifravimo procesą bus prarasti kai kurie arba visi duomenys." + "Galite užšifruoti paskyras, nustatymus, atsisiųstas programas ir jų duomenis, mediją ir kitus failus. Užšifravę planšetinį kompiuterį turėsite įvesti skaitinį PIN kodą arba slaptažodį, kad iššifruotumėte jį kiekvieną kartą įjungę. Planšetinio kompiuterio iššifruoti negalite, išskyrus atvejus, kai atkuriate gamyklinius duomenis, ištrindami visus turimus duomenis.\n\nŠifravimas trunka valandą ar daugiau. Turite pradėti darbą naudodami įkrautą akumuliatorių ir laikyti planšetinį kompiuterį prijungtą prie maitinimo tinklo, kol šifravimas bus baigtas. Pertraukus šifravimo procesą bus prarasti kai kurie arba visi duomenys." + "Galite užšifruoti paskyras, nustatymus, atsisiųstas programas ir jų duomenis, mediją ir kitus failus. Užšifravę telefoną turėsite įvesti skaitinį PIN kodą arba slaptažodį, kad iššifruotumėte jį kiekvieną kartą įjungę. Telefono iššifruoti negalite, išskyrus atvejus, atkuriate gamyklinius duomenis, ištrindami visus turimus duomenis.\n\nŠifravimas trunka valandą ar daugiau. Turite pradėti darbą naudodami įkrautą akumuliatorių ir laikyti telefoną prijungtą prie maitinimo tinklo, kol šifravimas bus baigtas. Pertraukus šifravimo procesą bus prarasti kai kurie arba visi duomenys." "Šifruoti planšetinį kompiuterį" "Šifruoti telefoną" "Įkraukite akumuliatorių ir bandykite dar kartą." @@ -339,8 +339,8 @@ "Bandyti dar kartą po ^1 sek." "Įveskite slaptažodį" "Šifruotė nepavyko" - "Šifravimas buvo pertrauktas ir negali būti užbaigtas. Todėl duomenys planšetiniame kompiuteryje nebepasiekiami. "\n\n" Jei norite vėl naudoti planšetinį kompiuterį, turite iš naujo nustatyti gamyklinius nustatymus. Kai iš naujo nustatę nustatysite planšetinį kompiuterį, galėsite atkurti visus duomenis, kurių atsarginės kopijos buvo sukurtos „Google“ paskyroje." - "Šifravimas buvo pertrauktas ir negali būti užbaigtas. Todėl duomenys telefone nebepasiekiami. "\n\n"Jei norite vėl naudoti telefoną, turite iš naujo nustatyti gamyklinius nustatymus. Kai iš naujo nustatę nustatysite telefoną, galėsite atkurti visus duomenis, kurių atsarginės kopijos buvo sukurtos „Google“ paskyroje." + "Šifravimas buvo pertrauktas ir negali būti užbaigtas. Todėl duomenys planšetiniame kompiuteryje nebepasiekiami. \n\n Jei norite vėl naudoti planšetinį kompiuterį, turite iš naujo nustatyti gamyklinius nustatymus. Kai iš naujo nustatę nustatysite planšetinį kompiuterį, galėsite atkurti visus duomenis, kurių atsarginės kopijos buvo sukurtos „Google“ paskyroje." + "Šifravimas buvo pertrauktas ir negali būti užbaigtas. Todėl duomenys telefone nebepasiekiami. \n\nJei norite vėl naudoti telefoną, turite iš naujo nustatyti gamyklinius nustatymus. Kai iš naujo nustatę nustatysite telefoną, galėsite atkurti visus duomenis, kurių atsarginės kopijos buvo sukurtos „Google“ paskyroje." "Perjungti įvesties metodą" "Pasir. ekrano užrak." "Pasirinkti atsarginį užrakinimą" @@ -514,6 +514,7 @@ "Jungiama" "Prijungta" "Pasiekiama" + "Naudojama" "Pateikties nustatymai" "Atsijungti?" "Tai nutrauks ryšį su:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Išjungta" "Negalima, nes išjungtas ALR" "Android Beam" - "Kai ši funkcija įjungta, galite programos turinį perduoti į kitą ALR palaikantį įrenginį laikydami du įrenginius šalia. Pavyzdžiui, galite perduoti Naršyklės puslapius, „YouTube“ vaizdo įrašus, žmonių kontaktus ir daugiau."\n\n"Tiesiog sudėkite du įrenginius vieną šalia kito (suglaudę galinėmis dalimis) ir palieskite ekraną. Programa nustato, kas bus perduodama." + "Kai ši funkcija įjungta, galite programos turinį perduoti į kitą ALR palaikantį įrenginį laikydami du įrenginius šalia. Pavyzdžiui, galite perduoti Naršyklės puslapius, „YouTube“ vaizdo įrašus, žmonių kontaktus ir daugiau.\n\nTiesiog sudėkite du įrenginius vieną šalia kito (suglaudę galinėmis dalimis) ir palieskite ekraną. Programa nustato, kas bus perduodama." "Tinklo paslaugos aptikimas" "Leisti kitų įrenginių programoms aptikti šio įrenginio programas" "Wi-Fi" @@ -541,7 +542,7 @@ "„Wi-Fi“ nustatymai" "Wi-Fi" "Nustatyti ir valdyti bevielius prieigos taškus" - "Pasirinkti „Wi-Fi“" + "Rinktis „Wi-Fi“" "„Wi-Fi“ įjungiama…" "„Wi-Fi“ išjungiama…" "Klaida" @@ -620,7 +621,7 @@ "Saugoma „%1$s“" ", saugoma „%1$s“" "Nėra" - "Siekiant tiksliau nustatyti vietą ir dėl kitų priežasčių, „%1$s“ prašo leidimo nuskaityti tinklus, net kai „Wi-Fi“ yra išjungtas."\n\n"Ar norite suteikti leidimą nuskaityti visoms to prašančioms programoms?" + "Siekiant tiksliau nustatyti vietą ir dėl kitų priežasčių, „%1$s“ prašo leidimo nuskaityti tinklus, net kai „Wi-Fi“ yra išjungtas.\n\nAr norite suteikti leidimą nuskaityti visoms to prašančioms programoms?" "Leisti" "Atmesti" "Prijungti" @@ -632,8 +633,8 @@ "Atšaukti" "Vis tiek praleisti" "Nepraleisti" - "ĮSPĖJIMAS: gali būti taikomi papildomi operatoriaus duomenų mokesčiai."\n\n"Nustatant planšetinį kompiuterį gali reikėti daug naudoti tinklą." - "ĮSPĖJIMAS: gali būti taikomi papildomi operatoriaus duomenų mokesčiai."\n\n"Nustatant telefoną gali reikėti daug naudoti tinklą." + "ĮSPĖJIMAS: gali būti taikomi papildomi operatoriaus duomenų mokesčiai.\n\nNustatant planšetinį kompiuterį gali reikėti daug naudoti tinklą." + "ĮSPĖJIMAS: gali būti taikomi papildomi operatoriaus duomenų mokesčiai.\n\nNustatant telefoną gali reikėti daug naudoti tinklą." "ĮSPĖJIMAS: planšetinis kompiuteris galės patvirtinti, kad naudojama naujausia programinė įranga, tik kai bus pasiekiamas interneto ryšys." "ĮSPĖJIMAS: telefonas galės patvirtinti, kad naudojama naujausia programinė įranga, tik kai bus pasiekiamas interneto ryšys." "Planšetiniam kompiuteriui nepavyko prisijungti prie šio „Wi-Fi“ tinklo." @@ -773,9 +774,9 @@ "SIM kortelės PIN kodas" "Netinkamas PIN kodas" "PIN kodai neatitinka" - "Nepavyksta pakeisti PIN kodo."\n"Tikriausiai netinkamas PIN kodas." + "Nepavyksta pakeisti PIN kodo.\nTikriausiai netinkamas PIN kodas." "SIM kortelės PIN kodas sėkmingai pakeistas" - "Neįmanoma pakeisti SIM kortelės užrakto būsenos."\n"Tikriausiai netinkamas PIN kodas." + "Neįmanoma pakeisti SIM kortelės užrakto būsenos.\nTikriausiai netinkamas PIN kodas." "Gerai" "Atšaukti" "Planšetinio kompiuterio būsena" @@ -918,9 +919,9 @@ "Gamyklos duomenų nustatymas iš naujo" "Ištrinami visi planšetinio kompiuterio duomenys" "Ištrina visus telefono duomenis" - "Taip bus ištrinti visi duomenys iš planšetinio kompiuterio ""vidinės atminties"", įskaitant:"\n\n
  • "„Google“ paskyrą"
  • \n
  • "Sistemos ir programų duomenis bei nustatymus"
  • \n
  • "Atsisiųstas programas"
  • - "Taip bus ištrinti visi duomenys iš telefono ""vidinės atminties"", įskaitant:"\n\n
  • "„Google“ paskyrą"
  • \n
  • "Sistemos ir programų duomenis bei nustatymus"
  • \n
  • "Atsisiųstas programas"
  • - \n\n"Šiuo metu esate prisijungę prie šių paskyrų:"\n + "Taip bus ištrinti visi duomenys iš planšetinio kompiuterio ""vidinės atminties"", įskaitant:\n\n"
  • "„Google“ paskyrą"
  • \n
  • "Sistemos ir programų duomenis bei nustatymus"
  • \n
  • "Atsisiųstas programas"
  • + "Taip bus ištrinti visi duomenys iš telefono ""vidinės atminties"", įskaitant:\n\n"
  • "„Google“ paskyrą"
  • \n
  • "Sistemos ir programų duomenis bei nustatymus"
  • \n
  • "Atsisiųstas programas"
  • + \n\n"Šiuo metu esate prisijungę prie šių paskyrų:\n"
  • "Muzika"
  • \n
  • "Nuotraukos"
  • \n
  • "Kiti naudotojo duomenys"
  • \n\n"Norint išvalyti muzikos failus, paveikslėlius bei kitus naudotojo duomenis, reikia ištrinti ""USB atmintį""." \n\n"Norint išvalyti muzikos failus, paveikslėlius ir kitus naudotojo duomenis, reikia ištrinti ""SD kortelę""." @@ -1105,7 +1106,7 @@ "Rodyti padėtus procesus" "Iš naujo nustat. nuostat." "Iš naujo nust. nuostat.?" - "Bus iš naujo nustatytos visos toliau nurodytų elementų nuostatos:"\n\n" "
  • "Neleidžiamos programos"
  • \n" "
  • "Neleidžiami programų pranešimai"
  • \n" "
  • "Numatytosios veiksmų programos"
  • \n" "
  • "Programų fono duomenų apribojimai"
  • \n\n" Nebus prarasti jokie programų duomenys."
    + "Bus iš naujo nustatytos visos toliau nurodytų elementų nuostatos:\n\n "
  • "Neleidžiamos programos"
  • \n" "
  • "Neleidžiami programų pranešimai"
  • \n" "
  • "Numatytosios veiksmų programos"
  • \n" "
  • "Programų fono duomenų apribojimai"
  • \n\n" Nebus prarasti jokie programų duomenys."
    "Iš naujo nustat. program." "Valdyti vietą" "Filtruoti" @@ -1240,9 +1241,7 @@ "Kad perj., pasp. vald. ir tarpo kl." "Numatytasis" "Klaviatūros išdėstymai" - "Naudotojo žodynas" - "Asmeninis žodynas" - "Asmeniniai žodynai" + "Asmeninis žodynas" "Pridėti" "Pridėti prie žodyno" @@ -1303,6 +1302,11 @@ "Įtraukti parinktį į įjungimo meniu, kad būtų galima pranešti apie triktį" "Veikti" "Kraunant ekranas niekada neveiks miego režimu" + "Įgalinti „Bluetooth“ HCI šnipinėjimo žurnalą" + "Užfiksuoti visus faile esančius „Bluetooth“ HCI paketus" + "Pasirinkti vykdymo laiką" + "Pasirinkti vykdymo laiką" + "Įkelti iš naujo, kad vykdymo laikas būtų pakeistas iš %1$s į %2$s?" "Leisti imituoti vietas" "Leisti imituoti vietas" "Leisti USB perkrovimą?" @@ -1315,11 +1319,13 @@ "Apsaugoti USB atmintį" "Programos turi prašyti leidimo skaityti USB atmintį" "Apsaugoti USB atmintį?" - "Jei USB atmintis yra apsaugota, programos turi prašyti leidimo skaityti išorinėje atmintinėje esančius duomenis."\n\n"Kai kurios programos gali neveikti, kol jų neatnaujins kūrėjai." + "Jei USB atmintis yra apsaugota, programos turi prašyti leidimo skaityti išorinėje atmintinėje esančius duomenis.\n\nKai kurios programos gali neveikti, kol jų neatnaujins kūrėjai." "Apsaugoti SD kortelę" "Programos turi prašyti leidimo skaityti SD kortelę" "Apsaugoti SD kortelę?" - "Jei SD kortelė yra apsaugota, programos turi prašyti leidimo skaityti išorinėje atmintinėje esančius duomenis."\n\n"Kai kurios programos gali neveikti, kol jų neatnaujins kūrėjai." + "Jei SD kortelė yra apsaugota, programos turi prašyti leidimo skaityti išorinėje atmintinėje esančius duomenis.\n\nKai kurios programos gali neveikti, kol jų neatnaujins kūrėjai." + "Vietinis terminalas" + "Įgal. terminalo progr., siūlančią prieigą prie viet. apvalkalo" "Pasirinkti programėlę" "Pasirinkti valdiklį" "Sukurti valdiklį ir leisti prieigą?" @@ -1340,11 +1346,11 @@ "Paslaugos" "Sistema" "Didinimo gestai" - "Kai ši funkcija įjungta, galite artinti ir tolinti tris kartus palietę ekraną."\n\n"Kai priartinate, galite:"\n
    • "Iš lėto apžvelgti: mažiausiai dviem pirštais vilkite ekranu."
    • \n
    • "Koreguoti priartinimo lygį: suimkite mažiausiai dviem pirštais arba išskėskite juos."
    \n\n"Be to, galite laikinai padidinti tai, kas po pirštu, tris kartus palietę ir laikydami. Esant šiai padidinto vaizdo būsenai galite vilkti pirštu, jei norite naršyti skirtingas ekrano dalis. Pakelkite pirštą, kad grįžtumėte į ankstesnę būseną."\n\n"Pastaba: palietimo tris kartus, kad būtų padidinta, funkcija veikia visur, išskyrus klaviatūrą ir naršymo juostą."
    + "Kai ši funkcija įjungta, galite artinti ir tolinti tris kartus palietę ekraną.\n\nKai priartinate, galite:\n"
    • "Iš lėto apžvelgti: mažiausiai dviem pirštais vilkite ekranu."
    • \n
    • "Koreguoti priartinimo lygį: suimkite mažiausiai dviem pirštais arba išskėskite juos."
    \n\n"Be to, galite laikinai padidinti tai, kas po pirštu, tris kartus palietę ir laikydami. Esant šiai padidinto vaizdo būsenai galite vilkti pirštu, jei norite naršyti skirtingas ekrano dalis. Pakelkite pirštą, kad grįžtumėte į ankstesnę būseną.\n\nPastaba: palietimo tris kartus, kad būtų padidinta, funkcija veikia visur, išskyrus klaviatūrą ir naršymo juostą."
    "Spart. pritaikymo neįgal. įjungimas" "Įjungta" "Išjungta" - "Kai ši funkcija įjungta, galite greitai įgalinti pritaikymo neįgaliesiems funkcijas šiais dviem veiksmais:"\n\n"1 veiksmas: paspauskite ir laikykite paspaudę maitinimo mygtuką, kol išgirsite garsą ar pajusite vibraciją."\n\n"2 veiksmas: palieskite ir laikykite palietę dviem pirštais, kol išgirsite patvirtinamąjį garso pranešimą"\n\n"Jei įrenginį naudoja keli naudotojai, užrakinimo ekrane įjungus šią funkciją laikinai bus įgalintas pritaikymas neįgaliesiems, kol įrenginys bus atrakintas." + "Kai ši funkcija įjungta, galite greitai įgalinti pritaikymo neįgaliesiems funkcijas šiais dviem veiksmais:\n\n1 veiksmas: paspauskite ir laikykite paspaudę maitinimo mygtuką, kol išgirsite garsą ar pajusite vibraciją.\n\n2 veiksmas: palieskite ir laikykite palietę dviem pirštais, kol išgirsite patvirtinamąjį garso pranešimą\n\nJei įrenginį naudoja keli naudotojai, užrakinimo ekrane įjungus šią funkciją laikinai bus įgalintas pritaikymas neįgaliesiems, kol įrenginys bus atrakintas." "Didelis tekstas" "Ekrano didinimas" "Automat. atnaujinti ekrano didinimą" @@ -1366,6 +1372,16 @@ "„TalkBack“ teikia atsiliepimus žodžiu, kad padėtų akliems ir sutrikusio regėjimo naudotojams. Ar norite nemokamai įdiegti šią funkciją iš „Android“ prekyvietės?" "Nepateikta jokių aprašų." "Nustatymai" + "Spausdinimas" + "Spausdinimo nustatymai" + "Paslaugos" + "Naudoti „%1$s“?" + "„%1$s“ galės gauti jūsų spausdinamus dokumentus. Šiuose dokumentuose gali būti delikačių duomenų." + "Nėra įdiegta jokių paslaugų" + "Nustatymai" + "Pridėti spausdintuvų" + "Įjungta" + "Išjungta" "Baterija" "Kas naudojo akumuliatorių" "Akum. naudoj. duom. nepasiek." @@ -1405,8 +1421,10 @@ "„Wi-Fi“ vykdoma" "Planšetinis kompiuteris" "Telefonas" - "Duomenys išsiųsti" - "Gauti duomenys" + "Mob. tinklo duomenys išsiųsti" + "Mobiliojo tinklo duomenys gauti" + "„Wi‑Fi“ tinklo duomenys išsiųsti" + "„Wi‑Fi“ tinklo duomenys gauti" "Garso įrašas" "Vaizdo įrašas" "Laikas, kai buvo įjungta" @@ -1460,6 +1478,7 @@ "Garso aukštis" "Daro poveikį sakomo teksto tonui" "Kalba" + "Kalba nepasirinkta" "Nustato konkrečiai kalbai būdingą sakomo teksto balsą" "Klausytis pavyzdžio" "Paleisti trumpą kalbos sintezės demonstraciją" @@ -1594,7 +1613,7 @@ "EAP nepalaikoma." "Negalite konfigūruoti EAP „Wi-Fi“ ryšio, kai vykdoma sąranka. Po sąrankos tai galėsite padaryti skiltyje „Nustatymai“ > „Belaidis ryšys ir tinklai“." "Prisijungimas gali užtrukti kelias minutes…" - "Palieskite ""Kitas"", kad tęstumėte sąranką."\n\n"Palieskite ""Atgal"", kad prisijungtumėte prie kito „Wi-Fi“ tinklo." + "Palieskite ""Kitas"", kad tęstumėte sąranką.\n\nPalieskite ""Atgal"", kad prisijungtumėte prie kito „Wi-Fi“ tinklo." "Sinchronizavimas įgalintas" "Sinchronizavimas neleidžiamas" "Sinchronizavimo klaida." @@ -1622,7 +1641,7 @@ "Gmail" "Kalendorius" "Kontaktai" - "Sveiki! Tai – „Google“ sinchronizavimas!"" "\n"Tai yra „Google“ požiūris į duomenų sinchronizavimą, kad būtų galima pasiekti kontaktus, susitikimus ir dar daugiau, nesvarbu, kur būtumėte." + "Sveiki! Tai – „Google“ sinchronizavimas!"" \nTai yra „Google“ požiūris į duomenų sinchronizavimą, kad būtų galima pasiekti kontaktus, susitikimus ir dar daugiau, nesvarbu, kur būtumėte." "Programos sinchronizavimo nustatymai" "Duomenys ir sinchronizavimas" "Keisti slaptažodį" @@ -1676,8 +1695,7 @@ "„Flash“ rodiniai languose atvaizduojant su GPU" "Rod. apar. įr. sl. nauj." "Kai atsin. apar. įr. sl., rod. juos blyks. ž. sp." - "Rodyti graf. proc. virš." - "Nuo ger. iki blog.: mėl., žalia, šv. raud., raud." + "Derinti GPU perdangą" "Neleisti HW perdangų" "Komponuojant ekraną visada naudoti GPU" "Įgalinti „OpenGL“ pėdsak." @@ -1738,11 +1756,11 @@ "Nel. fon. duom. mob. tinkl. Ne mob. tinkl. bus naud., jei pas." "Kad aprib. šios progr. fon. duom., pirm. nustat. mob. duom. apr." "Apriboti foninius duomenis?" - "Dėl šios funkcijos, kai pasiekiami tik mobilieji tinklai, gali neveikti programos, kurių veikimas priklauso nuo foninių duomenų."\n\n"Programos nustatymuose galite rasti tinkamesnių duomenų naudojimo valdiklių." + "Dėl šios funkcijos, kai pasiekiami tik mobilieji tinklai, gali neveikti programos, kurių veikimas priklauso nuo foninių duomenų.\n\nProgramos nustatymuose galite rasti tinkamesnių duomenų naudojimo valdiklių." "Apriboti foninius duomenis galima tik nustačius mobiliojo ryšio duomenų apribojimą." "Įjungti autom. sinchronizavimą?" - "Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į planšetinį kompiuterį."\n\n"Iš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi planšetiniame kompiuteryje atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje."\n\n"Jei norite pasirinkti, kokią kiekvienos paskyros informaciją sinchronizuoti, eikite į „Nustatymai“ > „Paskyros“." - "Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į telefoną."\n\n"Iš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi telefone atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje."\n\n"Jei norite pasirinkti, kokią kiekvienos paskyros informaciją sinchronizuoti, eikite į „Nustatymai“ > „Paskyros“." + "Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į planšetinį kompiuterį.\n\nIš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi planšetiniame kompiuteryje atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje.\n\nJei norite pasirinkti, kokią kiekvienos paskyros informaciją sinchronizuoti, eikite į „Nustatymai“ > „Paskyros“." + "Bet kokie paskyrų pakeitimai, kuriuos atliekate žiniatinklyje, bus automatiškai nukopijuoti į telefoną.\n\nIš kai kurių paskyrų į žiniatinklį gali būti automatiškai kopijuojami visi telefone atlikti pakeitimai. Taip pat daroma ir „Google“ paskyroje.\n\nJei norite pasirinkti, kokią kiekvienos paskyros informaciją sinchronizuoti, eikite į „Nustatymai“ > „Paskyros“." "Išjungti autom. sinchronizavimą?" "Tai atlikus bus saikingai naudojami duomenys ir akumuliatoriaus energija, tačiau, jei norėsite surinkti naujausią informaciją, turėsite sinchronizuoti kiekvieną paskyrą rankiniu būdu. Be to, negausite pranešimų, kai atsiras naujinių." "Naudojimo ciklo nustatymo iš naujo data" @@ -1751,12 +1769,12 @@ "Nustatyti duomenų naudojimo įspėjimą" "Nustatyti duomenų naudojimo apribojimą" "Duomenų naudojimo ribojimas" - "Mobiliųjų duomenų ryšys bus neleidžiamas, kai bus pasiektas nurodytas apribojimas."\n\n"Kadangi sunaudoti duomenys skaičiuojami planšetiniu kompiuteriu, o operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę naudoti mažesnį apribojimą." - "Mobiliųjų duomenų ryšys bus neleidžiamas, kai bus pasiektas nurodytas apribojimas."\n\n"Kadangi sunaudoti duomenys skaičiuojami telefonu, o operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę naudoti mažesnį apribojimą." + "Mobiliųjų duomenų ryšys bus neleidžiamas, kai bus pasiektas nurodytas apribojimas.\n\nKadangi sunaudoti duomenys skaičiuojami planšetiniu kompiuteriu, o operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę naudoti mažesnį apribojimą." + "Mobiliųjų duomenų ryšys bus neleidžiamas, kai bus pasiektas nurodytas apribojimas.\n\nKadangi sunaudoti duomenys skaičiuojami telefonu, o operatorius gali apskaičiuoti kitaip, apsvarstykite galimybę naudoti mažesnį apribojimą." "Apriboti foninius duomenis?" "Jei apribosite mobiliojo ryšio fono duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo." - "Jei apribosite mobiliojo ryšio fono duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo."\n\n"Šis nustatymas taikomas visiems šio planšetinio kompiuterio naudotojams." - "Jei apribosite mobiliojo ryšio fono duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo."\n\n"Šis nustatymas taikomas visiems šio telefono naudotojams." + "Jei apribosite mobiliojo ryšio fono duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio planšetinio kompiuterio naudotojams." + "Jei apribosite mobiliojo ryšio fono duomenis, kai kurios programos ir paslaugos neveiks, nebent prisijungsite prie „Wi-Fi“ tinklo.\n\nŠis nustatymas taikomas visiems šio telefono naudotojams." "^1"" ""^2"\n"įspėjimas" "^1""^2"\n"apribojimas" "Pašalintos programos" @@ -1843,8 +1861,8 @@ "Naudotojas" "Ribotas profilis" "Pridėti naują naudotoją" - "Galite bendrinti šį įrenginį su kitais žmonėmis sukurdami papildomų naudotojų. Kiekvienam naudotojui suteikiama atskira vieta, kurią jie gali tinkinti savo programomis, ekrano fonu ir pan. Be to, naudotojai gali koreguoti planšetinio kompiuterio nustatymus, pvz., „Wi-Fi“, kurie turi įtakos visiems."\n\n"Sukūrus naują naudotoją, tas asmuo turi įvykdyti sąrankos procesą."\n\n"Bet kuris naudotojas gali priimti atnaujintų programų leidimus visų kitų naudotojų vardu." - "Sukūrus naują naudotoją, tas asmuo turi įvykdyti sąrankos procesą."\n\n"Bet kuris naudotojas gali priimti atnaujintų programų leidimus visų kitų naudotojų vardu." + "Galite bendrinti šį įrenginį su kitais žmonėmis sukurdami papildomų naudotojų. Kiekvienam naudotojui suteikiama atskira vieta, kurią jie gali tinkinti savo programomis, ekrano fonu ir pan. Be to, naudotojai gali koreguoti planšetinio kompiuterio nustatymus, pvz., „Wi-Fi“, kurie turi įtakos visiems.\n\nSukūrus naują naudotoją, tas asmuo turi įvykdyti sąrankos procesą.\n\nBet kuris naudotojas gali priimti atnaujintų programų leidimus visų kitų naudotojų vardu." + "Sukūrus naują naudotoją, tas asmuo turi įvykdyti sąrankos procesą.\n\nBet kuris naudotojas gali priimti atnaujintų programų leidimus visų kitų naudotojų vardu." "Nustatyti naudotoją dabar?" "Įsitikinkite, kad asmuo gali naudoti planšetinį kompiuterį ir nustatyti savo vietą" "Nustatyti profilį dabar?" @@ -1875,6 +1893,9 @@ "Šis nustatymas turi įtakos visiems šio telefono naudotojams." "Keisti kalbą" "Keisti šrifto dydį" + "Apribojimai" + "Pašalinti apribojimus" + "Keisti PIN kodą" "Rodyti pranešimus" "Pagalba" "Turiniui skirta paskyra" diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml index 444871eff50..97bf2b8cbed 100644 --- a/res/values-lv/arrays.xml +++ b/res/values-lv/arrays.xml @@ -233,7 +233,8 @@ "Atrašanās vieta" "Privāti" "Ziņojumapmaiņa" - "Ierīce" + "Multivide" + "Ierīce"
    "aptuvena atrašanās vieta" @@ -267,6 +268,17 @@ "atskaņot audio" "lasīt starpliktuvi" "modificēt starpliktuvi" + "multivides pogas" + "audio uzsvars" + "galvenais skaļums" + "balss skaļums" + "zvana skaļums" + "multivides skaļums" + "signāla skaļums" + "paziņojumu skaļums" + "Bluetooth apjoms" + "neļaut pāriet miega rež." + "pārraudzīt atrašanās vietu" "Atrašanās vieta" @@ -300,12 +312,33 @@ "Atskaņot audio" "Lasīt starpliktuvi" "Modificēt starpliktuvi" + "Multivides pogas" + "Audio uzsvars" + "Galvenais skaļums" + "Balss skaļums" + "Zvana skaļums" + "Multivides skaļums" + "Signāla skaļums" + "Paziņojumu skaļums" + "Bluetooth apjoms" + "Neļaut pāriet miega rež." + "Atrašanās vieta" "Īss" "Vidējs" "Ilgs" + + "Dalvik" + "ART" + "ART (atkļūdošana)" + + + "Izmantot Dalvik" + "Izmantot ART" + "Izmantot ART atkļūdošanas versiju" + "Nekad nepārbaudīt" "Pārbaudīt tikai DRM saturu" @@ -367,6 +400,11 @@ "Ekrānā kā līnijas" "Komandā “adb shell dumpsys gfxinfo”" + + "Izslēgta" + "Rādīt apgab., kur pārsn. kapacitāte" + "Rādīt kapac. pārsnieguma skaitītāju" + "Standarta ierobežojums" "Nav fona procesu" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 4dc054da64d..600aa4a862d 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -275,8 +275,8 @@ "Datu savienojamība ir zaudēta, jo mājas tīkls ar datu viesabonēšanu ir izslēgts." "Ieslēgt" "Atļaujot datu viesabonēšanu, var rasties ievērojamas viesabonēšanas izmaksas." - "Atļaujot datu viesabonēšanu, var rasties ievērojamas viesabonēšanas izmaksas."\n\n"Šis iestatījums ietekmē visus planšetdatora lietotājus." - "Atļaujot datu viesabonēšanu, var rasties ievērojamas viesabonēšanas izmaksas."\n\n"Šis iestatījums ietekmē visus tālruņa lietotājus." + "Atļaujot datu viesabonēšanu, var rasties ievērojamas viesabonēšanas izmaksas.\n\nŠis iestatījums ietekmē visus planšetdatora lietotājus." + "Atļaujot datu viesabonēšanu, var rasties ievērojamas viesabonēšanas izmaksas.\n\nŠis iestatījums ietekmē visus tālruņa lietotājus." "Vai atļaut datu viesabonēšanu?" "Operatora atlase" "Izvēlēties tīkla operatoru" @@ -322,8 +322,8 @@ "Ieslēdzot planšetdatoru, ikreiz tiek pieprasīts skaitlisks PIN kods vai parole šifra noņemšanai." "Ieslēdzot tālruni, ikreiz tiek pieprasīts skaitlisks PIN kods vai parole šifra noņemšanai." "Šifrēts" - "Varat šifrēt kontus, iestatījumus, lejupielādētās lietotnes un tajās esošos datus, multivides un cita veida failus. Ja šifrēsiet planšetdatoru, ikreiz pēc tā ieslēgšanas būs jāievada ciparu PIN vai parole, lai planšetdatoru atšifrētu. Planšetdatora šifrējumu var noņemt, tikai veicot datu atiestatīšanu uz rūpnīcas iestatījumiem. To darot, tiek dzēsti arī visi dati."\n\n"Šifrēšana ilgst stundu vai ilgāk. Akumulatoram ir jābūt pilnībā uzlādētam un planšetdatoram ir jābūt pievienotam elektrotīklam, līdz šifrēšana tiek pabeigta. Ja šifrēšanas process tiks pārtraukts, tiks zaudēti visi dati vai kāda to daļa." - "Varat šifrēt kontus, iestatījumus, lejupielādētās lietotnes un tajās esošos datus, multivides un cita veida failus. Ja šifrēsiet tālruni, ikreiz pēc tā ieslēgšanas būs jāievada ciparu PIN vai parole, lai tālruni atšifrētu. Tālruņa šifrējumu var noņemt, tikai veicot datu atiestatīšanu uz rūpnīcas iestatījumiem. To darot, tiek dzēsti arī visi dati."\n\n"Šifrēšana ilgst stundu vai ilgāk. Akumulatoram ir jābūt pilnībā uzlādētam un tālrunim ir jābūt pievienotam elektrotīklam, līdz šifrēšana tiek pabeigta. Ja šifrēšanas process tiks pārtraukts, tiks zaudēti visi dati vai kāda to daļa." + "Varat šifrēt kontus, iestatījumus, lejupielādētās lietotnes un tajās esošos datus, multivides un cita veida failus. Ja šifrēsiet planšetdatoru, ikreiz pēc tā ieslēgšanas būs jāievada ciparu PIN vai parole, lai planšetdatoru atšifrētu. Planšetdatora šifrējumu var noņemt, tikai veicot datu atiestatīšanu uz rūpnīcas iestatījumiem. To darot, tiek dzēsti arī visi dati.\n\nŠifrēšana ilgst stundu vai ilgāk. Akumulatoram ir jābūt pilnībā uzlādētam un planšetdatoram ir jābūt pievienotam elektrotīklam, līdz šifrēšana tiek pabeigta. Ja šifrēšanas process tiks pārtraukts, tiks zaudēti visi dati vai kāda to daļa." + "Varat šifrēt kontus, iestatījumus, lejupielādētās lietotnes un tajās esošos datus, multivides un cita veida failus. Ja šifrēsiet tālruni, ikreiz pēc tā ieslēgšanas būs jāievada ciparu PIN vai parole, lai tālruni atšifrētu. Tālruņa šifrējumu var noņemt, tikai veicot datu atiestatīšanu uz rūpnīcas iestatījumiem. To darot, tiek dzēsti arī visi dati.\n\nŠifrēšana ilgst stundu vai ilgāk. Akumulatoram ir jābūt pilnībā uzlādētam un tālrunim ir jābūt pievienotam elektrotīklam, līdz šifrēšana tiek pabeigta. Ja šifrēšanas process tiks pārtraukts, tiks zaudēti visi dati vai kāda to daļa." "Šifrēt planšetdatoru" "Šifrēt tālruni" "Uzlādējiet akumulatoru un mēģiniet vēlreiz." @@ -339,8 +339,8 @@ "Mēģiniet vēlreiz pēc ^1 sekundēm." "Ierakstiet paroli" "Šifrēšana neizdevās." - "Šifrēšana tika pārtraukta, un to nevar pabeigt. Planšetdatora dati vairs nav pieejami."\n\n"Lai atsāktu lietot planšetdatoru, ir jāveic rūpnīcas iestatījumu atiestatīšana. Kad pēc atiestatīšanas esat pabeidzis planšetdatora iestatīšanu, varat atjaunot visus datus, kas tika dublēti jūsu Google kontā." - "Šifrēšana tika pārtraukta, un to nevar pabeigt. Tālruņa dati vairs nav pieejami."\n\n"Lai atsāktu lietot tālruni, ir jāveic rūpnīcas iestatījumu atiestatīšana. Kad pēc atiestatīšanas esat pabeidzis tālruņa iestatīšanu, varat atjaunot visus datus, kas tika dublēti jūsu Google kontā." + "Šifrēšana tika pārtraukta, un to nevar pabeigt. Planšetdatora dati vairs nav pieejami.\n\nLai atsāktu lietot planšetdatoru, ir jāveic rūpnīcas iestatījumu atiestatīšana. Kad pēc atiestatīšanas esat pabeidzis planšetdatora iestatīšanu, varat atjaunot visus datus, kas tika dublēti jūsu Google kontā." + "Šifrēšana tika pārtraukta, un to nevar pabeigt. Tālruņa dati vairs nav pieejami.\n\nLai atsāktu lietot tālruni, ir jāveic rūpnīcas iestatījumu atiestatīšana. Kad pēc atiestatīšanas esat pabeidzis tālruņa iestatīšanu, varat atjaunot visus datus, kas tika dublēti jūsu Google kontā." "Pārslēgt ievades metodi" "Ekrāna bloķēš. izvēle" "Rezerves bloķ. izvēle" @@ -514,6 +514,7 @@ "Notiek savienojuma izveide." "Pievienotas" "Pieejamas" + "Tiek lietota" "Displeja iestatījumi" "Vai pārtraukt savienojumu?" "Tiks pārtraukts savienojums ar:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Izslēgta" "Nav pieejams, jo NFC ir izslēgti." "Android Beam" - "Ja šī funkcija ir ieslēgta, varat pārvietot lietotnes saturu uz citu ierīci, kas atbalsta NFC, novietojot ierīces blakus vienu otrai. Piemēram, varat pārvietot pārlūkprogrammas lapas, YouTube videoklipus, kontaktpersonas lietotnē Personas un citu saturu."\n\n"Vienkārši novietojiet ierīces blakus (parasti saskaroties to aizmugures daļai) un pieskarieties savam ekrānam. Lietotne noteiks pārvietojamo informāciju." + "Ja šī funkcija ir ieslēgta, varat pārvietot lietotnes saturu uz citu ierīci, kas atbalsta NFC, novietojot ierīces blakus vienu otrai. Piemēram, varat pārvietot pārlūkprogrammas lapas, YouTube videoklipus, kontaktpersonas lietotnē Personas un citu saturu.\n\nVienkārši novietojiet ierīces blakus (parasti saskaroties to aizmugures daļai) un pieskarieties savam ekrānam. Lietotne noteiks pārvietojamo informāciju." "Tīkla pakalpojuma atrašana" "Atļaut citās ierīcēs esošām lietotnēm atrast šajā ierīcē esošās lietotnes" "Wi-Fi" @@ -620,7 +621,7 @@ "Nodrošināts ar %1$s" ", nodrošināts ar %1$s" "Nav" - "Lai uzlabotu atrašanās vietu noteikšanas precizitāti, kā arī citas funkcijas, lietotnē %1$s tiek pieprasīts ieslēgt tīkla skenēšanu, pat ja Wi-Fi savienojums ir izslēgts."\n\n"Vai atļaut šo darbību visām lietotnēm, kurās tiek pieprasīta skenēšana?" + "Lai uzlabotu atrašanās vietu noteikšanas precizitāti, kā arī citas funkcijas, lietotnē %1$s tiek pieprasīts ieslēgt tīkla skenēšanu, pat ja Wi-Fi savienojums ir izslēgts.\n\nVai atļaut šo darbību visām lietotnēm, kurās tiek pieprasīta skenēšana?" "Atļaut" "Noraidīt" "Izveidot savienojumu" @@ -632,8 +633,8 @@ "Atcelt" "Tik un tā izlaist" "Neizlaist" - "BRĪDINĀJUMS! Mobilo sakaru operators var piemērot papildu maksu par datu pārraidi."\n\n"Iestatot planšetdatoru, var ievērojami palielināties tīkla darbības apjoms." - "BRĪDINĀJUMS! Mobilo sakaru operators var piemērot papildu maksu par datu pārraidi."\n\n"Iestatot tālruni, var ievērojami palielināties tīkla darbības apjoms." + "BRĪDINĀJUMS! Mobilo sakaru operators var piemērot papildu maksu par datu pārraidi.\n\nIestatot planšetdatoru, var ievērojami palielināties tīkla darbības apjoms." + "BRĪDINĀJUMS! Mobilo sakaru operators var piemērot papildu maksu par datu pārraidi.\n\nIestatot tālruni, var ievērojami palielināties tīkla darbības apjoms." "BRĪDINĀJUMS!Kamēr nebūs izveidots savienojums ar internetu, planšetdators nevarēs apstiprināt, ka jūsu programmatūra ir atjaunināta." "BRĪDINĀJUMS! Kamēr nebūs izveidots savienojums ar internetu, tālrunis nevarēs apstiprināt, ka jūsu programmatūra ir atjaunināta." "Planšetdatorā nevarēja izveidot savienojumu ar Wi-Fi tīklu." @@ -773,9 +774,9 @@ "SIM PIN kods" "Nepareizs PIN kods" "PIN kodi ir atšķirīgi" - "Nevar mainīt PIN kodu."\n"Iespējams, ka PIN kods nav pareizs." + "Nevar mainīt PIN kodu.\nIespējams, ka PIN kods nav pareizs." "SIM PIN ir veiksmīgi nomainīts" - "Nevar mainīt SIM kartes bloķēšanas stāvokli."\n"Iespējams, ka ievadījāt nepareizu PIN kodu." + "Nevar mainīt SIM kartes bloķēšanas stāvokli.\nIespējams, ka ievadījāt nepareizu PIN kodu." "Labi" "Atcelt" "Planšetdatora statuss" @@ -918,9 +919,9 @@ "Rūpnīcas datu atiestatīšana" "Dzēš visus datus planšetdatorā" "Dzēst visus tālrunī saglabātos datus" - "Tādējādi tiks izdzēsti visi planšetdatora ""iekšējā atmiņā"" esošie dati, tostarp:"\n\n
  • "Google konta dati;"
  • \n
  • "sistēmas un lietotņu dati un iestatījumi;"
  • \n
  • "lejupielādētās lietotnes."
  • - "Tiks dzēsti visi tālruņa ""iekšējā atmiņā"" esošie dati, tostarp:"\n\n
  • "Google konta dati;"
  • \n
  • "sistēmas un lietotņu dati un iestatījumi;"
  • \n
  • "lejupielādētās lietotnes."
  • - \n\n"Pašlaik esat pierakstījies šādos kontos:"\n + "Tādējādi tiks izdzēsti visi planšetdatora ""iekšējā atmiņā"" esošie dati, tostarp:\n\n"
  • "Google konta dati;"
  • \n
  • "sistēmas un lietotņu dati un iestatījumi;"
  • \n
  • "lejupielādētās lietotnes."
  • + "Tiks dzēsti visi tālruņa ""iekšējā atmiņā"" esošie dati, tostarp:\n\n"
  • "Google konta dati;"
  • \n
  • "sistēmas un lietotņu dati un iestatījumi;"
  • \n
  • "lejupielādētās lietotnes."
  • + \n\n"Pašlaik esat pierakstījies šādos kontos:\n"
  • "Mūzika"
  • \n
  • "Fotoattēli"
  • \n
  • "Citi lietotāja dati"
  • \n\n"Lai dzēstu mūziku, attēlus un citus lietotāja datus, ir jāizdzēš ""USB atmiņas"" saturs." \n\n"Lai dzēstu mūziku, attēlus un citus lietotāja datus, ir jādzēš ""SD kartes"" saturs." @@ -1105,7 +1106,7 @@ "Rādīt kešatmiņā iev. pr." "Atiest. lietotnes prefer." "Vai atiest. liet. pref.?" - "Tādējādi tiks atiestatītas visas preferences saistībā ar:"\n\n
  • "atspējotajām lietotnēm;"
  • \n
  • "atspējoto lietotņu paziņojumiem;"
  • \n
  • "noklusējuma lietojumprogrammām attiecībā uz darbību veikšanu;"
  • \n
  • "fona datu ierobežojumiem attiecībā uz lietotnēm."
  • \n\n"Jūs nezaudēsiet lietotņu datus."
    + "Tādējādi tiks atiestatītas visas preferences saistībā ar:\n\n"
  • "atspējotajām lietotnēm;"
  • \n
  • "atspējoto lietotņu paziņojumiem;"
  • \n
  • "noklusējuma lietojumprogrammām attiecībā uz darbību veikšanu;"
  • \n
  • "fona datu ierobežojumiem attiecībā uz lietotnēm."
  • \n\n"Jūs nezaudēsiet lietotņu datus."
    "Atiestatīt lietotnes" "Vietas pārvaldība" "Filtrs" @@ -1240,9 +1241,7 @@ "Lai pārsl., nosp. Ctrl + atst. t." "Noklusējums" "Tastatūras izkārtojumi" - "Lietotāja vārdnīca" - "Personiskā vārdnīca" - "Personiskās vārdnīcas" + "Personiskā vārdnīca" "Pievienot" "Pievienot vārdnīcai" @@ -1303,6 +1302,11 @@ "Iekļaut barošanas izvēlnē kļūdu ziņojuma sagatavošanas opciju" "Atstāt nomodā" "Uzlādes laikā ekrāns nekad nepārslēgsies miega režīmā" + "Iespējot Bluetooth HCI analizētāja žurnālu" + "Tvert visas Bluetooth HCI paketes failā" + "Izpildlaika atlase" + "Izpildlaika atlase" + "Vai atsāknēt, lai mainītu izpildlaiku no %1$s uz %2$s?" "Atļaut neīstas vietas" "Atļaut neīstas vietas" "Vai atļaut USB atkļūdošanu?" @@ -1315,11 +1319,13 @@ "Aizsargāt USB atmiņu" "Lietotnēm ir jāpieprasa atļauja lasīt USB atmiņu." "Vai aizsargāt USB atmiņu?" - "Ja USB atmiņa ir aizsargāta, lietotnēm ir jāpieprasa atļauja lasīt datus no ārējas atmiņas."\n\n"Dažas lietotnes, iespējams, nedarbosies, kamēr tās neatjauninās izstrādātāji." + "Ja USB atmiņa ir aizsargāta, lietotnēm ir jāpieprasa atļauja lasīt datus no ārējas atmiņas.\n\nDažas lietotnes, iespējams, nedarbosies, kamēr tās neatjauninās izstrādātāji." "Aizsargāt SD karti" "Lietotnēm ir jāpieprasa atļauja lasīt SD karti." "Vai aizsargāt SD karti?" - "Ja SD karte ir aizsargāta, lietotnēm ir jāpieprasa atļauja lasīt datus no ārējas atmiņas."\n\n"Dažas lietotnes, iespējams, nedarbosies, kamēr tās neatjauninās izstrādātāji." + "Ja SD karte ir aizsargāta, lietotnēm ir jāpieprasa atļauja lasīt datus no ārējas atmiņas.\n\nDažas lietotnes, iespējams, nedarbosies, kamēr tās neatjauninās izstrādātāji." + "Vietējā beigu lietotne" + "Iespējot beigu lietotni, kurā piedāvāta vietējā čaulas piekļuve" "Izvēlēties sīkrīku" "Izvēlēties logrīku" "Vai izveidot logrīku un atļaut piekļuvi?" @@ -1340,11 +1346,11 @@ "Pakalpojumi" "Sistēma" "Palielināšanas žesti" - "Ja šī funkcija ir ieslēgta, varat tuvināt un tālināt, trīs reizes pieskaroties ekrānam."\n\n"Ja veicāt tuvināšanu, varat veikt arī tālāk norādītās darbības."\n
    • "Panoramēt — velciet divus pirkstus vai vairāk pāri ekrānam."
    • \n
    • "Pielāgot tālummaiņas līmeni — savelciet kopā divus pirkstus vai vairāk vai izpletiet tos."
    \n\n"Varat arī uz brīdi palielināt zem pirksta redzamo vienumu, trīs reizes pieskaroties ekrānam un turot. Šādā palielinājumā varat pārvilkt pirkstu, lai izvērstu citas ekrāna daļas. Paceliet pirkstu, lai atgrieztu iepriekšējo ekrāna stāvokli."\n\n"Piezīme. Palielināšana, trīs reizes pieskaroties ekrānam, darbojas visos ekrānos, izņemot tastatūru un navigācijas joslu."
    + "Ja šī funkcija ir ieslēgta, varat tuvināt un tālināt, trīs reizes pieskaroties ekrānam.\n\nJa veicāt tuvināšanu, varat veikt arī tālāk norādītās darbības.\n"
    • "Panoramēt — velciet divus pirkstus vai vairāk pāri ekrānam."
    • \n
    • "Pielāgot tālummaiņas līmeni — savelciet kopā divus pirkstus vai vairāk vai izpletiet tos."
    \n\n"Varat arī uz brīdi palielināt zem pirksta redzamo vienumu, trīs reizes pieskaroties ekrānam un turot. Šādā palielinājumā varat pārvilkt pirkstu, lai izvērstu citas ekrāna daļas. Paceliet pirkstu, lai atgrieztu iepriekšējo ekrāna stāvokli.\n\nPiezīme. Palielināšana, trīs reizes pieskaroties ekrānam, darbojas visos ekrānos, izņemot tastatūru un navigācijas joslu."
    "Pieejamības saīsne" "Ieslēgts" "Izslēgta" - "Ja šī funkcija ir ieslēgta, varat ātri iespējot pieejamības funkcijas, veicot divas darbības."\n\n"1. darbība: nospiediet barošanas pogu un turiet to, līdz izdzirdat kādu skaņu vai sajūtat vibrāciju."\n\n"2. darbība: pieskarieties ar diviem pirkstiem un uzgaidiet, līdz izdzirdat audio apstiprinājumu."\n\n"Ja ierīcei ir vairāki lietotāji, izmantojot šo saīsni bloķēšanas ekrānā, varat uz laiku iespējot pieejamību līdz ierīces atbloķēšanai." + "Ja šī funkcija ir ieslēgta, varat ātri iespējot pieejamības funkcijas, veicot divas darbības.\n\n1. darbība: nospiediet barošanas pogu un turiet to, līdz izdzirdat kādu skaņu vai sajūtat vibrāciju.\n\n2. darbība: pieskarieties ar diviem pirkstiem un uzgaidiet, līdz izdzirdat audio apstiprinājumu.\n\nJa ierīcei ir vairāki lietotāji, izmantojot šo saīsni bloķēšanas ekrānā, varat uz laiku iespējot pieejamību līdz ierīces atbloķēšanai." "Liels teksts" "Ekrāna palielinājums" "Ekrāna palielinājuma autom. atjaun." @@ -1366,6 +1372,16 @@ "Lietotne TalkBack par ekrānā notiekošo informē balss komentāru veidā, lai palīdzētu neredzīgiem un vājredzīgiem lietotājiem. Vai vēlaties to instalēt bez maksas no vietnes Android Market?" "Apraksts nav sniegts." "Iestatījumi" + "Drukāšana" + "Drukāšanas iestatījumi" + "Pakalpojumi" + "Vai izmantot pakalpojumu %1$s?" + "%1$s var saņemt jūsu drukātos dokumentus. Šajos dokumentos var būt ietverti sensitīvi dati." + "Nav instalēts neviens pakalpojums" + "Iestatījumi" + "Pievienot printerus" + "Ieslēgta" + "Izslēgta" "Akumulators" "Kas patērējis akumulatoru" "Akumul. liet. dati nav pieej." @@ -1405,8 +1421,10 @@ "Wi-Fi darbojas" "Planšetdators" "Tālrunis" - "Dati nosūtīti" - "Dati ir saņemti" + "Nosūtīto mobilo datu apjoms" + "Saņemto mobilo datu apjoms" + "Nosūtīto Wi‑Fi datu apjoms" + "Saņemto Wi‑Fi datu apjoms" "Audio" "Videoklips" "Laiks ieslēgtā stāvoklī" @@ -1460,6 +1478,7 @@ "Tonis" "Ietekmē ierunātā teksta toni" "Valoda" + "Nav atlasīta valoda." "Runātajam tekstam iestata valodai raksturīgu balsi" "Noklausīties piemēru" "Atskaņot īsu runas sintēzes demonstrāciju" @@ -1594,7 +1613,7 @@ "EAP netiek atbalstīts." "Iestatīšanas laikā nevar konfigurēt EAP Wi-Fi savienojumu. To var izdarīt pēc iestatīšanas šeit: Iestatījumi > Bezvadu savienojumi un tīkli." "Savienojuma izveide var ilgt dažas minūtes..." - "Lai turpinātu iestatīšanu, pieskarieties ""Tālāk""."\n\n"Lai izveidotu savienojumu ar citu Wi-Fi tīklu, pieskarieties ""Atpakaļ""." + "Lai turpinātu iestatīšanu, pieskarieties ""Tālāk"".\n\nLai izveidotu savienojumu ar citu Wi-Fi tīklu, pieskarieties ""Atpakaļ""." "Sinhronizācija iespējota" "Sinhronizācija atspējota" "Sinhronizācijas kļūda" @@ -1676,8 +1695,7 @@ "Atjaunināt logu skat., ja zīm. tiek liet. GPU." "Rādīt apar. slāņu atjaun." "Atjaunin. aparatūras slāņiem ir jāmirgo zaļā krāsā" - "Rādīt GPU pārsn. apjomu" - "Kārtība: zils, zaļš, gaiši sarkans, sarkans" + "Atkļūdot graf. proc. kapac. pārsn." "Atspējot HW pārklājumus" "Vienmēr izmantot GPU atveidi ekrāna salikšanai" "Iespējot OpenGL trases" @@ -1738,11 +1756,11 @@ "Atsp. fona datus mob. tīklos. Tiks izm. citi tīkli, ja pieejami." "Lai ierob. fona d. šai liet., vispirms jāiest. mob. d. ierobež." "Vai ierobežot fona datus?" - "Ja būs pieejami tikai mobilie tīkli, šī funkcija var pārtraukt tādas lietotnes darbību, kurā tiek izmantoti fona dati."\n\n"Lietotnē pieejamajos iestatījumos varat skatīt citas piemērotas datu lietojuma vadīklas." + "Ja būs pieejami tikai mobilie tīkli, šī funkcija var pārtraukt tādas lietotnes darbību, kurā tiek izmantoti fona dati.\n\nLietotnē pieejamajos iestatījumos varat skatīt citas piemērotas datu lietojuma vadīklas." "Fona datu ierobežošana ir iespējama tikai tad, ja ir iestatīts mobilo datu ierobežojums." "Vai ieslēgt datu automātisko sinhronizāciju?" - "Visas tīmekļa kontā veiktās izmaiņas tiks automātiski kopētas uz jūsu planšetdatoru."\n\n"Daži konti var arī automātiski kopēt visas planšetdatorā veiktās izmaiņas uz tīmekļa kontu. Google konts darbojas šādā veidā."\n\n"Lai izvēlētos sinhronizējamās informācijas veidu katrā kontā, skatiet: Iestatījumi > Konti." - "Visas jūsu tīmekļa kontos veiktās izmaiņas tiks automātiski kopētas uz jūsu tālruni."\n\n"Daži konti var arī automātiski kopēt visas tālrunī veiktās izmaiņas uz tīmekļa kontu. Google konts darbojas šādā veidā."\n\n"Lai izvēlētos sinhronizējamās informācijas veidu katrā kontā, skatiet: Iestatījumi > Konti." + "Visas tīmekļa kontā veiktās izmaiņas tiks automātiski kopētas uz jūsu planšetdatoru.\n\nDaži konti var arī automātiski kopēt visas planšetdatorā veiktās izmaiņas uz tīmekļa kontu. Google konts darbojas šādā veidā.\n\nLai izvēlētos sinhronizējamās informācijas veidu katrā kontā, skatiet: Iestatījumi > Konti." + "Visas jūsu tīmekļa kontos veiktās izmaiņas tiks automātiski kopētas uz jūsu tālruni.\n\nDaži konti var arī automātiski kopēt visas tālrunī veiktās izmaiņas uz tīmekļa kontu. Google konts darbojas šādā veidā.\n\nLai izvēlētos sinhronizējamās informācijas veidu katrā kontā, skatiet: Iestatījumi > Konti." "Vai izslēgt datu automātisko sinhronizāciju?" "Tiks saglabāti dati un akumulatora lietojums, bet jums vajadzēs manuāli sinhronizēt katru kontu, lai apkopotu jaunāko informāciju. Un jūs nesaņemsiet paziņojumus par atjauninājumiem." "Izmantošanas cikla atiestatīšanas datums" @@ -1751,12 +1769,12 @@ "Datu lietošanas brīdinājuma iestatīšana" "Datu lietošanas ierobežojuma iestatīšana" "Datu izmantošanas ierobežošana" - "Mobilais datu savienojums tiks atspējots, tiklīdz būs sasniegts noteiktais ierobežojums."\n\n"Tā kā datu lietojuma apjoms tiek aprēķināts planšetdatorā un mobilo sakaru operatoru aprēķini par datu lietojumu var atšķirties, ierobežojumu izvēlieties apdomīgi." - "Mobilais datu savienojums tiks atspējots, tiklīdz būs sasniegts noteiktais ierobežojums."\n\n"Tā kā datu lietojuma apjoms tiek aprēķināts tālrunī un mobilo sakaru operatoru aprēķini par datu lietojumu var atšķirties, ierobežojumu izvēlieties apdomīgi." + "Mobilais datu savienojums tiks atspējots, tiklīdz būs sasniegts noteiktais ierobežojums.\n\nTā kā datu lietojuma apjoms tiek aprēķināts planšetdatorā un mobilo sakaru operatoru aprēķini par datu lietojumu var atšķirties, ierobežojumu izvēlieties apdomīgi." + "Mobilais datu savienojums tiks atspējots, tiklīdz būs sasniegts noteiktais ierobežojums.\n\nTā kā datu lietojuma apjoms tiek aprēķināts tālrunī un mobilo sakaru operatoru aprēķini par datu lietojumu var atšķirties, ierobežojumu izvēlieties apdomīgi." "Vai ierobežot fona datus?" "Ierobežojot fona mobilos datus, dažas lietotnes un pakalpojumi nedarbosies, ja vien netiks izveidots savienojums ar Wi-Fi tīklu." - "Ierobežojot fona mobilos datus, dažas lietotnes un pakalpojumi nedarbosies, ja vien netiks izveidots savienojums ar Wi-Fi tīklu."\n\n"Šis iestatījums ietekmē visus šī planšetdatora lietotājus." - "Ierobežojot fona mobilos datus, dažas lietotnes un pakalpojumi nedarbosies, ja vien netiks izveidots savienojums ar Wi-Fi tīklu."\n\n"Šis iestatījums ietekmē visus šī tālruņa lietotājus." + "Ierobežojot fona mobilos datus, dažas lietotnes un pakalpojumi nedarbosies, ja vien netiks izveidots savienojums ar Wi-Fi tīklu.\n\nŠis iestatījums ietekmē visus šī planšetdatora lietotājus." + "Ierobežojot fona mobilos datus, dažas lietotnes un pakalpojumi nedarbosies, ja vien netiks izveidots savienojums ar Wi-Fi tīklu.\n\nŠis iestatījums ietekmē visus šī tālruņa lietotājus." "^1"" ""^2"\n"brīdinājums" "^1"" ""^2"\n"ierobežojums" "Noņemtās lietotnes" @@ -1843,8 +1861,8 @@ "Lietotājs" "Ierobežots profils" "Lietotāja pievienošana" - "Varat koplietot šo ierīci ar citām personām, pievienojot papildu lietotājus. Katram lietotājam ir sava vide, ko var pielāgot, izmantojot lietotnes, fona tapetes u.c. Lietotāji var arī pielāgot tādus planšetdatora iestatījumus, kuri attiecas uz visiem lietotājiem, piemēram, Wi-Fi."\n\n"Kad tiek pievienots jauns lietotājs, viņam ir jāveic iestatīšanas process."\n\n"Ikviens lietotājs var atļaut lietotņu atjaunināšanu citu lietotāju vietā." - "Kad ir pievienots jauns lietotājs, viņam ir jāveic iestatīšanas process."\n\n"Ikviens lietotājs var atļaut lietotņu atjaunināšanu citu lietotāju vietā." + "Varat koplietot šo ierīci ar citām personām, pievienojot papildu lietotājus. Katram lietotājam ir sava vide, ko var pielāgot, izmantojot lietotnes, fona tapetes u.c. Lietotāji var arī pielāgot tādus planšetdatora iestatījumus, kuri attiecas uz visiem lietotājiem, piemēram, Wi-Fi.\n\nKad tiek pievienots jauns lietotājs, viņam ir jāveic iestatīšanas process.\n\nIkviens lietotājs var atļaut lietotņu atjaunināšanu citu lietotāju vietā." + "Kad ir pievienots jauns lietotājs, viņam ir jāveic iestatīšanas process.\n\nIkviens lietotājs var atļaut lietotņu atjaunināšanu citu lietotāju vietā." "Iestatīt kontu tūlīt?" "Lietotājam ir jābūt iespējai iestatīt savu telpu, izmantojot planšetdatoru" "Vai iestatīt profilu tūlīt?" @@ -1875,6 +1893,9 @@ "Šis iestatījums ietekmē visus šī tālruņa lietotājus." "Valodas maiņa" "Fonta lieluma maiņa" + "Ierobežojumi" + "Ierobežojumu atcelšana" + "Mainīt PIN" "Rādīt paziņojumus" "Palīdzība" "Konts saturam" diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml index 82d48370868..fd349bc2c0f 100644 --- a/res/values-ms/arrays.xml +++ b/res/values-ms/arrays.xml @@ -233,7 +233,8 @@ "Lokasi" "Peribadi" "Pemesejan" - "Peranti" + "Media" + "Peranti"
    "lokasi kasar" @@ -267,6 +268,17 @@ "mainkan audio" "baca papan keratan" "ubah suai papan keratan" + "butang media" + "tumpuan audio" + "kelantangan induk" + "kelantangan suara" + "kelantangan deringan" + "kelantangan media" + "kelantangan penggera" + "kelantangan pemberitahuan" + "kelantangan bluetooth" + "kekal berjaga" + "pantau lokasi" "Lokasi" @@ -300,12 +312,33 @@ "Mainkan audio" "Baca papan keratan" "Ubah suai papan keratan" + "Butang media" + "Tumpuan audio" + "Kelantangan utama" + "Kelantangan suara" + "Kelantangan deringan" + "Kelantangan media" + "Kelantangan penggera" + "Kelantangan pemberitahuan" + "Kelantangan Bluetooth" + "Kekal berjaga" + "Lokasi" "Pendek" "Sederhana" "Panjang" + + "Dalvik" + "ART" + "ART (nyahpepijat)" + + + "Gunakan Dalvik" + "Gunakan ART" + "Gunakan binaan nyahpepijat ART" + "Jangan sekali-kali semak" "Semak kandungan DRM sahaja" @@ -367,6 +400,11 @@ "Pada skrin sebagai garis" "Dalam adb shell dumpsys gfxinfo" + + "Mati" + "Tunjukkan kawasan lebih lukis" + "Tunjukkan kaunter lebih lukis" + "Had standard" "Tiada proses latar belakang" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 7ae90d4c558..adbfc584e66 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -275,8 +275,8 @@ "Anda telah kehilangan kesambungan data kerana anda meninggalkan rangkaian rumah anda dengan data perayauan dimatikan." "Hidupkannya" "Apabila anda membenarkan perayauan data, anda boleh dikenakan caj perayauan yang tinggi!" - "Apabila anda membenarkan perayauan data, anda mungkin dikenakan caj perayauan yang tinggi!"\n\n"Tetapan ini melibatkan semua pengguna pada tablet ini." - "Apabila anda membenarkan perayauan data, anda mungkin dikenakan caj perayauan yang tinggi!"\n\n"Tetapan ini melibatkan semua pengguna pada telefon ini." + "Apabila anda membenarkan perayauan data, anda mungkin dikenakan caj perayauan yang tinggi!\n\nTetapan ini melibatkan semua pengguna pada tablet ini." + "Apabila anda membenarkan perayauan data, anda mungkin dikenakan caj perayauan yang tinggi!\n\nTetapan ini melibatkan semua pengguna pada telefon ini." "Benarkan perayauan data?" "Pilihan pengendali" "Pilih pengendali rangkaian" @@ -322,8 +322,8 @@ "Memerlukan PIN atau kata laluan angka untuk menyahsulit tablet anda setiap kali anda menghidupkannya" "Memerlukan PIN atau kata laluan angka untuk menyahsulit telefon anda setiap kali dan menghidupkannya" "Disulitkan" - "Anda boleh menyulitkan akaun anda, tetapan, apl yang dimuat turun dan datanya, media, dan fail-fail lain. Sebaik sahaja anda menyulitkan tablet anda, anda perlu menaip PIN nombor atau kata laluan untuk menyahsulit setiap kali anda menghidupkannya. Anda tidak boleh menyahsulit tablet anda kecuali dengan melakukan penetapan semula data kilang, yang memadamkan semua data anda."\n\n"Penyulitan mengambil masa satu jam atau lebih. Anda mesti bermula dengan bateri yang telah dicas dan memastikan tablet anda dipasang pada palam sehingga penyulitan selesai. Jika anda mengganggu proses penyulitan, anda akan kehilangan sebahagian atau semua data anda." - "Anda boleh menyulitkan akaun anda, tetapan, apl yang dimuat turun dan datanya, media, dan fail-fail lain. Sebaik sahaja anda menyulitkan telefon anda, anda perlu menaip PIN nombor atau kata laluan untuk menyahsulit setiap kali anda menghidupkannya. Anda tidak boleh menyahsulit telefon anda kecuali dengan melakukan tetapan semula data kilang, yang memadamkan semua data anda."\n\n"Penyulitan mengambil satu jam atau lebih. Anda mesti bermula dengan bateri yang telah dicas dan memastikan fon anda dipasang pada palam sehingga penyulitan selesai. Jika anda mengganggu proses penyulitan, anda akan kehilangan sebahagian atau semua data anda." + "Anda boleh menyulitkan akaun anda, tetapan, apl yang dimuat turun dan datanya, media, dan fail-fail lain. Sebaik sahaja anda menyulitkan tablet anda, anda perlu menaip PIN nombor atau kata laluan untuk menyahsulit setiap kali anda menghidupkannya. Anda tidak boleh menyahsulit tablet anda kecuali dengan melakukan penetapan semula data kilang, yang memadamkan semua data anda.\n\nPenyulitan mengambil masa satu jam atau lebih. Anda mesti bermula dengan bateri yang telah dicas dan memastikan tablet anda dipasang pada palam sehingga penyulitan selesai. Jika anda mengganggu proses penyulitan, anda akan kehilangan sebahagian atau semua data anda." + "Anda boleh menyulitkan akaun anda, tetapan, apl yang dimuat turun dan datanya, media, dan fail-fail lain. Sebaik sahaja anda menyulitkan telefon anda, anda perlu menaip PIN nombor atau kata laluan untuk menyahsulit setiap kali anda menghidupkannya. Anda tidak boleh menyahsulit telefon anda kecuali dengan melakukan tetapan semula data kilang, yang memadamkan semua data anda.\n\nPenyulitan mengambil satu jam atau lebih. Anda mesti bermula dengan bateri yang telah dicas dan memastikan fon anda dipasang pada palam sehingga penyulitan selesai. Jika anda mengganggu proses penyulitan, anda akan kehilangan sebahagian atau semua data anda." "Sulitkan tablet" "Sulitkan telefon" "Cas bateri anda dan cuba lagi." @@ -339,8 +339,8 @@ "Cuba lagi dalam ^1 saat." "Taipkan kata laluan anda" "Penyulitan tidak berjaya" - "Penyulitan telah diganggu dan tidak dapat dilengkapkan. Akibatnya, data pada tablet anda tidak lagi boleh diakses. "\n\n" Untuk menyambung semula menggunakan tablet anda, anda perlu melakukan tetapan semula kilang. Apabila anda menyediakan tablet anda selepas menetap semula, anda akan berpeluang untuk memulihkan apa-apa data yang dibuat sandaran ke Akaun Google anda." - "Penyulitan telah diganggu dan tidak dapat dilengkapkan. Akibatnya, data pada telefon anda tidak lagi boleh diakses. "\n\n"Untuk menyambung semula menggunakan telefon anda, anda perlu melakukan tetapan semula kilang. Apabila anda menetapkan telefon anda selepas menetap semula, anda akan mempunyai peluang untuk memulihkan apa-apa data yang dibuat sandaran ke Akaun Google anda." + "Penyulitan telah diganggu dan tidak dapat dilengkapkan. Akibatnya, data pada tablet anda tidak lagi boleh diakses. \n\n Untuk menyambung semula menggunakan tablet anda, anda perlu melakukan tetapan semula kilang. Apabila anda menyediakan tablet anda selepas menetap semula, anda akan berpeluang untuk memulihkan apa-apa data yang dibuat sandaran ke Akaun Google anda." + "Penyulitan telah diganggu dan tidak dapat dilengkapkan. Akibatnya, data pada telefon anda tidak lagi boleh diakses. \n\nUntuk menyambung semula menggunakan telefon anda, anda perlu melakukan tetapan semula kilang. Apabila anda menetapkan telefon anda selepas menetap semula, anda akan mempunyai peluang untuk memulihkan apa-apa data yang dibuat sandaran ke Akaun Google anda." "Tukar kaedah input" "Pilih kunci skrin" "Pilih kunci sandaran" @@ -514,6 +514,7 @@ "Menyambung" "Bersambung" "Tersedia" + "Sedang digunakan" "Tetapan paparan" "Putuskan sambungan WiFi?" "Ini akan menamatkan sambungan anda dengan:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Mati" "Tidak tersedia kerana NFC dimatikan" "Android Beam" - "Apabila ciri ini dihidupkan, anda boleh memancarkan kandungan aplikasi ke peranti mampu NFC yang lain dengan merapatkan kedua-dua peranti itu. Sebagai contoh, anda boleh memancarkan halaman Penyemak Imbas, video YouTube, maklumat Hubungan orang dan banyak lagi."\n\n"Hanya rapatkan kedua-dua peranti (biasanya bersentuhan belakang dengan belakang) dan kemudian sentuh skrin anda. Aplikasi menentukan apa yang akan dipancarkan." + "Apabila ciri ini dihidupkan, anda boleh memancarkan kandungan aplikasi ke peranti mampu NFC yang lain dengan merapatkan kedua-dua peranti itu. Sebagai contoh, anda boleh memancarkan halaman Penyemak Imbas, video YouTube, maklumat Hubungan orang dan banyak lagi.\n\nHanya rapatkan kedua-dua peranti (biasanya bersentuhan belakang dengan belakang) dan kemudian sentuh skrin anda. Aplikasi menentukan apa yang akan dipancarkan." "Penemuan perkhidmatan rangkaian" "Benarkan apl pada peranti lain untuk menemui apl pada peranti ini" "Wi‑Fi" @@ -620,7 +621,7 @@ "Dijamin dengan %1$s" ", dijamin dengan %1$s" "Tiada" - "Untuk memperbaik ketepatan lokasi dan untuk tujuan lain, %1$s ingin menghidupkan imbasan rangkaian, walaupun semasa Wi-Fi dimatikan."\n\n"Benarkan fungsi ini untuk semua apl yang ingin mengimbas?" + "Untuk memperbaik ketepatan lokasi dan untuk tujuan lain, %1$s ingin menghidupkan imbasan rangkaian, walaupun semasa Wi-Fi dimatikan.\n\nBenarkan fungsi ini untuk semua apl yang ingin mengimbas?" "Benarkan" "Tolak" "Sambung" @@ -632,8 +633,8 @@ "Batal" "Langkau juga" "Jangan langkau" - "AMARAN: Anda mungkin dikenakan caj data pembawa tambahan."\n\n"Persediaan tablet berpotensi menggunakan aktiviti rangkaian yang besar." - "AMARAN: Anda mungkin dikenakan caj data pembawa tambahan."\n\n"Persediaan telefon berpotensi menggunakan aktiviti rangkaian yang banyak." + "AMARAN: Anda mungkin dikenakan caj data pembawa tambahan.\n\nPersediaan tablet berpotensi menggunakan aktiviti rangkaian yang besar." + "AMARAN: Anda mungkin dikenakan caj data pembawa tambahan.\n\nPersediaan telefon berpotensi menggunakan aktiviti rangkaian yang banyak." "AMARAN: Tablet tidak dapat mengesahkan bahawa perisian anda terkini sehingga anda mempunyai sambungan internet." "AMARAN: Telefon tidak dapat mengesahkan bahawa perisian anda terkini sehingga anda mempunyai sambungan internet." "Tablet tidak dapat menyambung ke rangkaian Wi-Fi ini." @@ -773,9 +774,9 @@ "PIN SIM" "PIN salah" "PIN tidak sepadan" - "Tidak boleh menukar PIN."\n"Berkemungkinan PIN salah." + "Tidak boleh menukar PIN.\nBerkemungkinan PIN salah." "PIN SIM berjaya ditukar" - "Tidak boleh menukar keadaan kunci kad SIM."\n"Mungkin PIN salah." + "Tidak boleh menukar keadaan kunci kad SIM.\nMungkin PIN salah." "OK" "Batal" "Status tablet" @@ -918,9 +919,9 @@ "Tetapan semula data kilang" "Memadamkan semua data pada tablet" "Memadamkan semua data pada telefon" - "Ini akan memadamkan semua data dari ""storan dalaman"" tablet anda, termasuk:"\n\n
  • "Akaun Google anda"
  • \n
  • "Data dan tetapan sistem dan aplikasi"
  • \n
  • "Aplikasi yang dimuat turun"
  • - "Ini akan memadamkan semua data dari ""storan dalaman"" telefon anda, termasuk:"\n\n
  • "Akaun Google anda"
  • \n
  • "Data dan tetapan sistem dan aplikasi"
  • \n
  • "Aplikasi yang dimuat turun"
  • - \n\n"Anda melog masuk ke dalam akaun berikut buat masa ini:"\n + "Ini akan memadamkan semua data dari ""storan dalaman"" tablet anda, termasuk:\n\n"
  • "Akaun Google anda"
  • \n
  • "Data dan tetapan sistem dan aplikasi"
  • \n
  • "Aplikasi yang dimuat turun"
  • + "Ini akan memadamkan semua data dari ""storan dalaman"" telefon anda, termasuk:\n\n"
  • "Akaun Google anda"
  • \n
  • "Data dan tetapan sistem dan aplikasi"
  • \n
  • "Aplikasi yang dimuat turun"
  • + \n\n"Anda melog masuk ke dalam akaun berikut buat masa ini:\n"
  • "Muzik"
  • \n
  • "Foto"
  • \n
  • "Data pengguna yang lain"
  • \n\n"Untuk memadam bersih muzik, gambar dan data pengguna lain, ""storan USB"" perlu dipadamkan." \n\n"Untuk turut memadam bersih muzik, gambar dan data pengguna lain, ""kad SD"" perlu dipadamkan." @@ -956,7 +957,7 @@ "Titik panas mudah alih" "Penambatan Bluetooth" "Penambatan" - "Liputan t\'batan & m\'alih" + "Liputan tambatan & mudah alih" "USB" "Penambatan USB" "USB disambungkan, semak untuk menambat" @@ -1105,7 +1106,7 @@ "Tunjuk proses yg dicache" "Tetapkan semula pilihan apl" "Tetapkan semula pilihan app?" - "Ini akan menetapkan semula semua pilihan untuk:"\n\n" "
  • "Apl dilumpuhkan"
  • \n" "
  • "Pemberitahuan apl dilumpuhkan"
  • \n" "
  • "Aplikasi lalai untuk tindakan"
  • \n" "
  • "Sekatan data latar belakang untuk apl"
  • \n\n" Anda tidak akan kehilangan sebarang data apl."
    + "Ini akan menetapkan semula semua pilihan untuk:\n\n "
  • "Apl dilumpuhkan"
  • \n" "
  • "Pemberitahuan apl dilumpuhkan"
  • \n" "
  • "Aplikasi lalai untuk tindakan"
  • \n" "
  • "Sekatan data latar belakang untuk apl"
  • \n\n" Anda tidak akan kehilangan sebarang data apl."
    "Tetapkan semula apl" "Urus ruang" "Tapis" @@ -1240,9 +1241,7 @@ "Untuk bertukar, tekan Control-Spacebar" "Lalai" "Susun atur papan kekunci" - "Kamus pengguna" - "Kamus peribadi" - "Kamus peribadi" + "Kamus peribadi" "Tambah" "Tambah ke kamus" @@ -1303,6 +1302,11 @@ "Masukkan pilihan dalam menu kuasa untuk mengambil laporan pepijat" "Tetap berjaga" "Skrin tidak sekali-kali akan tidur semasa pengecasan" + "Dayakan log intip HCI Bluetooth" + "Tangkap semua paket HCI bluetooth dalam fail" + "Pilih waktu jalan" + "Pilih waktu jalan" + "But semula untuk menukar waktu jalan daripada %1$s kepada %2$s?" "Benarkan lokasi olokan" "Benarkan lokasi olokan" "Benarkan penyahpepijatan USB?" @@ -1315,11 +1319,13 @@ "Lindungi storan USB" "Apl mesti meminta kebenaran untuk membaca storan USB" "Lindungi storan USB?" - "Apabila storan USB dilindungi, apl mesti meminta kebenaran untuk membaca data dari storan luaran."\n\n"Sesetengah apl mungkin tidak berfungsi sehingga dikemas kini oleh pemaju apl itu." + "Apabila storan USB dilindungi, apl mesti meminta kebenaran untuk membaca data dari storan luaran.\n\nSesetengah apl mungkin tidak berfungsi sehingga dikemas kini oleh pemaju apl itu." "Lindungi kad SD" "Apl mesti meminta kebenaran untuk membaca kad SD" "Lindungi kad SD?" - "Apabila kad SD dilindungi, apl mesti meminta kebenaran untuk membaca data dari storan luaran."\n\n"Sesetengah apl mungkin tidak berfungsi sehingga dikemas kini oleh pemaju apl itu." + "Apabila kad SD dilindungi, apl mesti meminta kebenaran untuk membaca data dari storan luaran.\n\nSesetengah apl mungkin tidak berfungsi sehingga dikemas kini oleh pemaju apl itu." + "Terminal setempat" + "Dayakan apl terminal yang menawarkan akses shell tempatan" "Pilih alat" "Pilih widget" "Buat widget dan benarkan akses?" @@ -1340,11 +1346,11 @@ "Perkhidmatan" "Sistem" "Gerak isyarat pembesaran" - "Apabila ciri ini dihidupkan, anda boleh mengezum masuk dan keluar dengan mengetik skrin tiga kali."\n\n"Semasa dizum masuk, anda boleh:"\n
    • "Menyorot: Seret menggunakan dua atau lebih jari merentasi skrin."
    • \n
    • "Melaraskan tahap zum: Rapatkan atau jarakkan dua atau lebih jari."
    \n\n"Anda juga boleh membesarkan item di bawah jari anda untuk sementara waktu dengan mengetik tiga kali dan menahannya. Dalam keadaan zum besar ini, anda boleh menyeret jari anda untuk meneroka bahagian-bahagian lain pada skrin. Angkat jari anda untuk kembali kepada keadaan sebelumnya."\n\n"Nota: Ketik tiga kali untuk pembesaran berfungsi di semua tempat kecuali pada papan kekunci dan bar navigasi."
    + "Apabila ciri ini dihidupkan, anda boleh mengezum masuk dan keluar dengan mengetik skrin tiga kali.\n\nSemasa dizum masuk, anda boleh:\n"
    • "Menyorot: Seret menggunakan dua atau lebih jari merentasi skrin."
    • \n
    • "Melaraskan tahap zum: Rapatkan atau jarakkan dua atau lebih jari."
    \n\n"Anda juga boleh membesarkan item di bawah jari anda untuk sementara waktu dengan mengetik tiga kali dan menahannya. Dalam keadaan zum besar ini, anda boleh menyeret jari anda untuk meneroka bahagian-bahagian lain pada skrin. Angkat jari anda untuk kembali kepada keadaan sebelumnya.\n\nNota: Ketik tiga kali untuk pembesaran berfungsi di semua tempat kecuali pada papan kekunci dan bar navigasi."
    "Pintasan kebolehcapaian" "Hidupkan" "Matikan" - "Apabila ciri ini dihidupkan, anda boleh mendayakan ciri kebolehaksesan dengan cepat dalam dua langkah:"\n\n"Langkah 1: Tekan dan tahan butang kuasa sehingga anda mendengar bunyi atau merasai getaran."\n\n"Langkah 2: Sentuh terus menggunakan dua jari sehingga anda mendengar pengesahan audio."\n\n"Jika peranti digunakan oleh beberapa orang pengguna, menggunakan pintasan ini pada skrin kunci akan mendayakan kebolehaksesan untuk sementara waktu sehingga peranti dibuka kuncinya." + "Apabila ciri ini dihidupkan, anda boleh mendayakan ciri kebolehaksesan dengan cepat dalam dua langkah:\n\nLangkah 1: Tekan dan tahan butang kuasa sehingga anda mendengar bunyi atau merasai getaran.\n\nLangkah 2: Sentuh terus menggunakan dua jari sehingga anda mendengar pengesahan audio.\n\nJika peranti digunakan oleh beberapa orang pengguna, menggunakan pintasan ini pada skrin kunci akan mendayakan kebolehaksesan untuk sementara waktu sehingga peranti dibuka kuncinya." "Teks besar" "Pembesaran skrin" "Auto kemas kini pembesaran skrin" @@ -1366,6 +1372,16 @@ "TalkBack menyediakan maklum balas bersuara untuk membantu pengguna yang buta dan berpenglihatan kabur. Adakah anda ingin memasangnya secara percuma dari Android Market?" "Tiada keterangan disediakan." "Tetapan" + "Pencetakan" + "Tetapan pencetakan" + "Perkhidmatan" + "Gunakan %1$s?" + "%1$s boleh menerima dokumen yang anda cetak. Dokumen seperti itu mungkin mengandungi data sensitif." + "Tiada perkhidmatan dipasangkan" + "Tetapan" + "Tambah pencetak" + "Hidup" + "Mati" "Bateri" "Apa yang telah menggunakan bateri" "Data penggunaan bateri tidak tersedia.." @@ -1405,8 +1421,10 @@ "Wi-Fi berjalan" "Tablet" "Telefon" - "Data yang dihantar" - "Data yang diterima" + "Data mudah alih yang dihantar" + "Data mudah alih yang diterima" + "Data Wi-Fi yang dihantar" + "Data Wi-Fi yang diterima" "Audio" "Video" "Masa hidup" @@ -1460,6 +1478,7 @@ "Pic" "Mempengaruhi nada teks pertuturan" "Bahasa" + "Bahasa tidak dipilih" "Menetapkan suara khusus bahasa untuk teks pertuturan" "Dengar contoh" "Mainkan tunjuk cara singkat sintesis pertuturan" @@ -1594,7 +1613,7 @@ "EAP tidak disokong." "Anda tidak boleh mengkonfigurasi sambungan Wi-Fi EAP semasa persediaan. Selepas persediaan, anda boleh berbuat demikian dalam Tetapan > Wayarles & rangkaian." "Penyambungan boleh mengambil masa beberapa minit..." - "Sentuh ""Seterusnya"" untuk meneruskan dengan persediaan."\n\n"Sentuh ""Kembali"" untuk menyambung kepada rangkaian Wi-Fi lain." + "Sentuh ""Seterusnya"" untuk meneruskan dengan persediaan.\n\nSentuh ""Kembali"" untuk menyambung kepada rangkaian Wi-Fi lain." "Segerak didayakan" "Segerak dilumpuhkan" "Ralat penyegerakan." @@ -1676,8 +1695,7 @@ "Denyar pandangan dlm tetingkap yg dilukis dgn GPU" "Menunjukkan lapisan kemas kini perkakasan" "Pancar hijau lapisan perkakasan yg dikemas kini" - "Tunjukkan had lebih GPU" - "Terbaik -> terburuk: biru, hijau, merah muda, merah" + "Nyahpepijat lebih lukis GPU" "Lumpuhkan tindihan atas HW" "Sentiasa gunakan GPU untuk komposit skrin" "Dayakan kesan OpenGL" @@ -1738,11 +1756,11 @@ "Lumpuhkan data latar belakang pada rangkaian mudah alih. Rangkaian bukan mudah alih akan digunakan jika tersedia." "Untuk menyekat data latar belakang untuk aplikasi ini, mula-mula tetapkan had data mudah alih." "Hadkan data latar belakang?" - "Ciri ini boleh menyebabkan apl yang bergantung kepada data latar belakang berhenti berfungsi apabila hanya rangkaian bermeter yang tersedia."\n\n"Anda boleh menemui lebih banyak kawalan penggunaan data dalam tetapan yang tersedia dalam apl." + "Ciri ini boleh menyebabkan apl yang bergantung kepada data latar belakang berhenti berfungsi apabila hanya rangkaian bermeter yang tersedia.\n\nAnda boleh menemui lebih banyak kawalan penggunaan data dalam tetapan yang tersedia dalam apl." "Menyekat data latar belakang hanya boleh dilakukan apabila anda telah menetapkan had data mudah alih." "Hidupkan auto-segerak data?" - "Sebarang perubahan yang anda buat kepada akaun anda di web akan disalin secara automatik ke tablet anda."\n\n"Sesetengah akaun juga boleh secara automatik menyalin sebarang perubahan yang anda buat di tablet ke web. Akaun Google juga berfungsi begini."\n\n"Untuk memilih jenis maklumat yang hendak disegerakkan dalam setiap akaun, pergi ke Tetapan > Akaun." - "Sebarang perubahan yang anda buat kepada akaun anda di web akan disalin secara automatik ke telefon anda."\n\n"Sesetengah akaun juga boleh secara automatik menyalin sebarang perubahan yang anda buat di telefon ke web. Akaun Google juga berfungsi begini."\n\n"Untuk memilih maklumat jenis apa untuk disegerakkan dalam setiap akaun, pergi ke Tetapan > Akaun." + "Sebarang perubahan yang anda buat kepada akaun anda di web akan disalin secara automatik ke tablet anda.\n\nSesetengah akaun juga boleh secara automatik menyalin sebarang perubahan yang anda buat di tablet ke web. Akaun Google juga berfungsi begini.\n\nUntuk memilih jenis maklumat yang hendak disegerakkan dalam setiap akaun, pergi ke Tetapan > Akaun." + "Sebarang perubahan yang anda buat kepada akaun anda di web akan disalin secara automatik ke telefon anda.\n\nSesetengah akaun juga boleh secara automatik menyalin sebarang perubahan yang anda buat di telefon ke web. Akaun Google juga berfungsi begini.\n\nUntuk memilih maklumat jenis apa untuk disegerakkan dalam setiap akaun, pergi ke Tetapan > Akaun." "Matikan auto-segerak data?" "Ini akan memelihara data dan penggunaan bateri, tetapi anda perlu menyegerakkan setiap akaun secara manual untuk mengumpul maklumat terkini. Dan anda takkan menerima pemberitahuan apabila kemas kini berlaku." "Tarikh tetapan semula kitaran penggunaan" @@ -1751,12 +1769,12 @@ "Tetapkan amaran penggunaan data" "Tetapkan had penggunaan data" "Mengehadkan penggunaan data" - "Sambungan data mudah alih anda akan dilumpuhkan apabila mencapai had tertentu."\n\n"Memandangkan tablet anda yang mengukur penggunaan data anda dan pembawa anda mungkin mengira penggunaan secara berbeza, pertimbangkan menggunakan had konservatif." - "Sambungan data mudah alih anda akan dilumpuhkan apabila mencapai had tertentu."\n\n"Memandangkan telefon anda yang mengukur penggunaan data anda dan pembawa anda mungkin mengira penggunaan secara berbeza, pertimbangkan menggunakan had konservatif." + "Sambungan data mudah alih anda akan dilumpuhkan apabila mencapai had tertentu.\n\nMemandangkan tablet anda yang mengukur penggunaan data anda dan pembawa anda mungkin mengira penggunaan secara berbeza, pertimbangkan menggunakan had konservatif." + "Sambungan data mudah alih anda akan dilumpuhkan apabila mencapai had tertentu.\n\nMemandangkan telefon anda yang mengukur penggunaan data anda dan pembawa anda mungkin mengira penggunaan secara berbeza, pertimbangkan menggunakan had konservatif." "Hadkan data latar belakang?" "Jika anda menghadkan data mudah alih latar belakang, beberapa apl dan perkhidmatan tidak akan berfungsi melainkan anda bersambung ke rangkaian Wi-Fi." - "Jika anda mengehadkan data mudah alih latar belakang, sesetengah apl dan perkhidmatan tidak akan berfungsi melainkan anda bersambung ke rangkaian Wi-Fi."\n\n"Tetapan ini melibatkan semua pengguna pada tablet ini." - "Jika anda mengehadkan data mudah alih latar belakang, sesetengah apl dan perkhidmatan tidak akan berfungsi melainkan anda bersambung ke rangkaian Wi-Fi."\n\n"Tetapan ini melibatkan semua pengguna pada telefon ini." + "Jika anda mengehadkan data mudah alih latar belakang, sesetengah apl dan perkhidmatan tidak akan berfungsi melainkan anda bersambung ke rangkaian Wi-Fi.\n\nTetapan ini melibatkan semua pengguna pada tablet ini." + "Jika anda mengehadkan data mudah alih latar belakang, sesetengah apl dan perkhidmatan tidak akan berfungsi melainkan anda bersambung ke rangkaian Wi-Fi.\n\nTetapan ini melibatkan semua pengguna pada telefon ini." "^1"" ""^2"\n"amaran" "^1"" ""^2"\n"had" "Apl dialih keluar" @@ -1843,8 +1861,8 @@ "Pengguna" "Profil terhad" "Tambah pengguna baharu" - "Anda boleh berkongsi peranti ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna mempunyai ruang mereka sendiri yang boleh diperibadikan dengan apl mereka sendiri, kertas dinding dan sebagainya. Pengguna juga boleh melaraskan tetapan tablet seperti Wi-Fi yang melibatkan semua orang."\n\n"Selepas anda membuat pengguna baharu, orang itu perlu melalui proses persediaan."\n\n"Mana-mana pengguna boleh meluluskan kebenaran kemas kini apl bagi pihak pengguna lain." - "Selepas anda membuat pengguna baharu, orang itu perlu melalui proses persediaan."\n\n"Mana-mana pengguna boleh meluluskan kebenaran kemas kini apl bagi pihak pengguna lain." + "Anda boleh berkongsi peranti ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna mempunyai ruang mereka sendiri yang boleh diperibadikan dengan apl mereka sendiri, kertas dinding dan sebagainya. Pengguna juga boleh melaraskan tetapan tablet seperti Wi-Fi yang melibatkan semua orang.\n\nSelepas anda membuat pengguna baharu, orang itu perlu melalui proses persediaan.\n\nMana-mana pengguna boleh meluluskan kebenaran kemas kini apl bagi pihak pengguna lain." + "Selepas anda membuat pengguna baharu, orang itu perlu melalui proses persediaan.\n\nMana-mana pengguna boleh meluluskan kebenaran kemas kini apl bagi pihak pengguna lain." "Sediakan pengguna sekarang?" "Pastikan orang itu tersedia untuk mengambil tablet dan menyediakan ruangnya" "Sediakan profil sekarang?" @@ -1875,6 +1893,9 @@ "Tetapan ini melibatkan semua pengguna pada telefon ini." "Tukar bahasa" "Tukar saiz fon" + "Sekatan" + "Alih keluar sekatan" + "Tukar PIN" "Tunjukkan pemberitahuan" "Bantuan" "Akaun untuk kandungan" diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml index 0a2c15ede65..3ee445d1908 100644 --- a/res/values-nb/arrays.xml +++ b/res/values-nb/arrays.xml @@ -233,7 +233,8 @@ "Posisjon" "Personal" "Meldinger" - "Enhet" + "Medier" + "Enhet"
    "anslått posisjon" @@ -267,6 +268,17 @@ "spill av lyd" "lesing av utklippstavlen" "endring av utklippstavlen" + "medieknapper" + "audiofokus" + "hovedvolum" + "stemmevolum" + "ringevolum" + "medievolum" + "alarmvolum" + "varselvolum" + "bluetooth-volum" + "hold aktiv" + "overvåk posisjon" "Sted" @@ -300,12 +312,33 @@ "Spill av lyd" "Lesing av utklippstavlen" "Endring av utklippstavlen" + "Medieknapper" + "Audiofokus" + "Hovedvolum" + "Stemmevolum" + "Ringevolum" + "Medievolum" + "Alarmvolum" + "Varselvolum" + "Bluetooth-volum" + "Hold aktiv" + "Posisjon" "Kort" "Middels" "Lang" + + "Dalvik" + "ART" + "ART (feilsøking)" + + + "Bruk Dalvik" + "Bruk ART" + "Bruk ART-delversjonen for feilsøking" + "Kontrollér aldri" "Se kun etter DRM-innhold" @@ -367,6 +400,11 @@ "På skjermen som linjer" "adb shell dumpsys gfxinfo" + + "Av" + "Vis overtrekksområder" + "Vis overtrekksteller" + "Standard grense" "Ingen bakgrunnsprosesser" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index cf63a7abf0d..91a4d8a1a16 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -275,8 +275,8 @@ "Du har mistet datatilkobling fordi du forlot hjemmenettet med dataroaming av." "Slå på" "Å tillate roaming kan medføre høye datakostnader." - "Når du tillater roaming, kan dette føre til høye datakostnader."\n\n"Denne innstillingen påvirker alle brukerne på dette nettbrettet." - "Når du tillater roaming, kan dette føre til høye datakostnader."\n\n"Denne innstillingen påvirker alle brukerne på denne telefonen." + "Når du tillater roaming, kan dette føre til høye datakostnader.\n\nDenne innstillingen påvirker alle brukerne på dette nettbrettet." + "Når du tillater roaming, kan dette føre til høye datakostnader.\n\nDenne innstillingen påvirker alle brukerne på denne telefonen." "Vil du tillate roaming?" "Operatør" "Velg en nettverksoperatør" @@ -322,8 +322,8 @@ "Krev personlig tallkode eller passord for å dekryptere nettbrettet hver gang du slår det på" "Numerisk personlig kode eller passord kreves for å dekryptere telefonen hver gang du slår den på" "Kryptert" - "Du kan kryptere kontoene dine, innstillinger, nedlastede apper og tilhørende data, mediefiler og andre filer. Når du krypterer nettbrettet ditt, må du skrive inn en numerisk PIN-kode eller et passord for å dekryptere nettbrettet hver gang du slår det på. Du kan ikke fjerne krypteringen av nettbrettet uten å gjennomføre en tilbakestilling til fabrikkinnstillingene, noe som fører til at alle dataene blir slettet."\n\n"Det tar minst én time å gjennomføre krypteringen. Du må starte med fulladet batteri og sørge for at nettbrettet er koblet til et strømuttak helt til krypteringen er fullført. Hvis du avbryter krypteringsprosessen, mister du deler av eller alle dataene dine." - "Du kan kryptere kontoene dine, innstillinger, nedlastede apper og tilhørende data, mediefiler og andre filer. Når du krypterer telefonen din, må du skrive inn en numerisk PIN-kode eller et passord for å dekryptere telefonen hver gang du slår den på. Du kan ikke fjerne krypteringen av telefonen uten å gjennomføre en tilbakestilling til fabrikkinnstillingene, noe som fører til at alle dataene blir slettet."\n\n"Det tar minst én time å gjennomføre krypteringen. Du må starte med fulladet batteri og sørge for at telefonen er koblet til et strømuttak helt til krypteringen er fullført. Hvis du avbryter krypteringsprosessen, mister du deler av eller alle dataene dine." + "Du kan kryptere kontoene dine, innstillinger, nedlastede apper og tilhørende data, mediefiler og andre filer. Når du krypterer nettbrettet ditt, må du skrive inn en numerisk PIN-kode eller et passord for å dekryptere nettbrettet hver gang du slår det på. Du kan ikke fjerne krypteringen av nettbrettet uten å gjennomføre en tilbakestilling til fabrikkinnstillingene, noe som fører til at alle dataene blir slettet.\n\nDet tar minst én time å gjennomføre krypteringen. Du må starte med fulladet batteri og sørge for at nettbrettet er koblet til et strømuttak helt til krypteringen er fullført. Hvis du avbryter krypteringsprosessen, mister du deler av eller alle dataene dine." + "Du kan kryptere kontoene dine, innstillinger, nedlastede apper og tilhørende data, mediefiler og andre filer. Når du krypterer telefonen din, må du skrive inn en numerisk PIN-kode eller et passord for å dekryptere telefonen hver gang du slår den på. Du kan ikke fjerne krypteringen av telefonen uten å gjennomføre en tilbakestilling til fabrikkinnstillingene, noe som fører til at alle dataene blir slettet.\n\nDet tar minst én time å gjennomføre krypteringen. Du må starte med fulladet batteri og sørge for at telefonen er koblet til et strømuttak helt til krypteringen er fullført. Hvis du avbryter krypteringsprosessen, mister du deler av eller alle dataene dine." "Krypter nettbrett" "Krypter telefon" "Lad batteriet og prøv på nytt." @@ -339,8 +339,8 @@ "Prøv på nytt om ^1 sekunder." "Skriv inn passordet" "Kryptering mislykket" - "Krypteringen ble avbrutt og kan ikke fullføres. Dette betyr at dataene på nettbrettet ditt ikke lenger er tilgjengelige."\n\n"For å fortsette å bruke nettbrettet, må du gjennomføre en tilbakestilling til fabrikkstandard. Når du konfigurerer nettbrettet etter tilbakestillingen, får du mulighet til å gjenopprette data som ble sikkerhetskopiert til Google-kontoen din." - "Krypteringen ble avbrutt og kan ikke fullføres. Dette betyr at dataene på telefonen din ikke lenger er tilgjengelige."\n\n"For å fortsette å bruke telefonen, må du gjennomføre en tilbakestilling til fabrikkstandard. Når du konfigurerer telefonen etter tilbakestillingen, får du mulighet til å gjenopprette data som ble sikkerhetskopiert til Google-kontoen din." + "Krypteringen ble avbrutt og kan ikke fullføres. Dette betyr at dataene på nettbrettet ditt ikke lenger er tilgjengelige.\n\nFor å fortsette å bruke nettbrettet, må du gjennomføre en tilbakestilling til fabrikkstandard. Når du konfigurerer nettbrettet etter tilbakestillingen, får du mulighet til å gjenopprette data som ble sikkerhetskopiert til Google-kontoen din." + "Krypteringen ble avbrutt og kan ikke fullføres. Dette betyr at dataene på telefonen din ikke lenger er tilgjengelige.\n\nFor å fortsette å bruke telefonen, må du gjennomføre en tilbakestilling til fabrikkstandard. Når du konfigurerer telefonen etter tilbakestillingen, får du mulighet til å gjenopprette data som ble sikkerhetskopiert til Google-kontoen din." "Bytt inndatametode" "Velg skjermlås" "Velg reservelås" @@ -514,6 +514,7 @@ "Kobler til" "Tilkoblet" "Tilgjengelig" + "I bruk" "Skjerminnstillinger" "Vil du koble fra?" "Dette avslutter tilkoblingen med:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Av" "Utilgjengelig fordi nærfeltskommunikasjon (NFC) er slått av" "Android Beam" - "Når denne funksjonen er slått på, kan du overføre appinnhold til en annen enhet som støtter nærfeltskommunikasjon (NFC). Du gjør dette ved å holde enhetene tett sammen. Du kan for eksempel trådløst overføre nettsider, YouTube-videoer, kontakter fra Personer og mye mer."\n\n"Du bare holder enhetene mot hverandre (helst rygg mot rygg), og trykker på skjermen. Appen avgjør hva som blir overført." + "Når denne funksjonen er slått på, kan du overføre appinnhold til en annen enhet som støtter nærfeltskommunikasjon (NFC). Du gjør dette ved å holde enhetene tett sammen. Du kan for eksempel trådløst overføre nettsider, YouTube-videoer, kontakter fra Personer og mye mer.\n\nDu bare holder enhetene mot hverandre (helst rygg mot rygg), og trykker på skjermen. Appen avgjør hva som blir overført." "Oppdaging av nettverkstjenester" "Tillat at andre enheter oppdager apper på denne enheten" "Wi-Fi" @@ -620,7 +621,7 @@ "Sikret med %1$s" ", sikret med %1$s" "Ingen" - "%1$s ønsker å bruke nettverksskanning, også når Wi-Fi er slått av, for bedre posisjonsnøyaktighet og andre formål. "\n\n"Vil du tillate dette for alle apper som prøver å skanne?" + "%1$s ønsker å bruke nettverksskanning, også når Wi-Fi er slått av, for bedre posisjonsnøyaktighet og andre formål. \n\nVil du tillate dette for alle apper som prøver å skanne?" "Tillat" "Avvis" "Koble til" @@ -632,8 +633,8 @@ "Avbryt" "Hopp over uansett" "Ikke hopp over" - "ADVARSEL: Du kan pådra deg ekstra datakostnader fra operatøren."\n\n"Nettbrettkonfigureringen kan kreve betydelig nettverksaktivitet." - "ADVARSEL: Du kan pådra deg ekstra datakostnader fra operatøren."\n\n"Telefonkonfigureringen kan kreve betydelig nettverksaktivitet." + "ADVARSEL: Du kan pådra deg ekstra datakostnader fra operatøren.\n\nNettbrettkonfigureringen kan kreve betydelig nettverksaktivitet." + "ADVARSEL: Du kan pådra deg ekstra datakostnader fra operatøren.\n\nTelefonkonfigureringen kan kreve betydelig nettverksaktivitet." "ADVARSEL: Nettbrettet kan ikke bekrefte at programvaren din er oppdatert uten Internett-tilkobling." "ADVARSEL: Telefonen kan ikke bekrefte at programvaren din er oppdatert uten Internett-tilkobling." "Nettbrettet kunne ikke koble til Wi-Fi-nettverket." @@ -773,9 +774,9 @@ "SIM-kode for PIN-kort" "Feil personlig kode" "De personlige kodene samsvarer ikke" - "Kan ikke endre personlig kode."\n"Muligens feil kode." + "Kan ikke endre personlig kode.\nMuligens feil kode." "PIN-koden for SIM-kortet ble endret." - "Kan ikke endre SIM-kortlåsens tilstand."\n"Muligens feil personlig kode." + "Kan ikke endre SIM-kortlåsens tilstand.\nMuligens feil personlig kode." "OK" "Avbryt" "Status for nettbrettet" @@ -918,9 +919,9 @@ "Fabrikkinnstillinger" "Sletter alle data på nettbrettet" "Fjern alle data fra telefonen" - "Dette kommer til å slette alle data fra nettbrettets ""interne lagringsplass"", herunder:"\n\n
  • "Google-kontoen din"
  • \n
  • "Data og innstillinger for system og apper"
  • \n
  • "Nedlastede apper"
  • - "Dette vil slette alle data fra telefonens ""interne lagringsplass"", herunder:"\n\n
  • "Google-kontoen din"
  • \n
  • "Data og innstillinger for system og apper"
  • \n
  • "Nedlastede apper"
  • - \n\n"Du er for øyeblikket pålogget følgende kontoer:"\n + "Dette kommer til å slette alle data fra nettbrettets ""interne lagringsplass"", herunder:\n\n"
  • "Google-kontoen din"
  • \n
  • "Data og innstillinger for system og apper"
  • \n
  • "Nedlastede apper"
  • + "Dette vil slette alle data fra telefonens ""interne lagringsplass"", herunder:\n\n"
  • "Google-kontoen din"
  • \n
  • "Data og innstillinger for system og apper"
  • \n
  • "Nedlastede apper"
  • + \n\n"Du er for øyeblikket pålogget følgende kontoer:\n"
  • "Musikk"
  • \n
  • "Bilder"
  • \n
  • "Andre brukerdata"
  • \n\n"For å slette musikk, bilder og andre brukerdata må ""USB-lageret"" tømmes." \n\n"For å slette musikk, bilder og andre brukerdata, må ""SD-kortet"" tømmes." @@ -1105,7 +1106,7 @@ "Vis bufrede prosesser" "Tilbakestill app-innstillingene" "Vil du tilbakestille app-innstillingene?" - "Dette tilbakestiller alle innstillingene for:"\n\n" "
  • "Deaktiverte apper"
  • \n" "
  • "Varsler for deaktiverte apper"
  • \n" "
  • "Standard apper for handlinger"
  • \n" "
  • "Bakgrunnsdatabegrensninger for apper"
  • \n\n" Du mister ingen appdata."
    + "Dette tilbakestiller alle innstillingene for:\n\n "
  • "Deaktiverte apper"
  • \n" "
  • "Varsler for deaktiverte apper"
  • \n" "
  • "Standard apper for handlinger"
  • \n" "
  • "Bakgrunnsdatabegrensninger for apper"
  • \n\n" Du mister ingen appdata."
    "Tilbakestill apper" "Styr plass" "Filter" @@ -1240,9 +1241,7 @@ "Bytt ved å trykke på Ctrl+Mellomromstasten" "Standard" "Tastaturoppsett" - "Ordliste" - "Personlig ordbok" - "Personlige ordbøker" + "Personlig ordliste" "Legg til" "Legg til ordliste" @@ -1303,6 +1302,11 @@ "Inkluder alternativet for å utføre feilrapport i batterimenyen" "Forbli våken" "Skjermen blir aldri svart under lading" + "Aktiver Bluetooth HCI snoop-logg" + "Samle alle Bluetooth HCI-pakker i en fil" + "Velg kjøretid" + "Velg kjøretid" + "Vil du starte på nytt for å endre kjøretiden fra %1$s til %2$s?" "Tillat simulert posisjon" "Tillat bruk av simulerte GPS-koordinater" "Aktiver USB-debugging?" @@ -1315,11 +1319,13 @@ "Beskytt USB-lagring" "Apper må be om tillatelse til å lese USB-lagring" "Vil du beskytte USB-lagringen?" - "Når USB-lagring er beskyttet, må apper be om tillatelse til å lese data fra ekstern lagring."\n\n"Enkelte apper fungerer ikke før utviklerne har oppdatert dem." + "Når USB-lagring er beskyttet, må apper be om tillatelse til å lese data fra ekstern lagring.\n\nEnkelte apper fungerer ikke før utviklerne har oppdatert dem." "Beskytt SD-kort" "Apper må be om tillatelse til å lese SD-kort" "Vil du beskytte SD-kortet?" - "Når SD-kortet er beskyttet, må apper be om tillatelse til å lese data fra ekstern lagring."\n\n"Enkelte apper fungerer ikke før utviklerne har oppdatert dem." + "Når SD-kortet er beskyttet, må apper be om tillatelse til å lese data fra ekstern lagring.\n\nEnkelte apper fungerer ikke før utviklerne har oppdatert dem." + "Lokal terminal" + "Aktiver terminalappen som gir lokal kommandolistetilgang" "Velg gadget" "Velg skrivebordselement" "Vil du opprette modulen og gi tilgang?" @@ -1340,11 +1346,11 @@ "Tjenester" "System" "Forstørrelsesbevegelser" - "Når denne funksjonen er aktivert, kan du zoome inn og ut ved å trykke tre ganger på skjermen."\n\n"Når du har zoomet inn kan du:"\n
    • "Panorere: Dra to eller flere fingre over skjermen."
    • \n
    • "Tilpasse innzoomingen: Knip sammen eller spre fra hverandre to eller flere fingre."
    \n\n"Du kan også mildertidig forstørre det som er under fingeren din ved å trykke tre ganger og holde fingeren nede. Mens du forstørrer på denne måten kan du dra fingeren rundt for å se på forskjellige deler av skjermen. Løft fingeren din for å gå tilbake til den forrige visningen."\n\n"Merk: Å trykke tre ganger for å forstørre fungerer overalt unntatt på tastaturet og navigasjonsraden."
    + "Når denne funksjonen er aktivert, kan du zoome inn og ut ved å trykke tre ganger på skjermen.\n\nNår du har zoomet inn kan du:\n"
    • "Panorere: Dra to eller flere fingre over skjermen."
    • \n
    • "Tilpasse innzoomingen: Knip sammen eller spre fra hverandre to eller flere fingre."
    \n\n"Du kan også mildertidig forstørre det som er under fingeren din ved å trykke tre ganger og holde fingeren nede. Mens du forstørrer på denne måten kan du dra fingeren rundt for å se på forskjellige deler av skjermen. Løft fingeren din for å gå tilbake til den forrige visningen.\n\nMerk: Å trykke tre ganger for å forstørre fungerer overalt unntatt på tastaturet og navigasjonsraden."
    "Snarvei for tilgjengelighet" "På" "Av" - "Når denne funksjonen er slått på, kan du raskt aktivere tilgjengelighetsfunksjoner i to trinn:"\n\n"Trinn 1: Trykk og hold inne av/på-knappen til du hører en lyd eller føler en vibrasjon."\n\n"Trinn 2: Trykk og hold to fingre på skjermen til du hører en bekreftelse."\n\n"Hvis enheten har flere brukere, får du midlertidig aktivert tilgjengelighet til enheten låses opp." + "Når denne funksjonen er slått på, kan du raskt aktivere tilgjengelighetsfunksjoner i to trinn:\n\nTrinn 1: Trykk og hold inne av/på-knappen til du hører en lyd eller føler en vibrasjon.\n\nTrinn 2: Trykk og hold to fingre på skjermen til du hører en bekreftelse.\n\nHvis enheten har flere brukere, får du midlertidig aktivert tilgjengelighet til enheten låses opp." "Stor tekst" "Skjermforstørrelse" "Automatisk oppdatering av skjermforstørrelsen" @@ -1366,6 +1372,16 @@ "Talkback gir muntlig tilbakemelding for å hjelpe blinde og svaksynte brukere. Vil du installere denne appen gratis fra Google Play?" "Beskrivelse ble ikke oppgitt." "Innstillinger" + "Skriver ut" + "Utskriftsinnstillinger" + "Tjenester" + "Vil du bruke %1$s?" + "%1$s kan motta dokumenter du skriver ut. Disse dokumentene kan inneholde private data." + "Ingen tjenester er installert" + "Innstillinger" + "Legg til skrivere" + "På" + "Av" "Batteri" "Hva som har brukt batteri" "Batteribruksdata ikke tilgj." @@ -1405,8 +1421,10 @@ "Wi-Fi kjører" "Nettbrett" "Telefon" - "Data sendt" - "Data mottatt" + "Mobildata sendt" + "Mobildata mottatt" + "Wi-Fi-data sendt" + "Wi-Fi-data mottatt" "Lyd" "Video" "Tid på" @@ -1460,6 +1478,7 @@ "Stemmeleie" "Endrer tonehøyden teksten sies med" "Språk" + "Språk er ikke valgt" "Velger språkspesifikk stemme" "Lytt til et eksempel" "Spill en kort demonstrasjon av talesyntesen" @@ -1594,7 +1613,7 @@ "EAP støttes ikke." "Du kan ikke konfigurere en EAP Wi-Fi-tilkobling under konfigurasjonen. Etter konfigurasjonen kan dette gjøres i Innstillinger > Trådløst og nettverk." "Tilkoblingen kan ta noen minutter" - "Trykk på ""Neste"" for å fortsette konfigurasjonen."\n\n"Trykk på ""Tilbake"" for å koble til et annet Wi-Fi-nettverk." + "Trykk på ""Neste"" for å fortsette konfigurasjonen.\n\nTrykk på ""Tilbake"" for å koble til et annet Wi-Fi-nettverk." "Synkronisering aktivert" "Synkronisering deaktivert" "Synkroniseringsfeil." @@ -1676,8 +1695,7 @@ "Fremhev visninger i vinduer når tegnet med GPU" "Vis opp. for mask.varelag" "La maskinvarelag blinke i grønt når oppdatert" - "Se GPU-overforbruk" - "Fra best til verst: blå, grønn, lyserød, rød" + "Feilsøk GPU-overtrekk" "Deaktiver HW-overlegg" "Bruk alltid GPU for skjermsammensetting" "Aktiver OpenGL-spor" @@ -1738,11 +1756,11 @@ "Slå av bakgrunnsdata på mobilnettverk. Wi-Fi brukes hvis tilgj." "Hvis du ønsker å begrense bakgrunnsdata for denne appen, må du først angi en grense for bruk av mobildata." "Vil du begrense bruken av bakgrunnsdata?" - "Denne funksjonen kan gjøre at apper som er avhengig av bakgrunnsdata slutter å fungere når bare mobilnettverk er tilgjengelige."\n\n"Du finner bedre egnede alternativer for databruk i appens innstillinger." + "Denne funksjonen kan gjøre at apper som er avhengig av bakgrunnsdata slutter å fungere når bare mobilnettverk er tilgjengelige.\n\nDu finner bedre egnede alternativer for databruk i appens innstillinger." "Du kan begrense bakgrunnsdata, men bare hvis du har angitt en grense for bruk av mobildata." "Vil du slå på auto-synkronisering?" - "Eventuelle endringer du gjør i kontoene dine på nettet kopieres automatisk til nettbrettet."\n\n"For noen kontoer kopieres også alle endringene du gjør på nettbrettet automatisk til nettet. Google-kontoer fungerer på denne måten."\n\n"For å velge hvilke typer informasjon du vil synkronisere innenfor hver konto, går du til Innstillinger > Kontoer." - "Eventuelle endringer du gjør i kontoene dine på nettet kopieres automatisk til telefonen din."\n\n"For noen kontoer kopieres også alle endringene du gjør på telefonen automatisk til nettet. Google-kontoer fungerer på denne måten."\n\n"For å velge hvilke typer informasjon du vil synkronisere innenfor hver konto, går du til Innstillinger > Kontoer." + "Eventuelle endringer du gjør i kontoene dine på nettet kopieres automatisk til nettbrettet.\n\nFor noen kontoer kopieres også alle endringene du gjør på nettbrettet automatisk til nettet. Google-kontoer fungerer på denne måten.\n\nFor å velge hvilke typer informasjon du vil synkronisere innenfor hver konto, går du til Innstillinger > Kontoer." + "Eventuelle endringer du gjør i kontoene dine på nettet kopieres automatisk til telefonen din.\n\nFor noen kontoer kopieres også alle endringene du gjør på telefonen automatisk til nettet. Google-kontoer fungerer på denne måten.\n\nFor å velge hvilke typer informasjon du vil synkronisere innenfor hver konto, går du til Innstillinger > Kontoer." "Vil du slå av auto-synkronisering?" "Dette bevarer data- og batteribruk, men du må synkronisere hver konto manuelt for å samle ny informasjon. Du kommer ikke til å motta varsler når det gjøres oppdateringer." "Tilbakestillingsdato for brukssyklus" @@ -1751,12 +1769,12 @@ "Angi advarsel for databruk" "Angi grense for databruk" "Begrensning av databruk" - "Mobildatatilkoblingen din blir deaktivert når angitt grense nås."\n\n"Ettersom databruken måles av nettbrettet ditt, som muligens bruker andre metoder for registrering av forbruk enn operatøren din, bør du angi en moderat grense." - "Mobildatatilkoblingen din blir deaktivert når angitt grense nås."\n\n"Ettersom databruken måles av telefonen din, som muligens bruker andre metoder for registrering av forbruk enn operatøren din, bør du angi en moderat grense." + "Mobildatatilkoblingen din blir deaktivert når angitt grense nås.\n\nEttersom databruken måles av nettbrettet ditt, som muligens bruker andre metoder for registrering av forbruk enn operatøren din, bør du angi en moderat grense." + "Mobildatatilkoblingen din blir deaktivert når angitt grense nås.\n\nEttersom databruken måles av telefonen din, som muligens bruker andre metoder for registrering av forbruk enn operatøren din, bør du angi en moderat grense." "Vil du begrense bruken av bakgrunnsdata?" "Hvis du begrenser bakgrunnsmobildata, kan det hende at enkelte apper og tjenester ikke fungerer med mindre du er koblet til et Wi-Fi-nettverk." - "Hvis du begrenser mobildatabruk i bakgrunnen, fungerer ikke enkelte apper og tjenester med mindre du er tilkoblet Wi-Fi-nettverk."\n\n"Denne innstillingen påvirker alle brukerne på dette nettbrettet." - "Hvis du begrenser mobildatabruk i bakgrunnen, fungerer ikke enkelte apper og tjenester med mindre du er tilkoblet Wi-Fi-nettverk."\n\n"Denne innstillingen påvirker alle brukerne på denne telefonen." + "Hvis du begrenser mobildatabruk i bakgrunnen, fungerer ikke enkelte apper og tjenester med mindre du er tilkoblet Wi-Fi-nettverk.\n\nDenne innstillingen påvirker alle brukerne på dette nettbrettet." + "Hvis du begrenser mobildatabruk i bakgrunnen, fungerer ikke enkelte apper og tjenester med mindre du er tilkoblet Wi-Fi-nettverk.\n\nDenne innstillingen påvirker alle brukerne på denne telefonen." "^1"" ""^2"\n"advarsel" "^1"" ""^2"\n"grense" "Fjernede apper" @@ -1843,8 +1861,8 @@ "Bruker" "Begrenset profil" "Legg til ny bruker" - "Du kan dele denne enheten med andre personer ved å opprette flere brukere. Hver bruker får sitt eget område som de kan tilpasse med egne apper, bakgrunner osv. Brukere kan også tilpasse innstillinger på nettbrettet som påvirker alle, for eksempel for Wi-Fi."\n\n"Når du oppretter nye brukere, må de gå gjennom en konfigurasjonsprosess."\n\n"Alle brukere kan godta oppdaterte apptillatelser på vegne av de andre brukerne." - "Når du oppretter nye brukere, må de gå gjennom en konfigureringsprosess."\n\n"Alle brukere kan godta oppdaterte apptillatelser på vegne av de andre brukerne." + "Du kan dele denne enheten med andre personer ved å opprette flere brukere. Hver bruker får sitt eget område som de kan tilpasse med egne apper, bakgrunner osv. Brukere kan også tilpasse innstillinger på nettbrettet som påvirker alle, for eksempel for Wi-Fi.\n\nNår du oppretter nye brukere, må de gå gjennom en konfigurasjonsprosess.\n\nAlle brukere kan godta oppdaterte apptillatelser på vegne av de andre brukerne." + "Når du oppretter nye brukere, må de gå gjennom en konfigureringsprosess.\n\nAlle brukere kan godta oppdaterte apptillatelser på vegne av de andre brukerne." "Konfigurere brukeren nå?" "Sørg for at personen er tilgjengelig for å bruke nettbrettet og konfigurere området sitt" "Vil du konfigurere profilen nå?" @@ -1875,6 +1893,9 @@ "Denne innstillingen påvirker alle brukerne på denne telefonen." "Bytt språk" "Endre skriftstørrelse" + "Begrensninger" + "Fjern begrensningene" + "Endre PIN-koden" "Vis varsler" "Hjelp" "Konto for innhold" diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml index 320a2a17bd7..69abe1ad54f 100644 --- a/res/values-nl/arrays.xml +++ b/res/values-nl/arrays.xml @@ -233,7 +233,8 @@ "Locatie" "Persoonlijk" "Berichten" - "Apparaat" + "Media" + "Apparaat"
    "geschatte locatie" @@ -267,6 +268,17 @@ "audio afspelen" "klembord lezen" "klembord aanpassen" + "mediaknoppen" + "audiofocus" + "hoofdvolume" + "stemvolume" + "beltoonvolume" + "mediavolume" + "alarmvolume" + "meldingsvolume" + "bluetooth-volume" + "ingeschakeld houden" + "monitorlocatie" "Locatie" @@ -300,12 +312,33 @@ "Audio afspelen" "Klembord lezen" "Klembord aanpassen" + "Mediaknoppen" + "Audiofocus" + "Hoofdvolume" + "Stemvolume" + "Beltoonvolume" + "Mediavolume" + "Alarmvolume" + "Meldingsvolume" + "Bluetooth-volume" + "Ingeschakeld houden" + "Locatie" "Kort" "Normaal" "Lang" + + "Dalvik" + "ART" + "ART (foutopsporing)" + + + "Dalvik gebruiken" + "ART gebruiken" + "ART-foutopsporingsbuild gebruiken" + "Nooit controleren" "Alleen controleren op DRM-inhoud" @@ -367,6 +400,11 @@ "Op het scherm als lijnen" "In adb shell dumpsys gfxinfo" + + "Uit" + "Gedeeltes met overbelasting weergeven" + "Teller voor overbelasting weergeven" + "Standaardlimiet" "Geen achtergrondprocessen" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index ef2444570ea..a4a78a8ecc0 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -275,8 +275,8 @@ "De gegevensverbinding is verbroken, omdat u uw thuisnetwerk heeft verlaten terwijl gegevensroaming was uitgeschakeld." "Inschakelen" "Wanneer u gegevensroaming toestaat, kunnen er hoge roamingkosten in rekening worden gebracht." - "Wanneer u gegevensroaming toestaat, kunnen er hoge roamingkosten in rekening worden gebracht."\n\n"Deze instelling is van invloed op alle gebruikers van deze tablet." - "Wanneer u gegevensroaming toestaat, kunnen er hoge roamingkosten in rekening worden gebracht."\n\n"Deze instelling is van invloed op alle gebruikers van deze telefoon." + "Wanneer u gegevensroaming toestaat, kunnen er hoge roamingkosten in rekening worden gebracht.\n\nDeze instelling is van invloed op alle gebruikers van deze tablet." + "Wanneer u gegevensroaming toestaat, kunnen er hoge roamingkosten in rekening worden gebracht.\n\nDeze instelling is van invloed op alle gebruikers van deze telefoon." "Gegevensroaming toestaan?" "Operator selecteren" "Een mobiele provider kiezen" @@ -322,8 +322,8 @@ "Een numerieke PIN-code of wachtwoord vereisen om uw tablet te decoderen wanneer u deze inschakelt" "Een numerieke PIN-code of wachtwoord vereisen om uw telefoon te decoderen wanneer u deze inschakelt" "Gecodeerd" - "U kunt uw account, instellingen, gedownloade apps en de bijbehorende gegevens, media en andere bestanden versleutelen. Zodra u uw tablet heeft versleuteld, moet u telkens een pincode of wachtwoord opgeven om de tablet te coderen wanneer u deze opstart. U kunt het versleutelen van uw tablet uitsluitend ongedaan maken door de fabrieksinstellingen te herstellen. Daarbij worden al uw gegevens gewist."\n\n"Het versleutelen kan een uur of langer duren. U moet beginnen met een volledig opgeladen accu en de tablet moet gedurende het versleutelen op de oplader zijn aangesloten. Als u het versleutelen onderbreekt, kunt u sommige of al uw gegevens kwijtraken." - "U kunt uw account, instellingen, gedownloade apps en de bijbehorende gegevens, media en andere bestanden versleutelen. Zodra u uw telefoon heeft versleuteld, moet u telkens een pincode of wachtwoord opgeven om de telefoon te coderen wanneer u deze opstart. U kunt het versleutelen van uw telefoon uitsluitend ongedaan maken door de fabrieksinstellingen te herstellen. Daarbij worden al uw gegevens gewist."\n\n"Het versleutelen kan een uur of langer duren. U moet beginnen met een volledig opgeladen accu en u moet de telefoon aansluiten op de oplader totdat het versleutelen is voltooid. Als u het versleutelen onderbreekt, kunt u sommige of al uw gegevens kwijtraken." + "U kunt uw account, instellingen, gedownloade apps en de bijbehorende gegevens, media en andere bestanden versleutelen. Zodra u uw tablet heeft versleuteld, moet u telkens een pincode of wachtwoord opgeven om de tablet te coderen wanneer u deze opstart. U kunt het versleutelen van uw tablet uitsluitend ongedaan maken door de fabrieksinstellingen te herstellen. Daarbij worden al uw gegevens gewist.\n\nHet versleutelen kan een uur of langer duren. U moet beginnen met een volledig opgeladen accu en de tablet moet gedurende het versleutelen op de oplader zijn aangesloten. Als u het versleutelen onderbreekt, kunt u sommige of al uw gegevens kwijtraken." + "U kunt uw account, instellingen, gedownloade apps en de bijbehorende gegevens, media en andere bestanden versleutelen. Zodra u uw telefoon heeft versleuteld, moet u telkens een pincode of wachtwoord opgeven om de telefoon te coderen wanneer u deze opstart. U kunt het versleutelen van uw telefoon uitsluitend ongedaan maken door de fabrieksinstellingen te herstellen. Daarbij worden al uw gegevens gewist.\n\nHet versleutelen kan een uur of langer duren. U moet beginnen met een volledig opgeladen accu en u moet de telefoon aansluiten op de oplader totdat het versleutelen is voltooid. Als u het versleutelen onderbreekt, kunt u sommige of al uw gegevens kwijtraken." "Tablet versleutelen" "Telefoon versleutelen" "Laad de accu op en probeer het opnieuw." @@ -339,8 +339,8 @@ "Probeer het over ^1 seconden opnieuw." "Typ uw wachtwoord" "Encryptie mislukt" - "Het coderen is onderbroken en kan niet worden voltooid. Als gevolg hiervan zijn de gegevens op uw tablet niet meer toegankelijk. "\n\n"Als u uw tablet weer wilt gebruiken, moet u de fabrieksinstellingen herstellen. Wanneer u de tablet instelt na het herstel, krijgt u de mogelijkheid gegevens waarvan u een back-up heeft gemaakt in uw Google-account, terug te zetten." - "Het coderen is onderbroken en kan niet worden voltooid. Daardoor zijn de gegevens op uw telefoon niet meer toegankelijk. "\n\n"Als u uw telefoon weer wilt gebruiken, moet u de fabrieksinstellingen herstellen. Wanneer u de telefoon instelt na het herstel, krijgt u de mogelijkheid gegevens terug te zetten waarvan u een back-up heeft gemaakt in uw Google-account." + "Het coderen is onderbroken en kan niet worden voltooid. Als gevolg hiervan zijn de gegevens op uw tablet niet meer toegankelijk. \n\nAls u uw tablet weer wilt gebruiken, moet u de fabrieksinstellingen herstellen. Wanneer u de tablet instelt na het herstel, krijgt u de mogelijkheid gegevens waarvan u een back-up heeft gemaakt in uw Google-account, terug te zetten." + "Het coderen is onderbroken en kan niet worden voltooid. Daardoor zijn de gegevens op uw telefoon niet meer toegankelijk. \n\nAls u uw telefoon weer wilt gebruiken, moet u de fabrieksinstellingen herstellen. Wanneer u de telefoon instelt na het herstel, krijgt u de mogelijkheid gegevens terug te zetten waarvan u een back-up heeft gemaakt in uw Google-account." "Invoermethode schakelen" "Schermvergr. kiezen" "Back-upvergr. kiezen" @@ -514,6 +514,7 @@ "Verbinding maken" "Verbonden" "Beschikbaar" + "In gebruik" "Weergave-instellingen" "Ontkoppelen?" "Hierdoor wordt uw verbinding met:<br><b>%1$s</b> verbroken" @@ -532,7 +533,7 @@ "Uit" "Niet beschikbaar omdat NFC is uitgeschakeld" "Android Beam" - "Wanneer deze functie is ingeschakeld, kunt u app-inhoud overbrengen naar een ander NFC-apparaat door de apparaten bij elkaar te houden. U kunt bijvoorbeeld browserpagina\'s, YouTube-video\'s, contacten uit Personen, en nog veel meer overbrengen."\n\n"Houd de apparaten bij elkaar (meestal met de achterkanten tegen elkaar aan) en raak uw scherm aan. De app bepaalt wat er wordt overgebracht." + "Wanneer deze functie is ingeschakeld, kunt u app-inhoud overbrengen naar een ander NFC-apparaat door de apparaten bij elkaar te houden. U kunt bijvoorbeeld browserpagina\'s, YouTube-video\'s, contacten uit Personen, en nog veel meer overbrengen.\n\nHoud de apparaten bij elkaar (meestal met de achterkanten tegen elkaar aan) en raak uw scherm aan. De app bepaalt wat er wordt overgebracht." "Netwerkservicedetectie" "Apps op andere apparaten toestaan apps op dit apparaat te detecteren" "Wifi" @@ -620,7 +621,7 @@ "Beveiligd met %1$s" ", beveiligd met %1$s" "Geen" - "Om de locatieprecisie te verbeteren en voor andere doeleinden, wil %1$s de netwerkscan inschakelen, zelfs als wifi is uitgeschakeld."\n\n"Dit toestaan voor alle apps die willen scannen?" + "Om de locatieprecisie te verbeteren en voor andere doeleinden, wil %1$s de netwerkscan inschakelen, zelfs als wifi is uitgeschakeld.\n\nDit toestaan voor alle apps die willen scannen?" "Toestaan" "Afwijzen" "Verbinden" @@ -632,8 +633,8 @@ "Annuleren" "Toch overslaan" "Niet overslaan" - "WAARSCHUWING: er worden mogelijk extra kosten voor dataverkeer in rekening gebracht."\n\n"Het instellen van de tablet kan aanzienlijke netwerkactiviteit vereisen." - "WAARSCHUWING: er worden mogelijk extra kosten voor dataverkeer in rekening gebracht."\n\n"Het instellen van de telefoon kan aanzienlijke netwerkactiviteit vereisen." + "WAARSCHUWING: er worden mogelijk extra kosten voor dataverkeer in rekening gebracht.\n\nHet instellen van de tablet kan aanzienlijke netwerkactiviteit vereisen." + "WAARSCHUWING: er worden mogelijk extra kosten voor dataverkeer in rekening gebracht.\n\nHet instellen van de telefoon kan aanzienlijke netwerkactiviteit vereisen." "LET OP: totdat u een internetverbinding heeft, kan de tablet niet verifiëren dat uw software actueel is." "LET OP: totdat u een internetverbinding heeft, kan de telefoon niet verifiëren dat uw software actueel is." "De tablet kan geen verbinding maken met dit wifi-netwerk." @@ -773,9 +774,9 @@ "SIM PIN-code" "Onjuiste pincode" "Pincodes komen niet overeen" - "Kan pincode niet wijzigen."\n"Pincode mogelijk onjuist." + "Kan pincode niet wijzigen.\nPincode mogelijk onjuist." "SIM PIN-code gewijzigd" - "Kan status van simkaartblokkering niet wijzigen."\n"Pincode mogelijk onjuist." + "Kan status van simkaartblokkering niet wijzigen.\nPincode mogelijk onjuist." "OK" "Annuleren" "Tabletstatus" @@ -918,9 +919,9 @@ "Fabrieksinstellingen terug" "Alle gegevens op de tablet wissen" "Alle gegevens op de telefoon wissen" - "Hiermee worden alle gegevens in de ""interne opslag"" van uw tablet gewist, waaronder:"\n\n
  • "Uw Google-account"
  • \n
  • "Gegevens en instellingen van het systeem en de apps"
  • \n
  • "Gedownloade apps"
  • - "Hiermee worden alle gegevens in de ""interne opslag"" van uw telefoon gewist, waaronder:"\n\n
  • "Uw Google-account"
  • \n
  • "Gegevens en instellingen van het systeem en de apps"
  • \n
  • "Gedownloade apps"
  • - \n\n"U bent momenteel aangemeld bij de volgende accounts:"\n + "Hiermee worden alle gegevens in de ""interne opslag"" van uw tablet gewist, waaronder:\n\n"
  • "Uw Google-account"
  • \n
  • "Gegevens en instellingen van het systeem en de apps"
  • \n
  • "Gedownloade apps"
  • + "Hiermee worden alle gegevens in de ""interne opslag"" van uw telefoon gewist, waaronder:\n\n"
  • "Uw Google-account"
  • \n
  • "Gegevens en instellingen van het systeem en de apps"
  • \n
  • "Gedownloade apps"
  • + \n\n"U bent momenteel aangemeld bij de volgende accounts:\n"
  • "Muziek"
  • \n
  • "Foto\'s"
  • \n
  • "Andere gebruikersgegevens"
  • \n\n"Als u muziek, foto\'s en andere gebruikersgegevens wilt wissen, moet de ""USB-opslag"" worden gewist." \n\n"Als u muziek, foto\'s en andere gebruikersgegevens wilt wissen, moet de ""SD-kaart"" worden gewist." @@ -1105,7 +1106,7 @@ "Gecachte processen weerg." "Appvoorkeuren herstellen" "Appvoorkeuren herstellen?" - "Hierdoor worden alle voorkeuren voor de volgende items opnieuw ingesteld:"\n\n" "
  • "Uitgeschakelde apps"
  • \n" "
  • "Meldingen van uitgeschakelde apps"
  • \n" "
  • "Standaardapps voor acties"
  • \n" "
  • "Beperkingen voor achtergrondgegevens van apps"
  • \n\n" Er gaan geen appgegevens verloren."
    + "Hierdoor worden alle voorkeuren voor de volgende items opnieuw ingesteld:\n\n "
  • "Uitgeschakelde apps"
  • \n" "
  • "Meldingen van uitgeschakelde apps"
  • \n" "
  • "Standaardapps voor acties"
  • \n" "
  • "Beperkingen voor achtergrondgegevens van apps"
  • \n\n" Er gaan geen appgegevens verloren."
    "Apps herstellen" "Ruimte beheren" "Filter" @@ -1240,9 +1241,7 @@ "Druk op Ctrl-spatiebalk om te schakelen" "Standaard" "Toetsenbordindelingen" - "Gebruikerswoordenboek" - "Persoonlijk woordenboek" - "Persoonlijke woordenboeken" + "Persoonlijk woordenboek" "Toevoegen" "Toevoegen aan woordenboek" @@ -1303,6 +1302,11 @@ "Optie opnemen in afsluitmenu voor het genereren van een foutenrapport" "Stand-by" "Scherm gaat nooit uit tijdens het opladen" + "Snoop-logbestand voor Bluetooth-HCI inschakelen" + "Alle Bluetooth-HCI-pakketten tot één bestand samenvoegen" + "Runtime selecteren" + "Runtime selecteren" + "Opnieuw opstarten om runtime te wijzigen van %1$s in %2$s?" "Neplocaties toestaan" "Neplocaties toestaan" "USB-foutopsporing toestaan?" @@ -1315,11 +1319,13 @@ "USB-opslag beveiligen" "Apps moeten toestemming vragen om de USB-opslag te lezen" "USB-opslag beveiligen?" - "Wanneer de USB-opslag is beveiligd, moeten apps toestemming vragen om gegevens op externe opslagmedia te lezen."\n\n"Sommige apps werken mogelijk pas nadat ze zijn bijgewerkt door hun ontwikkelaars." + "Wanneer de USB-opslag is beveiligd, moeten apps toestemming vragen om gegevens op externe opslagmedia te lezen.\n\nSommige apps werken mogelijk pas nadat ze zijn bijgewerkt door hun ontwikkelaars." "SD-kaart beveiligen" "Apps moeten toestemming vragen om de SD-kaart te lezen" "SD-kaart beveiligen?" - "Wanneer de SD-kaart is beveiligd, moeten apps toestemming vragen om gegevens op externe opslagmedia te lezen."\n\n"Sommige apps werken mogelijk pas nadat ze zijn bijgewerkt door hun ontwikkelaars." + "Wanneer de SD-kaart is beveiligd, moeten apps toestemming vragen om gegevens op externe opslagmedia te lezen.\n\nSommige apps werken mogelijk pas nadat ze zijn bijgewerkt door hun ontwikkelaars." + "Lokale terminal" + "Terminal-app inschakelen die lokale shell-toegang biedt" "Gadget kiezen" "Widget kiezen" "Widget maken en toegang toestaan?" @@ -1340,11 +1346,11 @@ "Services" "Systeem" "Vergrotingsgebaren" - "Wanneer deze functie is ingeschakeld, kunt u in- en uitzoomen door drie keer op het scherm te tikken."\n\n"Wanneer u bent ingezoomd, kunt u:"\n
    • "Pannen: sleep twee of meer vingers over het scherm."
    • \n
    • "Zoomniveau aanpassen: knijp twee of meer vingers samen of spreid deze."
    \n\n"U kunt ook de inhoud onder uw vinger tijdelijk vergroten door drie keer te tikken en vast te houden. In deze vergrote staat kunt u slepen met uw vinger om verschillende gedeelten van het scherm te verkennen. Til uw vinger op om terug te keren naar de vorige staat."\n\n"Opmerking: drie keer tikken voor vergroting werkt overal, behalve voor het toetsenbord en de navigatiebalk."
    + "Wanneer deze functie is ingeschakeld, kunt u in- en uitzoomen door drie keer op het scherm te tikken.\n\nWanneer u bent ingezoomd, kunt u:\n"
    • "Pannen: sleep twee of meer vingers over het scherm."
    • \n
    • "Zoomniveau aanpassen: knijp twee of meer vingers samen of spreid deze."
    \n\n"U kunt ook de inhoud onder uw vinger tijdelijk vergroten door drie keer te tikken en vast te houden. In deze vergrote staat kunt u slepen met uw vinger om verschillende gedeelten van het scherm te verkennen. Til uw vinger op om terug te keren naar de vorige staat.\n\nOpmerking: drie keer tikken voor vergroting werkt overal, behalve voor het toetsenbord en de navigatiebalk."
    "Snelkoppeling voor toegankelijkheid" "Aan" "Uit" - "Wanneer deze functie is ingeschakeld, kunt u de toegankelijkheidsfuncties inschakelen in twee snelle stappen:"\n\n"Stap 1: Houd de aan/uit-knop ingedrukt totdat u een geluid hoort of een trilling voelt."\n\n"Stap 2: Blijf het scherm met twee vingers aanraken totdat u een audiobevestiging hoort."\n\n"Als het apparaat meerdere gebruikers heeft, wordt toegankelijkheid tijdelijk ingeschakeld met deze snelkoppeling op het vergrendelingsscherm totdat het apparaat wordt ontgrendeld." + "Wanneer deze functie is ingeschakeld, kunt u de toegankelijkheidsfuncties inschakelen in twee snelle stappen:\n\nStap 1: Houd de aan/uit-knop ingedrukt totdat u een geluid hoort of een trilling voelt.\n\nStap 2: Blijf het scherm met twee vingers aanraken totdat u een audiobevestiging hoort.\n\nAls het apparaat meerdere gebruikers heeft, wordt toegankelijkheid tijdelijk ingeschakeld met deze snelkoppeling op het vergrendelingsscherm totdat het apparaat wordt ontgrendeld." "Grote tekst" "Schermvergroting" "Schermvergroting automatisch bijwerken" @@ -1366,6 +1372,16 @@ "TalkBack levert gesproken feedback om blinde en slechtziende gebruikers te helpen navigeren. Wilt u deze app gratis installeren via Android Market?" "Geen beschrijving opgegeven." "Instellingen" + "Afdrukken" + "Afdrukinstellingen" + "Services" + "%1$s gebruiken?" + "%1$s kan documenten ontvangen die u afdrukt. Dergelijke documenten kunnen gevoelige gegevens bevatten." + "Geen services geïnstalleerd" + "Instellingen" + "Printers toevoegen" + "Aan" + "Uit" "Accu" "Waarvoor de accu is gebruikt" "Accugebruikgegevens niet beschikbaar." @@ -1405,8 +1421,10 @@ "Wifi actief" "Tablet" "Telefoon" - "Gegevens verzonden" - "Gegevens ontvangen" + "Mobiele gegevens verzonden" + "Mobiele gegevens ontvangen" + "Wifi-gegevens verzonden" + "Wifi-gegevens ontvangen" "Audio" "Video" "Tijd actief" @@ -1460,6 +1478,7 @@ "Hoogte" "Is van invloed op de toon van de gesproken tekst" "Taal" + "Taal niet geselecteerd" "De taalspecifieke stem voor de gesproken tekst instellen" "Luisteren naar een voorbeeld" "Een korte demonstratie van spraaksynthese afspelen" @@ -1594,7 +1613,7 @@ "EAP wordt niet ondersteund." "U kunt een wifi-verbinding van het type EAP niet configureren tijdens het instellen. U kunt dit na het instellen doen via \'Instellingen\' > \'Draadloos en netwerken\'." "Verbinding maken kan enkele minuten duren..." - "Raak ""Volgende"" aan om door te gaan met de configuratie."\n\n"Raak ""Terug"" aan om verbinding te maken met een ander wifi-netwerk." + "Raak ""Volgende"" aan om door te gaan met de configuratie.\n\nRaak ""Terug"" aan om verbinding te maken met een ander wifi-netwerk." "Synchronisatie is ingeschakeld" "Synchroniseren uitgeschakeld" "Synchronisatiefout." @@ -1622,7 +1641,7 @@ "Gmail" "Agenda" "Contacten" - "Welkom bij Google Sync!"" "\n"Een benadering van Google voor de synchronisatie van gegevens, zodat u altijd en overal toegang heeft tot uw contacten, afspraken en nog veel meer." + "Welkom bij Google Sync!"" \nEen benadering van Google voor de synchronisatie van gegevens, zodat u altijd en overal toegang heeft tot uw contacten, afspraken en nog veel meer." "Synchronisatie-instellingen van de app" "Gegevens en synchronisatie" "Wachtwoord wijzigen" @@ -1676,8 +1695,7 @@ "Flash-weergaven in vensters indien getekend met de GPU" "Updaten hardwarelgn wrgvn" "Hardwarelagen knipperen groen bij updates" - "Overbelasting GPU tonen" - "Best naar slechtst: blauw, groen, lichtrood, rood" + "Foutopsporing GPU-overbelasting" "HW-overlays uitschakelen" "GPU altijd gebruiken voor schermcompositing" "OpenGL-sporen inschakelen" @@ -1738,11 +1756,11 @@ "Achtergrondgegevens in mobiele netwerken uitschakelen. Zo mogelijk worden niet-mobiele netwerken gebruikt." "Als u achtergrondgegevens wilt beperken voor deze app, moet u eerst een mobiele gegevenslimiet instellen." "Achtergrondgegevens beperken?" - "Deze functie kan ervoor zorgen dat een app die afhankelijk is van achtergrondgegevens, stopt als er alleen mobiele netwerken beschikbaar zijn."\n\n"U kunt meer geschikte besturingselementen voor gegevensgebruik vinden in de instellingen van de app." + "Deze functie kan ervoor zorgen dat een app die afhankelijk is van achtergrondgegevens, stopt als er alleen mobiele netwerken beschikbaar zijn.\n\nU kunt meer geschikte besturingselementen voor gegevensgebruik vinden in de instellingen van de app." "U kunt achtergrondgegevens alleen beperken als u een mobiele gegevenslimiet heeft ingesteld." "Auto-sync gegevens inschakelen?" - "Wijzigingen die u aanbrengt in uw accounts op internet worden automatisch naar uw tablet gekopieerd."\n\n"Sommige accounts kunnen de wijzigingen die u op uw telefoon aanbrengt ook automatisch naar het account op internet kopiëren. Een Google-account werkt op deze manier."\n\n"Ga naar \'Instellingen\' > \'Accounts\' om te selecteren welke typen gegevens u met elk account wilt synchroniseren." - "Wijzigingen die u aanbrengt in uw accounts op internet worden automatisch naar uw telefoon gekopieerd."\n\n"Sommige accounts kunnen de wijzigingen die u op uw telefoon aanbrengt ook automatisch naar het account op internet kopiëren. Een Google-account werkt op deze manier."\n\n"Ga naar \'Instellingen\' > \'Accounts\' om te selecteren welke typen gegevens u met elk account wilt synchroniseren." + "Wijzigingen die u aanbrengt in uw accounts op internet worden automatisch naar uw tablet gekopieerd.\n\nSommige accounts kunnen de wijzigingen die u op uw telefoon aanbrengt ook automatisch naar het account op internet kopiëren. Een Google-account werkt op deze manier.\n\nGa naar \'Instellingen\' > \'Accounts\' om te selecteren welke typen gegevens u met elk account wilt synchroniseren." + "Wijzigingen die u aanbrengt in uw accounts op internet worden automatisch naar uw telefoon gekopieerd.\n\nSommige accounts kunnen de wijzigingen die u op uw telefoon aanbrengt ook automatisch naar het account op internet kopiëren. Een Google-account werkt op deze manier.\n\nGa naar \'Instellingen\' > \'Accounts\' om te selecteren welke typen gegevens u met elk account wilt synchroniseren." "Auto-sync gegevens uitschakelen?" "Hiermee beperkt u gegevens- en accugebruik. U moet elk account echter handmatig synchroniseren om recente informatie te verzamelen. U ontvangt geen meldingen wanneer er updates zijn." "Herzieningsdatum voor gebruikscyclus" @@ -1751,12 +1769,12 @@ "Waarschuwing voor gegevensverbruik instellen" "Limiet voor gegevensverbruik instellen" "Gegevensgebruik beperken" - "Uw mobiele gegevensverbinding wordt uitgeschakeld wanneer de gespecificeerde limiet is bereikt."\n\n"Aangezien dit gegevensverbruik wordt gemeten door uw tablet en uw provider tot een ander totaal kan komen, kunt u het beste een voorzichtige grens instellen." - "Uw mobiele gegevensverbinding wordt uitgeschakeld wanneer de gespecificeerde limiet is bereikt."\n\n"Aangezien dit gegevensverbruik wordt gemeten door uw telefoon en uw provider tot een ander totaal kan komen, kunt u het beste een voorzichtige grens instellen." + "Uw mobiele gegevensverbinding wordt uitgeschakeld wanneer de gespecificeerde limiet is bereikt.\n\nAangezien dit gegevensverbruik wordt gemeten door uw tablet en uw provider tot een ander totaal kan komen, kunt u het beste een voorzichtige grens instellen." + "Uw mobiele gegevensverbinding wordt uitgeschakeld wanneer de gespecificeerde limiet is bereikt.\n\nAangezien dit gegevensverbruik wordt gemeten door uw telefoon en uw provider tot een ander totaal kan komen, kunt u het beste een voorzichtige grens instellen." "Achtergrondgegevens beperken?" "Als u het gebruik van mobiele achtergrondgegevens beperkt, werken sommige apps en services niet, tenzij u bent verbonden met een wifi-netwerk." - "Als u mobiel gegevensgebruik op de achtergrond beperkt, werken sommige apps en services niet, tenzij u verbonden bent met een wifi-netwerk."\n\n"Deze instelling is van invloed op alle gebruikers van deze tablet." - "Als u mobiel gegevensgebruik op de achtergrond beperkt, werken sommige apps en services niet, tenzij u verbonden bent met een wifi-netwerk."\n\n"Deze instelling is van invloed op alle gebruikers van deze telefoon." + "Als u mobiel gegevensgebruik op de achtergrond beperkt, werken sommige apps en services niet, tenzij u verbonden bent met een wifi-netwerk.\n\nDeze instelling is van invloed op alle gebruikers van deze tablet." + "Als u mobiel gegevensgebruik op de achtergrond beperkt, werken sommige apps en services niet, tenzij u verbonden bent met een wifi-netwerk.\n\nDeze instelling is van invloed op alle gebruikers van deze telefoon." "^1"" ""^2"\n"waarschuwing" "^1"" ""^2"\n"limiet" "Verwijderde apps" @@ -1843,8 +1861,8 @@ "Gebruiker" "Beperkt profiel" "Nieuwe gebruiker toevoegen" - "U kunt dit apparaat met andere mensen delen door extra gebruikers te maken. Elke gebruiker heeft een eigen ruimte die kan worden aangepast met eigen apps, een achtergrond, enzovoort. Gebruikers kunnen ook tabletinstellingen aanpassen, zoals wifi, die effect hebben op alle gebruikers."\n\n"Nadat u een nieuwe gebruiker heeft gemaakt, moet die persoon een configuratieproces volgen."\n\n"Elke gebruiker kan namens alle andere gebruikers bijgewerkte app-machtigingen accepteren." - "Nadat u een nieuwe gebruiker heeft gemaakt, moet die persoon een configuratieproces volgen."\n\n"Elke gebruiker kan namens alle andere gebruikers bijgewerkte app-machtigingen accepteren." + "U kunt dit apparaat met andere mensen delen door extra gebruikers te maken. Elke gebruiker heeft een eigen ruimte die kan worden aangepast met eigen apps, een achtergrond, enzovoort. Gebruikers kunnen ook tabletinstellingen aanpassen, zoals wifi, die effect hebben op alle gebruikers.\n\nNadat u een nieuwe gebruiker heeft gemaakt, moet die persoon een configuratieproces volgen.\n\nElke gebruiker kan namens alle andere gebruikers bijgewerkte app-machtigingen accepteren." + "Nadat u een nieuwe gebruiker heeft gemaakt, moet die persoon een configuratieproces volgen.\n\nElke gebruiker kan namens alle andere gebruikers bijgewerkte app-machtigingen accepteren." "Gebruiker nu instellen?" "Zorg ervoor dat de persoon de tablet kan overnemen om zijn of haar eigen gedeelte te configureren" "Profiel nu instellen?" @@ -1875,6 +1893,9 @@ "Deze instelling is van invloed op alle gebruikers van deze telefoon." "Taal wijzigen" "Lettergrootte wijzigen" + "Beperkingen" + "Beperkingen verwijderen" + "Pincode wijzigen" "Meldingen weergeven" "Help" "Account voor inhoud" diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml index 1a10173f4d3..81801720668 100644 --- a/res/values-pl/arrays.xml +++ b/res/values-pl/arrays.xml @@ -233,7 +233,8 @@ "Lokalizacja" "Osobiste" "Wiadomości" - "Urządzenie" + "Multimedia" + "Urządzenie"
    "przybliżona lokalizacja" @@ -267,6 +268,17 @@ "odtwórz dźwięk" "czytaj schowek" "modyfikuj schowek" + "przyciski multimediów" + "aktywność audio" + "głośność główna" + "głośność mowy" + "głośność dzwonka" + "głośność multimediów" + "głośność alarmu" + "głośność powiadomień" + "głośność Bluetooth" + "utrzymanie aktywności" + "monitorowanie lokalizacji" "Lokalizacja" @@ -300,12 +312,33 @@ "Odtwórz dźwięk" "Czytaj schowek" "Modyfikuj schowek" + "Przyciski multimediów" + "Aktywność audio" + "Głośność główna" + "Głośność mowy" + "Głośność dzwonka" + "Głośność multimediów" + "Głośność alarmu" + "Głośność powiadomień" + "Głośność Bluetooth" + "Utrzymanie aktywności" + "Lokalizacja" "Krótkie" "Średnie" "Długie" + + "Dalvik" + "ART" + "ART (debugowanie)" + + + "Użyj Dalvik" + "Użyj ART" + "Użyj komplikacji debugowania ART" + "Nigdy nie sprawdzaj" "Sprawdzaj tylko w przypadku treści chronionych DRM" @@ -357,16 +390,21 @@ "Stos wywołań funkcji glGetError" - "Wył." + "Wyłączone" "Rysuj nieprostokątny region przycinania na niebiesko" "Wyróżnij testowane polecenia rysowania na zielono" - "Wył." + "Wyłączone" "Na ekranie w postaci pasków" "Na ekranie w postaci linii" "In adb shell dumpsys gfxinfo" + + "Wył." + "Pokaż przerysowywane obszary" + "Pokaż licznik przerysowań" + "Standardowy limit" "Brak procesów w tle" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 0c665e48d78..d088142d1a9 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -275,8 +275,8 @@ "Połączenie transmisji danych zostało utracone, ponieważ opuszczono sieć macierzystą przy wyłączonej opcji danych w roamingu." "Włącz" "Z zezwoleniem na roaming danych mogą się wiązać wysokie opłaty roamingowe." - "Po zezwoleniu na przesyłanie danych w roamingu mogą zostać naliczone znaczne opłaty za roaming."\n\n"To ustawienie obowiązuje wszystkich użytkowników tego tabletu." - "Po zezwoleniu na przesyłanie danych w roamingu mogą zostać naliczone znaczne opłaty za roaming."\n\n"To ustawienie obowiązuje wszystkich użytkowników tego telefonu." + "Po zezwoleniu na przesyłanie danych w roamingu mogą zostać naliczone znaczne opłaty za roaming.\n\nTo ustawienie obowiązuje wszystkich użytkowników tego tabletu." + "Po zezwoleniu na przesyłanie danych w roamingu mogą zostać naliczone znaczne opłaty za roaming.\n\nTo ustawienie obowiązuje wszystkich użytkowników tego telefonu." "Zezwalać na roaming danych?" "Wybór operatora" "Wybierz operatora sieci." @@ -322,8 +322,8 @@ "Wymagaj podania kodu PIN lub hasła w celu odszyfrowania tabletu przy każdym uruchomieniu" "Wymagaj podania kodu PIN lub hasła w celu odszyfrowania telefonu przy każdym uruchomieniu" "Zaszyfrowane" - "Możesz zaszyfrować swoje konta, ustawienia, pobrane aplikacje i ich dane, multimedia oraz inne pliki. Po zaszyfrowaniu tabletu musisz wpisać numeryczny kod PIN lub hasło do odszyfrowania po każdym włączeniu urządzenia. Tablet można odszyfrować jedynie przez przywrócenie danych fabrycznych i usunięcie wszystkich swoich danych."\n\n"Szyfrowanie może potrwać godzinę lub dłużej. Rozpocznij, gdy bateria jest w pełni naładowana i nie odłączaj tabletu od zasilania do chwili ukończenia szyfrowania. Jeśli proces zostanie przerwany, utracisz część lub nawet wszystkie swoje dane." - "Możesz zaszyfrować swoje konta, ustawienia, pobrane aplikacje i ich dane, multimedia oraz inne pliki. Po zaszyfrowaniu telefonu musisz wpisać numeryczny kod PIN lub hasło do odszyfrowania po każdym włączeniu urządzenia. Telefon można odszyfrować jedynie przez przywrócenie danych fabrycznych i usunięcie wszystkich swoich danych."\n\n"Szyfrowanie może potrwać godzinę lub dłużej. Rozpocznij, gdy bateria jest w pełni naładowana i nie odłączaj telefonu od zasilania do chwili ukończenia szyfrowania. Jeśli proces zostanie przerwany, utracisz część lub nawet wszystkie swoje dane." + "Możesz zaszyfrować swoje konta, ustawienia, pobrane aplikacje i ich dane, multimedia oraz inne pliki. Po zaszyfrowaniu tabletu musisz wpisać numeryczny kod PIN lub hasło do odszyfrowania po każdym włączeniu urządzenia. Tablet można odszyfrować jedynie przez przywrócenie danych fabrycznych i usunięcie wszystkich swoich danych.\n\nSzyfrowanie może potrwać godzinę lub dłużej. Rozpocznij, gdy bateria jest w pełni naładowana i nie odłączaj tabletu od zasilania do chwili ukończenia szyfrowania. Jeśli proces zostanie przerwany, utracisz część lub nawet wszystkie swoje dane." + "Możesz zaszyfrować swoje konta, ustawienia, pobrane aplikacje i ich dane, multimedia oraz inne pliki. Po zaszyfrowaniu telefonu musisz wpisać numeryczny kod PIN lub hasło do odszyfrowania po każdym włączeniu urządzenia. Telefon można odszyfrować jedynie przez przywrócenie danych fabrycznych i usunięcie wszystkich swoich danych.\n\nSzyfrowanie może potrwać godzinę lub dłużej. Rozpocznij, gdy bateria jest w pełni naładowana i nie odłączaj telefonu od zasilania do chwili ukończenia szyfrowania. Jeśli proces zostanie przerwany, utracisz część lub nawet wszystkie swoje dane." "Zaszyfruj tablet" "Zaszyfruj telefon" "Naładuj baterię i spróbuj ponownie." @@ -339,8 +339,8 @@ "Spróbuj ponownie za ^1 s." "Wpisz swoje hasło." "Szyfrowanie zakończone niepowodzeniem" - "Szyfrowanie zostało przerwane i nie można go dokończyć. Z tego powodu dane znajdujące się w tablecie nie są już dostępne. "\n\n"Aby dalej używać tabletu, musisz przywrócić dane fabryczne. Podczas konfigurowania po zresetowaniu będziesz mieć możliwość przywrócenia wszelkich danych, których kopia zapasowa została utworzona na koncie Google." - "Szyfrowanie zostało przerwane i nie można go dokończyć. Z tego powodu dane znajdujące się w telefonie nie są już dostępne. "\n\n"Aby dalej używać telefonu, musisz przywrócić dane fabryczne. Podczas konfigurowania po zresetowaniu będziesz mieć możliwość przywrócenia wszelkich danych, których kopia zapasowa została utworzona na koncie Google." + "Szyfrowanie zostało przerwane i nie można go dokończyć. Z tego powodu dane znajdujące się w tablecie nie są już dostępne. \n\nAby dalej używać tabletu, musisz przywrócić dane fabryczne. Podczas konfigurowania po zresetowaniu będziesz mieć możliwość przywrócenia wszelkich danych, których kopia zapasowa została utworzona na koncie Google." + "Szyfrowanie zostało przerwane i nie można go dokończyć. Z tego powodu dane znajdujące się w telefonie nie są już dostępne. \n\nAby dalej używać telefonu, musisz przywrócić dane fabryczne. Podczas konfigurowania po zresetowaniu będziesz mieć możliwość przywrócenia wszelkich danych, których kopia zapasowa została utworzona na koncie Google." "Przełącz metodę wprowadzania" "Wybierz blokadę ekranu" "Wybierz blokadę zapasową" @@ -514,6 +514,7 @@ "Łączenie" "Połączony" "Dostępny" + "W użyciu" "Ustawienia wyświetlacza" "Rozłączyć?" "Spowoduje to zakończenie połączenia z:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Wyłączona" "Niedostępne przy wyłączonym NFC" "Android Beam" - "Po włączeniu tej funkcji możesz przesyłać dane między urządzeniami z funkcją NFC, zbliżając oba aparaty do siebie. Możliwe jest na przykład przesłanie stron z przeglądarki, filmów z YouTube, kontaktów z telefonu itp."\n\n"Wystarczy zetknąć urządzenia ze sobą i dotknąć ekranu. Aplikacja automatycznie określi, jakie dane chcesz przesłać." + "Po włączeniu tej funkcji możesz przesyłać dane między urządzeniami z funkcją NFC, zbliżając oba aparaty do siebie. Możliwe jest na przykład przesłanie stron z przeglądarki, filmów z YouTube, kontaktów z telefonu itp.\n\nWystarczy zetknąć urządzenia ze sobą i dotknąć ekranu. Aplikacja automatycznie określi, jakie dane chcesz przesłać." "Wykrywanie usług sieciowych" "Zezwól aplikacjom z innych urządzeń wykrywać aplikacje na tym urządzeniu" "Wi‑Fi" @@ -620,7 +621,7 @@ "Zabezpieczona za pomocą protokołu %1$s" ", zabezpieczona za pomocą protokołu %1$s" "Brak" - "Aby poprawić dokładność lokalizacji (i w innych celach), %1$s chce włączyć skanowanie sieci – nawet gdy Wi-Fi jest wyłączone."\n\n"Zezwolić na to wszystkim aplikacjom, które chcą wykonywać skanowanie?" + "Aby poprawić dokładność lokalizacji (i w innych celach), %1$s chce włączyć skanowanie sieci – nawet gdy Wi-Fi jest wyłączone.\n\nZezwolić na to wszystkim aplikacjom, które chcą wykonywać skanowanie?" "Zezwól" "Odrzuć" "Połącz" @@ -632,8 +633,8 @@ "Anuluj" "Pomiń mimo to" "Nie pomijaj" - "OSTRZEŻENIE: operator może naliczyć dodatkowe opłaty za transmisję danych."\n\n"Konfiguracja tabletu może wymagać przesłania dużej ilości informacji." - "OSTRZEŻENIE: operator może naliczyć dodatkowe opłaty za transmisję danych."\n\n"Konfiguracja telefonu może wymagać przesłania dużej ilości informacji." + "OSTRZEŻENIE: operator może naliczyć dodatkowe opłaty za transmisję danych.\n\nKonfiguracja tabletu może wymagać przesłania dużej ilości informacji." + "OSTRZEŻENIE: operator może naliczyć dodatkowe opłaty za transmisję danych.\n\nKonfiguracja telefonu może wymagać przesłania dużej ilości informacji." "OSTRZEŻENIE: aby sprawdzić, czy oprogramowanie jest aktualne, tablet musi mieć połączenie z internetem." "OSTRZEŻENIE: aby sprawdzić, czy oprogramowanie jest aktualne, telefon musi mieć połączenie z internetem." "Tablet nie może nawiązać połączenia z tą siecią Wi-Fi." @@ -773,9 +774,9 @@ "Kod PIN do karty SIM" "Błędny kod PIN" "Kody PIN nie są identyczne." - "Nie można zmienić kodu PIN."\n"Wpisany kod PIN może być błędny." + "Nie można zmienić kodu PIN.\nWpisany kod PIN może być błędny." "Kod PIN do karty SIM został pomyślnie zmieniony" - "Nie można zmienić stanu blokady karty SIM."\n"Wpisany kod PIN może być błędny." + "Nie można zmienić stanu blokady karty SIM.\nWpisany kod PIN może być błędny." "OK" "Anuluj" "Stan tabletu" @@ -918,9 +919,9 @@ "Ustawienia fabryczne" "Wymazuje wszystkie dane z tabletu" "Wymazuje wszystkie dane w telefonie" - "Zostaną usunięte wszystkie dane z ""wewnętrznej pamięci"" tabletu, w tym:"\n\n
  • "Dane konta Google"
  • \n
  • "Dane i ustawienia systemu oraz aplikacji"
  • \n
  • "Pobrane aplikacje"
  • - "Zostaną usunięte wszystkie dane z ""wewnętrznej pamięci"" telefonu, w tym:"\n\n
  • "Dane konta Google"
  • \n
  • "Dane i ustawienia systemu oraz aplikacji"
  • \n
  • "Pobrane aplikacje"
  • - \n\n"Zalogowano się na konta:"\n + "Zostaną usunięte wszystkie dane z ""wewnętrznej pamięci"" tabletu, w tym:\n\n"
  • "Dane konta Google"
  • \n
  • "Dane i ustawienia systemu oraz aplikacji"
  • \n
  • "Pobrane aplikacje"
  • + "Zostaną usunięte wszystkie dane z ""wewnętrznej pamięci"" telefonu, w tym:\n\n"
  • "Dane konta Google"
  • \n
  • "Dane i ustawienia systemu oraz aplikacji"
  • \n
  • "Pobrane aplikacje"
  • + \n\n"Zalogowano się na konta:\n"
  • "Muzyka"
  • \n
  • "Zdjęcia"
  • \n
  • "Inne dane użytkownika"
  • \n\n"Aby usunąć muzykę, zdjęcia i inne dane użytkownika, należy wymazać ""nośnik USB""." \n\n"Aby usunąć muzykę, zdjęcia i inne dane użytkownika, należy wymazać ""kartę SD""." @@ -1105,7 +1106,7 @@ "Pokaż procesy z pamięci podręcznej" "Resetuj opcje aplikacji" "Zresetować opcje aplikacji?" - "Zresetowane będą wszystkie ustawienia:"\n\n" "
  • "Wyłączone aplikacje"
  • \n" "
  • "Wyłączone powiadomienia aplikacji"
  • \n" "
  • "Aplikacje domyślne"
  • \n" "
  • "Ograniczenia użycia danych w tle dla aplikacji."
  • \n\n" Nie utracisz żadnych danych."
    + "Zresetowane będą wszystkie ustawienia:\n\n "
  • "Wyłączone aplikacje"
  • \n" "
  • "Wyłączone powiadomienia aplikacji"
  • \n" "
  • "Aplikacje domyślne"
  • \n" "
  • "Ograniczenia użycia danych w tle dla aplikacji."
  • \n\n" Nie utracisz żadnych danych."
    "Resetuj aplikacje" "Zarządzaj rozmiarem" "Filtr" @@ -1240,9 +1241,7 @@ "Control-spacja, by przełączyć" "Domyślna" "Układy klawiatury" - "Słownik użytkownika" - "Słownik osobisty" - "Osobiste słowniki" + "Słownik osobisty" "Dodaj" "Dodaj do słownika" @@ -1303,6 +1302,11 @@ "Dodaj w menu zasilania opcję zgłaszania błędów" "Pozostaw ekran włączony" "Ekran nie będzie gaszony podczas ładowania telefonu" + "Włącz dziennik analizatora snoop Bluetooth HCI" + "Przechwyć wszystkie pakiety Bluetooth HCI do pliku" + "Wybierz czas wykonywania" + "Wybierz czas wykonywania" + "Uruchomić ponownie, by zmienić czas wykonywania z %1$s na %2$s?" "Pozorowanie lokalizacji" "Zezwalaj na pozorowanie lokalizacji" "Czy zezwalać na debugowanie USB?" @@ -1315,11 +1319,13 @@ "Chroń nośnik USB" "Aplikacje muszą prosić o pozwolenie na odczyt nośnika USB" "Włączyć ochronę nośnika USB?" - "Gdy nośnik USB jest chroniony, aplikacje muszą prosić o pozwolenie na odczyt danych z tego nośnika zewnętrznego."\n\n"Niektóre aplikacje mogą przestać działać i wymagać aktualizacji przez programistę." + "Gdy nośnik USB jest chroniony, aplikacje muszą prosić o pozwolenie na odczyt danych z tego nośnika zewnętrznego.\n\nNiektóre aplikacje mogą przestać działać i wymagać aktualizacji przez programistę." "Chroń kartę SD" "Aplikacje muszą prosić o pozwolenie na odczyt karty SD" "Włączyć ochronę karty SD?" - "Gdy karta SD jest chroniona, aplikacje muszą prosić o pozwolenie na odczyt danych z tego nośnika zewnętrznego."\n\n"Niektóre aplikacje mogą przestać działać i wymagać aktualizacji przez programistę." + "Gdy karta SD jest chroniona, aplikacje muszą prosić o pozwolenie na odczyt danych z tego nośnika zewnętrznego.\n\nNiektóre aplikacje mogą przestać działać i wymagać aktualizacji przez programistę." + "Terminal lokalny" + "Włącz terminal, który umożliwia dostęp do powłoki lokalnej" "Wybierz gadżet" "Wybierz widżet" "Utworzyć widżet i zezwolić na dostęp?" @@ -1340,11 +1346,11 @@ "Usługi" "System" "Gesty powiększania" - "Kiedy ta funkcja jest włączona, możesz powiększyć i pomniejszyć obraz, trzykrotnie klikając ekran."\n\n"W trybie powiększenia możesz:"\n
    • "Przesuwać: przeciągnij palcami po ekranie."
    • \n
    • "Regulować powiększenie: ściągnij lub rozsuń palce."
    \n\n"Możesz też tymczasowo powiększyć miejsce pod palcem, klikając trzykrotnie i przytrzymując palec na ekranie. W takim widoku „lupy” możesz przesuwać palcem po ekranie i powiększać różne miejsca. Podniesienie palca spowoduje powrót do poprzedniego widoku."\n\n"Uwaga: trzykrotne kliknięcie powiększające działa wszędzie poza klawiaturą i paskiem nawigacji."
    + "Kiedy ta funkcja jest włączona, możesz powiększyć i pomniejszyć obraz, trzykrotnie klikając ekran.\n\nW trybie powiększenia możesz:\n"
    • "Przesuwać: przeciągnij palcami po ekranie."
    • \n
    • "Regulować powiększenie: ściągnij lub rozsuń palce."
    \n\n"Możesz też tymczasowo powiększyć miejsce pod palcem, klikając trzykrotnie i przytrzymując palec na ekranie. W takim widoku „lupy” możesz przesuwać palcem po ekranie i powiększać różne miejsca. Podniesienie palca spowoduje powrót do poprzedniego widoku.\n\nUwaga: trzykrotne kliknięcie powiększające działa wszędzie poza klawiaturą i paskiem nawigacji."
    "Skrót ułatwień dostępu" "Wł." "Wył." - "Kiedy ta funkcja jest aktywna, możesz szybko włączyć ułatwienia dostępu w dwóch krokach:"\n\n"Krok 1: naciśnij i przytrzymaj przycisk zasilania, aż usłyszysz sygnał lub poczujesz wibracje."\n\n"Krok 2: naciśnij i przytrzymaj ekran dwoma palcami, aż usłyszysz potwierdzenie dźwiękowe."\n\n"Jeśli z tego urządzenia korzysta kilka osób, użycie tego skrótu na zablokowanym ekranie spowoduje tymczasowe włączenie ułatwień dostępu do momentu zablokowania urządzenia." + "Kiedy ta funkcja jest aktywna, możesz szybko włączyć ułatwienia dostępu w dwóch krokach:\n\nKrok 1: naciśnij i przytrzymaj przycisk zasilania, aż usłyszysz sygnał lub poczujesz wibracje.\n\nKrok 2: naciśnij i przytrzymaj ekran dwoma palcami, aż usłyszysz potwierdzenie dźwiękowe.\n\nJeśli z tego urządzenia korzysta kilka osób, użycie tego skrótu na zablokowanym ekranie spowoduje tymczasowe włączenie ułatwień dostępu do momentu zablokowania urządzenia." "Duży tekst" "Powiększenie ekranu" "Automatyczna aktualizacja powiększenia ekranu" @@ -1366,6 +1372,16 @@ "TalkBack odczytuje zawartość ekranu, pomagając użytkownikom niewidomym i niedowidzącym. Czy chcesz zainstalować tę usługę za darmo z Android Market?" "Brak opisu" "Ustawienia" + "Drukowanie" + "Ustawienia drukowania" + "Usługi" + "Użyć usługi %1$s?" + "%1$s może odbierać drukowane przez Ciebie dokumenty, które mogą zawierać poufne dane." + "Brak zainstalowanych usług" + "Ustawienia" + "Dodaj drukarki" + "Włączone" + "Wyłączone" "Bateria" "Gdzie wykorzystywana jest bateria" "Brak danych o zużyciu baterii" @@ -1405,8 +1421,10 @@ "Praca Wi-Fi" "Tablet" "Telefon" - "Dane wysłane" - "Dane odebrane" + "Dane komórkowe zostały wysłane" + "Dane komórkowe zostały odebrane" + "Dane Wi‑Fi zostały wysłane" + "Dane Wi‑Fi zostały odebrane" "Dźwięk" "Wideo" "Czas włączenia" @@ -1460,6 +1478,7 @@ "Tony" "Określa ton czytanego tekstu" "Język" + "Nie wybrano języka" "Ustawia zależny od języka głos dla czytanych tekstów" "Posłuchaj przykładu" "Odtwórz krótką prezentację syntezy mowy" @@ -1594,7 +1613,7 @@ "Protokół EAP nie jest obsługiwany." "Ustawień połączenia Wi-Fi z zabezpieczeniami EAP nie można określić podczas konfiguracji. Możesz to zrobić później na ekranie Ustawienia > Sieci bezprzewodowe." "Łączenie może potrwać kilka minut…" - "Kliknij ""Dalej"", by kontynuować konfigurację."\n\n"Kliknij ""Wróć"", by połączyć się z inną siecią Wi-Fi." + "Kliknij ""Dalej"", by kontynuować konfigurację.\n\nKliknij ""Wróć"", by połączyć się z inną siecią Wi-Fi." "Synchronizacja włączona" "Synchronizacja wyłączona" "Błąd synchronizacji" @@ -1622,7 +1641,7 @@ "Gmail" "Kalendarz" "Kontakty" - "Google Sync – witamy!"" "\n"Synchronizacja danych daje Ci dostęp do kontaktów, wydarzeń i innych ważnych informacji z dowolnego miejsca." + "Google Sync – witamy!"" \nSynchronizacja danych daje Ci dostęp do kontaktów, wydarzeń i innych ważnych informacji z dowolnego miejsca." "Ustawienia synchronizacji aplikacji" "Dane i synchronizacja" "Zmień hasło" @@ -1676,8 +1695,7 @@ "Podświetlaj elementy w oknach jeśli są rysowane przez GPU" "Pokaż zmiany warstw sprzęt." "Oznaczaj aktualizowane warstwy sprzętowe na zielono" - "Pokaż przeciągnięcie GPU" - "Najlepszy-najg.: nieb., ziel., jasnoczerw., czerw." + "Debuguj przerysowania GPU" "Wyłącz nakładki HW" "Zawsze używaj GPU do komponowania ekranu" "Włącz śledzenia OpenGL" @@ -1738,11 +1756,11 @@ "Wyłącz dane w tle w sieciach komórkowych (nadal używaj w innych sieci)." "Transmisję danych w tle możesz ograniczyć po ustawieniu limitu." "Ograniczyć dane w tle?" - "Gdy będą dostępne tylko sieci komórkowe, funkcja ta może zakłócić działanie aplikacji, które korzystają z przesyłu danych w tle."\n\n"Szczegółowe ustawienia transmisji danych są zazwyczaj dostępne bezpośrednio w poszczególnych aplikacjach." + "Gdy będą dostępne tylko sieci komórkowe, funkcja ta może zakłócić działanie aplikacji, które korzystają z przesyłu danych w tle.\n\nSzczegółowe ustawienia transmisji danych są zazwyczaj dostępne bezpośrednio w poszczególnych aplikacjach." "Ograniczenie transmisji danych w tle jest możliwe tylko po ustawieniu limitu komórkowej transmisji danych." "Włączyć autosynchronizację?" - "Wszystkie zmiany, które wprowadzisz na swoich kontach w sieci, będą automatycznie kopiowane na Twój tablet."\n\n"Niektóre konta mogą też kopiować do sieci wszystkie zmiany, które wprowadzisz na tablecie. W ten sposób działa konto Google."\n\n"Aby wybrać informacje synchronizowane przez poszczególne konta, wyświetl Ustawienia > Konta." - "Wszystkie zmiany, które wprowadzisz na swoich kontach w sieci, będą automatycznie kopiowane na Twój telefon."\n\n"Niektóre konta mogą też kopiować do sieci wszystkie zmiany, które wprowadzisz na telefonie. W ten sposób działa konto Google."\n\n"Aby wybrać informacje synchronizowane przez poszczególne konta, wyświetl Ustawienia > Konta." + "Wszystkie zmiany, które wprowadzisz na swoich kontach w sieci, będą automatycznie kopiowane na Twój tablet.\n\nNiektóre konta mogą też kopiować do sieci wszystkie zmiany, które wprowadzisz na tablecie. W ten sposób działa konto Google.\n\nAby wybrać informacje synchronizowane przez poszczególne konta, wyświetl Ustawienia > Konta." + "Wszystkie zmiany, które wprowadzisz na swoich kontach w sieci, będą automatycznie kopiowane na Twój telefon.\n\nNiektóre konta mogą też kopiować do sieci wszystkie zmiany, które wprowadzisz na telefonie. W ten sposób działa konto Google.\n\nAby wybrać informacje synchronizowane przez poszczególne konta, wyświetl Ustawienia > Konta." "Wyłączyć autosynchronizację?" "Powoduje przesyłanie mniejszej ilości danych oraz zmniejsza użycie baterii, ale pobranie najnowszych informacji będzie wymagało ręcznej synchronizacji każdego konta. Poza tym nie będziesz otrzymywać powiadomień o aktualizacjach." "Data resetowania cyklu transmisji danych" @@ -1751,12 +1769,12 @@ "Ustaw ostrzeżenie o transmisji danych" "Ustaw limit danych" "Ograniczanie transmisji danych" - "Komórkowe połączenie transmisji danych zostanie wyłączone po wyczerpaniu limitu."\n\n"Ilość przesyłanych danych może być różnie rozliczana przez tablet i operatora, więc warto ustawić nieco niższy limit." - "Komórkowe połączenie transmisji danych zostanie wyłączone po wyczerpaniu limitu."\n\n"Ilość przesyłanych danych może być różnie rozliczana przez telefon i operatora, więc warto ustawić nieco niższy limit." + "Komórkowe połączenie transmisji danych zostanie wyłączone po wyczerpaniu limitu.\n\nIlość przesyłanych danych może być różnie rozliczana przez tablet i operatora, więc warto ustawić nieco niższy limit." + "Komórkowe połączenie transmisji danych zostanie wyłączone po wyczerpaniu limitu.\n\nIlość przesyłanych danych może być różnie rozliczana przez telefon i operatora, więc warto ustawić nieco niższy limit." "Ograniczyć dane w tle?" "Jeśli ograniczysz komórkową transmisję danych w tle, niektóre aplikacje i usługi będą działały tylko po połączeniu z siecią Wi-Fi." - "Jeśli ograniczysz komórkową transmisję danych w tle, niektóre aplikacje i usługi będą działały tylko po połączeniu z siecią Wi-Fi."\n\n"Ustawienie dotyczy wszystkich użytkowników tego tabletu." - "Jeśli ograniczysz komórkową transmisję danych w tle, niektóre aplikacje i usługi będą działały tylko po połączeniu z siecią Wi-Fi."\n\n"Ustawienie dotyczy wszystkich użytkowników tego telefonu." + "Jeśli ograniczysz komórkową transmisję danych w tle, niektóre aplikacje i usługi będą działały tylko po połączeniu z siecią Wi-Fi.\n\nUstawienie dotyczy wszystkich użytkowników tego tabletu." + "Jeśli ograniczysz komórkową transmisję danych w tle, niektóre aplikacje i usługi będą działały tylko po połączeniu z siecią Wi-Fi.\n\nUstawienie dotyczy wszystkich użytkowników tego telefonu." "^1""^2"\n"ostrzeżenie" "^1"" ""^2"\n"limit" "Usunięte aplikacje" @@ -1843,8 +1861,8 @@ "Użytkownik" "Profil ograniczony" "Dodaj nowego użytkownika" - "Możesz korzystać z tego urządzenia wspólnie z innymi osobami, tworząc dodatkowych użytkowników. Każdy użytkownik ma swoje własne miejsce, które może spersonalizować własnymi aplikacjami, tapetą itd. Użytkownicy mogą także zmieniać ustawienia tabletu, które dotyczą wszystkich, np. Wi-Fi."\n\n"Po utworzeniu nowego użytkownika musi on przejść przez proces konfiguracji."\n\n"Każdy użytkownik może akceptować zaktualizowane uprawnienia aplikacji w imieniu wszystkich pozostałych użytkowników." - "Po utworzeniu nowego użytkownika musi on przejść przez proces konfiguracji."\n\n"Każdy użytkownik może akceptować zaktualizowane uprawnienia aplikacji w imieniu wszystkich pozostałych użytkowników." + "Możesz korzystać z tego urządzenia wspólnie z innymi osobami, tworząc dodatkowych użytkowników. Każdy użytkownik ma swoje własne miejsce, które może spersonalizować własnymi aplikacjami, tapetą itd. Użytkownicy mogą także zmieniać ustawienia tabletu, które dotyczą wszystkich, np. Wi-Fi.\n\nPo utworzeniu nowego użytkownika musi on przejść przez proces konfiguracji.\n\nKażdy użytkownik może akceptować zaktualizowane uprawnienia aplikacji w imieniu wszystkich pozostałych użytkowników." + "Po utworzeniu nowego użytkownika musi on przejść przez proces konfiguracji.\n\nKażdy użytkownik może akceptować zaktualizowane uprawnienia aplikacji w imieniu wszystkich pozostałych użytkowników." "Skonfigurować ustawienia dla użytkownika?" "Upewnij się, że ta osoba jest w pobliżu i może skonfigurować swój profil na tablecie" "Skonfigurować teraz profil?" @@ -1875,6 +1893,9 @@ "To ustawienie obowiązuje wszystkich użytkowników tego telefonu." "Zmień język" "Zmień rozmiar czcionki" + "Ograniczenia" + "Usuń ograniczenia" + "Zmień PIN" "Pokaż powiadomienia" "Pomoc" "Konto na materiały" diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml index 267fe34e687..5a1b002572b 100644 --- a/res/values-pt-rPT/arrays.xml +++ b/res/values-pt-rPT/arrays.xml @@ -233,7 +233,8 @@ "Local" "Pessoal" "Mensagens" - "Dispositivo" + "Multimédia" + "Dispositivo"
    "localização aproximada" @@ -267,6 +268,17 @@ "reproduzir áudio" "ler área de transferência" "modificar área de transferência" + "botões multimédia" + "orientação do áudio" + "volume principal" + "volume de voz" + "volume de toque" + "volume de multimédia" + "volume de alarme" + "volume de notificação" + "volume de Bluetooth" + "Manter ativo" + "monitorizar localização" "Localização" @@ -300,12 +312,33 @@ "Reproduzir áudio" "Ler área de transferência" "Modificar área de transferência" + "Botões multimédia" + "Orientação do áudio" + "Volume principal" + "Volume da voz" + "Volume do toque" + "Volume de multimédia" + "Volume do alarme" + "Volume de notificações" + "Volume de Bluetooth" + "Manter ativo" + "Localização" "Curta" "Média" "Longa" + + "Dalvik" + "ART" + "ART (depurar)" + + + "Utilizar Dalvik" + "Utilizar ART" + "Utilizar compilação de depuração ART" + "Nunca verificar" "Verificar apenas conteúdo DRM" @@ -367,6 +400,11 @@ "No ecrã como linhas" "Em adb shell dumpsys gfxinfo" + + "Desativado" + "Mostrar áreas de sobreposição" + "Mostrar contador de sobreposições" + "Limite padrão" "Sem processos em segundo plano" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 71b59676e5e..c860b4f574e 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -275,8 +275,8 @@ "A ligação de dados foi perdida porque saiu do alcance da sua rede e o roaming de dados estava desactivado." "Ligar" "Ao permitir o roaming de dados, poderão ser cobrados custos de roaming significativos!" - "Ao permitir o roaming de dados, podem ser cobradas tarifas de roaming significativas!"\n\n"Esta definição afeta todos os utilizadores deste tablet." - "Ao permitir o roaming de dados, podem ser cobradas tarifas de roaming significativas!"\n\n"Esta definição afeta todos os utilizadores deste telemóvel." + "Ao permitir o roaming de dados, podem ser cobradas tarifas de roaming significativas!\n\nEsta definição afeta todos os utilizadores deste tablet." + "Ao permitir o roaming de dados, podem ser cobradas tarifas de roaming significativas!\n\nEsta definição afeta todos os utilizadores deste telemóvel." "Permitir roaming de dados?" "Selecção da operadora" "Escolher um operador de rede" @@ -322,8 +322,8 @@ "Necessita de um PIN numérico ou de palavra-passe para desencriptar o tablet sempre que o ligar" "Necessita de um PIN numérico ou de palavra-passe para desencriptar o telefone sempre que o ligar" "Encriptado" - "Pode encriptar contas, definições, aplicações e dados transferidos, ficheiros multimédia e outros ficheiros. Após encriptar o tablet, é necessário introduzir um PIN numérico ou uma palavra-passe para o desencriptar sempre que o ligar. Não é possível desencriptar o tablet, exceto através da realização de uma reposição de dados de fábrica, apagando todos os seus dados."\n\n"A encriptação demora uma hora ou mais. Deve iniciar com uma bateria carregada e manter o tablet ligado até a encriptação estar concluída. Se interromper o processo de encriptação, irá perder alguns ou todos os seus dados." - "Pode encriptar contas, definições, aplicações e dados transferidos, ficheiros multimédia e outros ficheiros. Após encriptar o telemóvel, é necessário introduzir um PIN numérico ou uma palavra-passe para o desencriptar sempre que o ligar. Não é possível desencriptar o telemóvel, exceto através da realização de uma reposição de dados de fábrica, apagando todos os seus dados."\n" "\n"A encriptação demora uma hora ou mais. Deve iniciar com uma bateria carregada e manter o telemóvel ligado até a encriptação estar concluída. Se interromper o processo de encriptação, irá perder alguns ou todos os seus dados." + "Pode encriptar contas, definições, aplicações e dados transferidos, ficheiros multimédia e outros ficheiros. Após encriptar o tablet, é necessário introduzir um PIN numérico ou uma palavra-passe para o desencriptar sempre que o ligar. Não é possível desencriptar o tablet, exceto através da realização de uma reposição de dados de fábrica, apagando todos os seus dados.\n\nA encriptação demora uma hora ou mais. Deve iniciar com uma bateria carregada e manter o tablet ligado até a encriptação estar concluída. Se interromper o processo de encriptação, irá perder alguns ou todos os seus dados." + "Pode encriptar contas, definições, aplicações e dados transferidos, ficheiros multimédia e outros ficheiros. Após encriptar o telemóvel, é necessário introduzir um PIN numérico ou uma palavra-passe para o desencriptar sempre que o ligar. Não é possível desencriptar o telemóvel, exceto através da realização de uma reposição de dados de fábrica, apagando todos os seus dados.\n \nA encriptação demora uma hora ou mais. Deve iniciar com uma bateria carregada e manter o telemóvel ligado até a encriptação estar concluída. Se interromper o processo de encriptação, irá perder alguns ou todos os seus dados." "Encriptar tablet" "Encriptar telefone" "Carregue a bateria e tente novamente." @@ -339,8 +339,8 @@ "Tente novamente dentro de ^1 segundos." "Introduza a palavra-passe" "Encriptação sem êxito" - "A encriptação foi interrompida e não é possível concluí-la. Como resultado, os dados no tablet já não estão acessíveis. "\n\n"Para voltar a utilizar o tablet, é necessário efetuar uma reposição para os valores de fábrica. Quando configurar o tablet após a reposição, poderá restaurar todos os dados dos quais tenha cópias de segurança na Conta Google." - "A encriptação foi interrompida e não é possível concluí-la. Como resultado, os dados no seu telemóvel já não estão acessíveis. "\n\n"Para voltar a utilizar o telemóvel, é necessário efetuar uma reposição para os valores de fábrica. Quando configurar o telemóvel após a reposição, poderá restaurar todos os dados dos quais tenha cópias de segurança na sua Conta Google." + "A encriptação foi interrompida e não é possível concluí-la. Como resultado, os dados no tablet já não estão acessíveis. \n\nPara voltar a utilizar o tablet, é necessário efetuar uma reposição para os valores de fábrica. Quando configurar o tablet após a reposição, poderá restaurar todos os dados dos quais tenha cópias de segurança na Conta Google." + "A encriptação foi interrompida e não é possível concluí-la. Como resultado, os dados no seu telemóvel já não estão acessíveis. \n\nPara voltar a utilizar o telemóvel, é necessário efetuar uma reposição para os valores de fábrica. Quando configurar o telemóvel após a reposição, poderá restaurar todos os dados dos quais tenha cópias de segurança na sua Conta Google." "Alternar o método de introdução" "Selec. bloq. do ecrã" "Escolher bloq. cópia seg." @@ -514,6 +514,7 @@ "A ligar" "Ligado" "Disponível" + "Em utilização" "Definições de visualização" "Desligar?" "Isto terminará a sua ligação com:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Desativado" "Não disponível, porque o NFC está desativado" "Android Beam" - "Quando esta funcionalidade está ativada, pode transmitir o conteúdo da aplicação para outro aparelho com capacidade de NFC mantendo os aparelhos próximos um do outro. Por exemplo, pode transmitir páginas do Navegador, vídeos do YouTube, contactos de Pessoas e muito mais. "\n\n"Basta juntar os aparelhos (normalmente de costas) e, em seguida, tocar no ecrã. A aplicação determina o que é transmitido." + "Quando esta funcionalidade está ativada, pode transmitir o conteúdo da aplicação para outro aparelho com capacidade de NFC mantendo os aparelhos próximos um do outro. Por exemplo, pode transmitir páginas do Navegador, vídeos do YouTube, contactos de Pessoas e muito mais. \n\nBasta juntar os aparelhos (normalmente de costas) e, em seguida, tocar no ecrã. A aplicação determina o que é transmitido." "Deteção do serviço de rede" "Permitir que aplicações noutros dispositivos detetem aplicações neste dispositivo" "Wi‑Fi" @@ -620,7 +621,7 @@ "Protegido por %1$s" ", protegido por %1$s" "Nenhuma" - "Para melhorar a precisão da localização e para outros fins, %1$s pretende ativar a verificação de redes, mesmo quando o Wi-Fi está desativado."\n\n"Permitir esta opção para todas as aplicações que pretenderem verificar?" + "Para melhorar a precisão da localização e para outros fins, %1$s pretende ativar a verificação de redes, mesmo quando o Wi-Fi está desativado.\n\nPermitir esta opção para todas as aplicações que pretenderem verificar?" "Permitir" "Recusar" "Ligar" @@ -632,8 +633,8 @@ "Cancelar" "Ignorar de qualquer maneira" "Não ignorar" - "AVISO: poderão ser cobradas taxas de dados adicionais pelo operador."\n\n"A configuração do tablet poderá necessitar de uma atividade de rede considerável." - "AVISO: poderão ser cobradas taxas de dados adicionais pelo operador."\n\n"A configuração do telemóvel poderá necessitar de uma atividade de rede considerável." + "AVISO: poderão ser cobradas taxas de dados adicionais pelo operador.\n\nA configuração do tablet poderá necessitar de uma atividade de rede considerável." + "AVISO: poderão ser cobradas taxas de dados adicionais pelo operador.\n\nA configuração do telemóvel poderá necessitar de uma atividade de rede considerável." "AVISO: se não tiver uma ligação à Internet, não será possível verificar se o software do tablet está atualizado." "AVISO: se não tiver uma ligação à Internet, não será possível verificar se o software do telemóvel está atualizado." "O tablet não conseguiu estabelecer ligação a esta rede Wi-Fi." @@ -773,9 +774,9 @@ "PIN do SIM" "PIN incorreto" "Os PINs não correspondem" - "Não é possível alterar o PIN."\n"PIN possivelmente incorreto." + "Não é possível alterar o PIN.\nPIN possivelmente incorreto." "PIN do SIM mudado com sucesso" - "Não é possível alterar o estado de bloqueio do cartão SIM. "\n"PIN possivelmente incorreto." + "Não é possível alterar o estado de bloqueio do cartão SIM. \nPIN possivelmente incorreto." "OK" "Cancelar" "Estado do tablet" @@ -918,9 +919,9 @@ "Reposição dos dados de fábrica" "Apaga todos os dados do tablet" "Apaga todos os dados do telefone" - "Serão apagados todos os dados do ""armazenamento interno"" do tablet, incluindo:"\n\n
  • "A conta Google"
  • \n
  • "Dados e definições do sistema e da aplicação"
  • \n
  • "Aplicações transferidas"
  • - "Serão apagados todos os dados do ""armazenamento interno"" do telemóvel, incluindo:"\n\n
  • "A conta Google"
  • \n
  • "Dados e definições do sistema e da aplicação"
  • \n
  • "Aplicações transferidas"
  • - \n\n"Actualmente, tem sessão iniciada nas seguintes contas:"\n + "Serão apagados todos os dados do ""armazenamento interno"" do tablet, incluindo:\n\n"
  • "A conta Google"
  • \n
  • "Dados e definições do sistema e da aplicação"
  • \n
  • "Aplicações transferidas"
  • + "Serão apagados todos os dados do ""armazenamento interno"" do telemóvel, incluindo:\n\n"
  • "A conta Google"
  • \n
  • "Dados e definições do sistema e da aplicação"
  • \n
  • "Aplicações transferidas"
  • + \n\n"Actualmente, tem sessão iniciada nas seguintes contas:\n"
  • "Música"
  • \n
  • "Fotografias"
  • \n
  • "Outros dados do utilizador"
  • \n\n"Para limpar músicas, imagens e outros dados do utilizador, é necessário apagar a ""memória de armazenamento USB""." \n\n"Para limpar também músicas, imagens e outros dados do utilizador, é necessário apagar o ""cartão SD""." @@ -1105,7 +1106,7 @@ "Mostrar proc. em cache" "Repor pref. de aplic." "Repor pref. de aplic.?" - "Esta ação irá repor todas as preferências para:"\n\n" "
  • "Aplicações desativadas"
  • \n" "
  • "Notificações de aplicações desativadas"
  • \n" "
  • "Aplicações predefinidas para ações"
  • \n" "
  • "Restrições de dados em segundo plano para aplicações"
  • \n\n" Não perderá quaisquer dados de aplicações."
    + "Esta ação irá repor todas as preferências para:\n\n "
  • "Aplicações desativadas"
  • \n" "
  • "Notificações de aplicações desativadas"
  • \n" "
  • "Aplicações predefinidas para ações"
  • \n" "
  • "Restrições de dados em segundo plano para aplicações"
  • \n\n" Não perderá quaisquer dados de aplicações."
    "Repor aplicações" "Gerir espaço" "Filtrar" @@ -1240,9 +1241,7 @@ "Para alternar, prima Ctrl-Bar. esp." "Predefinição" "Esquemas de teclado" - "Dicionário do utilizador" - "Dicionário pessoal" - "Dicionários pessoais" + "Dicionário pessoal" "Adicionar" "Adicionar ao dicionário" @@ -1303,6 +1302,11 @@ "Incluir opção no menu avançado para criar um relatório de erros" "Manter ativo" "O ecrã nunca entrará em suspensão durante o carregamento" + "Ativar registo de monitorização Bluetooth HCI" + "Capturar todos os pacotes Bluetooth HCI num ficheiro" + "Selecionar tempo exec." + "Selecionar tempo exec." + "Reiniciar para alterar o tempo de execução de %1$s para %2$s?" "Permitir locais fictícios" "Permitir locais fictícios" "Permitir depuração USB?" @@ -1315,11 +1319,13 @@ "Proteger memória USB" "As aplicações têm de pedir permissão para ler a memória USB" "Proteger memória USB?" - "Quando o armazenamento USB estiver protegido, as aplicações têm de pedir permissão para ler os dados do armazenamento externo."\n\n"Algumas aplicações podem não funcionar até serem atualizadas pelos respetivos programadores." + "Quando o armazenamento USB estiver protegido, as aplicações têm de pedir permissão para ler os dados do armazenamento externo.\n\nAlgumas aplicações podem não funcionar até serem atualizadas pelos respetivos programadores." "Proteger cartão SD" "As aplicações têm de pedir permissão para ler o cartão SD" "Proteger cartão SD?" - "Quando o cartão SD estiver protegido, as aplicações têm de pedir permissão para ler os dados do armazenamento externo."\n\n"Algumas aplicações podem não funcionar até serem atualizadas pelos respetivos programadores." + "Quando o cartão SD estiver protegido, as aplicações têm de pedir permissão para ler os dados do armazenamento externo.\n\nAlgumas aplicações podem não funcionar até serem atualizadas pelos respetivos programadores." + "Terminal local" + "Ativar aplicação terminal que oferece acesso local à shell" "Escolher miniaplicação" "Escolher widget" "Criar widget e permitir o acesso?" @@ -1340,11 +1346,11 @@ "serviços" "SISTEMA" "Gestos de ampliação" - "Quando esta funcionalidade está ativada, pode aumentar ou diminuir o zoom ao tocar três vezes no ecrã."\n\n"Enquanto estiver a aumentar o zoom, pode:"\n
    • "Deslocar: arraste dois ou mais dedos no ecrã."
    • \n
    • "Ajustar o nível de zoom: junte dois ou mais dedos ou afaste-os."
    \n\n"Também pode aumentar temporariamente o que estiver por baixo do seu dedo ao tocar três vezes sem soltar. Neste estado aumentado, pode arrastar o dedo para explorar diferentes partes do ecrã. Levante o dedo para voltar ao estado anterior."\n\n"Nota: O toque triplo para aumentar funciona em todo o lado, exceto no teclado e na barra de navegação."
    + "Quando esta funcionalidade está ativada, pode aumentar ou diminuir o zoom ao tocar três vezes no ecrã.\n\nEnquanto estiver a aumentar o zoom, pode:\n"
    • "Deslocar: arraste dois ou mais dedos no ecrã."
    • \n
    • "Ajustar o nível de zoom: junte dois ou mais dedos ou afaste-os."
    \n\n"Também pode aumentar temporariamente o que estiver por baixo do seu dedo ao tocar três vezes sem soltar. Neste estado aumentado, pode arrastar o dedo para explorar diferentes partes do ecrã. Levante o dedo para voltar ao estado anterior.\n\nNota: O toque triplo para aumentar funciona em todo o lado, exceto no teclado e na barra de navegação."
    "Atalho de acessibilidade" "Ativado" "Desligado" - "Quando esta funcionalidade está ativada, pode rapidamente ativar funcionalidades de acessibilidade executando dois passos:"\n\n"Passo 1: prima sem soltar o botão \"ligar/desligar\" até ouvir um som ou sentir uma vibração."\n\n"Passo 2: toque sem soltar com dois dedos até ouvir uma confirmação."\n\n"Se o dispositivo tiver vários utilizadores, a utilização deste atalho no ecrã de bloqueio ativa temporariamente a acessibilidade até que o dispositivo seja desbloqueado." + "Quando esta funcionalidade está ativada, pode rapidamente ativar funcionalidades de acessibilidade executando dois passos:\n\nPasso 1: prima sem soltar o botão \"ligar/desligar\" até ouvir um som ou sentir uma vibração.\n\nPasso 2: toque sem soltar com dois dedos até ouvir uma confirmação.\n\nSe o dispositivo tiver vários utilizadores, a utilização deste atalho no ecrã de bloqueio ativa temporariamente a acessibilidade até que o dispositivo seja desbloqueado." "Texto grande" "Ampliação do ecrã" "Atualiz. auto da ampliação do ecrã" @@ -1366,6 +1372,16 @@ "O TalkBack fornece respostas faladas para ajudar os utilizadores invisuais e com deficiência visual. Pretende instalá-lo gratuitamente a partir do Android Market?" "Nenhuma descrição fornecida." "Definições" + "Imprimir" + "Definições de impressão" + "Serviços" + "Utilizar %1$s?" + "%1$s pode receber documentos impressos. Tais documentos podem conter dados confidenciais." + "Nenhum serviço instalado" + "Definições" + "Adicionar impressoras" + "Ativado" + "Desativado" "Bateria" "O que tem estado a utilizar a bateria" "Dados utiliz. bater. não disp." @@ -1405,8 +1421,10 @@ "Wi-Fi em execução" "Tablet" "Telefone" - "Dados enviados" - "Dados recebidos" + "Dados móveis enviados" + "Dados móveis recebidos" + "Dados Wi-Fi enviados" + "Dados Wi-Fi recebidos" "Áudio" "Vídeo" "Hora activada" @@ -1460,6 +1478,7 @@ "Tonalidade" "Afecta o tom do texto falado" "Idioma" + "Idioma não selecionado" "Define a voz do idioma específico para o texto lido" "Ouvir um exemplo" "Reproduzir uma breve demonstração de síntese de voz" @@ -1594,7 +1613,7 @@ "EAP não suportado." "Não é possível configurar uma ligação Wi-Fi tipo EAP durante a configuração. Após a configuração, é possível fazê-lo em Definições > Redes sem fios e outras." "A ligação pode demorar alguns minutos..." - "Toque em ""Seguinte"" para continuar a configuração."\n\n"Toque em ""Anterior"" para ligar a uma rede Wi‑Fi diferente." + "Toque em ""Seguinte"" para continuar a configuração.\n\nToque em ""Anterior"" para ligar a uma rede Wi‑Fi diferente." "Sincronização ativada" "Sincronização desativada" "Erro de sincronização" @@ -1622,7 +1641,7 @@ "Gmail" "Calendário" "Contactos" - "Bem-vindo ao Google Sync!"" "\n"Uma abordagem da Google à sincronização de dados, que permite aceder aos contactos, compromissos e outros itens a partir de qualquer local onde se encontre." + "Bem-vindo ao Google Sync!"" \nUma abordagem da Google à sincronização de dados, que permite aceder aos contactos, compromissos e outros itens a partir de qualquer local onde se encontre." "Definições de sincronização da aplicação" "Dados e sincronização" "Alterar palavra-passe" @@ -1676,8 +1695,7 @@ "Dest. visualiz. em janelas quando desenh. c/ GPU" "Mostrar atual. cam. hard." "Camadas de hard. flash verdes quando estão atuali." - "Mostrar GPU excedente" - "Melhor para pior: azul, verde, verm. claro, verm." + "Depurar sobreposição GPU" "Desativ. sobreposições HW" "Utilizar sempre GPU para a composição do ecrã" "Ativar vestígios OpenGL" @@ -1738,11 +1756,11 @@ "Desativar dados em segundo plano em redes móveis. Serão utilizadas redes não móveis, se estiverem disponíveis." "Para restringir os dados de segundo plano para esta aplicação, comece por definir um limite de dados móveis." "Restringir dados em segundo plano?" - "Esta funcionalidade pode fazer com que uma aplicação que dependa de dados em segundo plano deixe de funcionar quando estiverem disponíveis apenas redes móveis."\n\n"Poderá encontrar controlos de utilização de dados mais adequados nas definições disponíveis dentro da aplicação." + "Esta funcionalidade pode fazer com que uma aplicação que dependa de dados em segundo plano deixe de funcionar quando estiverem disponíveis apenas redes móveis.\n\nPoderá encontrar controlos de utilização de dados mais adequados nas definições disponíveis dentro da aplicação." "A restrição de dados de segundo plano só é possível se tiver definido um limite de dados móveis." "Ativar sinc. auto. de dados?" - "Qualquer alteração que efetue nas contas a partir da Web será copiada automaticamente para o tablet."\n\n"Algumas contas também podem copiar automaticamente para a Web qualquer alteração que efetue no tablet. Uma Conta do Google funciona desta forma."\n\n"Para selecionar os tipos de informações a sincronizar em cada conta, aceda a Definições > Contas." - "Qualquer alteração que efetue nas contas a partir da Web será copiada automaticamente para o telemóvel."\n\n"Algumas contas também podem copiar automaticamente para a Web qualquer alteração que efetue no telemóvel. Uma Conta Google funciona desta forma."\n\n"Para selecionar os tipos de informações a sincronizar em cada conta, aceda a Definições > Contas." + "Qualquer alteração que efetue nas contas a partir da Web será copiada automaticamente para o tablet.\n\nAlgumas contas também podem copiar automaticamente para a Web qualquer alteração que efetue no tablet. Uma Conta do Google funciona desta forma.\n\nPara selecionar os tipos de informações a sincronizar em cada conta, aceda a Definições > Contas." + "Qualquer alteração que efetue nas contas a partir da Web será copiada automaticamente para o telemóvel.\n\nAlgumas contas também podem copiar automaticamente para a Web qualquer alteração que efetue no telemóvel. Uma Conta Google funciona desta forma.\n\nPara selecionar os tipos de informações a sincronizar em cada conta, aceda a Definições > Contas." "Desativar sinc. auto. de dados?" "Esta ação irá conservar a utilização de dados e bateria, mas é necessário sincronizar manualmente cada conta para recolher informações recentes. Não irá receber notificações quando ocorrerem atualizações." "Data de reposição de ciclo de utilização" @@ -1751,12 +1769,12 @@ "Definir aviso de utilização de dados" "Definir limite de utilização de dados" "Limitar utilização de dados" - "A ligação móvel de dados será desativada quando for atingido o limite especificado."\n\n"Uma vez que a utilização dos dados é medida pelo tablet e o seu operador pode calcular a utilização de forma diferente, considere utilizar um limite de precaução" - "A ligação móvel de dados será desativada quando for atingido o limite especificado."\n\n"Uma vez que a utilização dos dados é medida pelo telemóvel e o seu operador pode calcular a utilização de forma diferente, considere utilizar um limite de precaução." + "A ligação móvel de dados será desativada quando for atingido o limite especificado.\n\nUma vez que a utilização dos dados é medida pelo tablet e o seu operador pode calcular a utilização de forma diferente, considere utilizar um limite de precaução" + "A ligação móvel de dados será desativada quando for atingido o limite especificado.\n\nUma vez que a utilização dos dados é medida pelo telemóvel e o seu operador pode calcular a utilização de forma diferente, considere utilizar um limite de precaução." "Restringir dados em segundo plano?" "Se restringir os dados móveis de segundo plano, algumas aplicações e serviços não funcionarão exceto se estiver ligado a uma rede Wi-Fi." - "Se restringir os dados móveis em segundo plano, algumas aplicações e serviços não funcionarão exceto se estiver ligado a uma rede Wi-Fi."\n\n"Esta definição afeta todos os utilizadores deste tablet." - "Se restringir os dados móveis em segundo plano, algumas aplicações e serviços não funcionarão exceto se estiver ligado a uma rede Wi-Fi."\n\n"Esta definição afeta todos os utilizadores deste telemóvel." + "Se restringir os dados móveis em segundo plano, algumas aplicações e serviços não funcionarão exceto se estiver ligado a uma rede Wi-Fi.\n\nEsta definição afeta todos os utilizadores deste tablet." + "Se restringir os dados móveis em segundo plano, algumas aplicações e serviços não funcionarão exceto se estiver ligado a uma rede Wi-Fi.\n\nEsta definição afeta todos os utilizadores deste telemóvel." "^1""^2"\n"aviso" "^1""^2"\n"limite" "Aplicações removidas" @@ -1843,8 +1861,8 @@ "Utilizador" "Perfil restrito" "Adicionar novo utilizador" - "Pode partilhar este dispositivo com outras pessoas criando utilizadores adicionais. Cada utilizador tem o seu próprio espaço, que pode personalizar com as suas próprias aplicações, imagem de fundo e etc. Os utilizadores podem também ajustar as definições do tablet, como o Wi-Fi que afeta toda a gente."\n\n"Depois de criar um novo utilizador, essa pessoa necessita de passar por um processo de configuração."\n\n"Qualquer utilizador pode aceitar as permissões de aplicações atualizadas em nome de todos os outros utilizadores." - "Depois de criar um novo utilizador, essa pessoa necessita de passar por um processo de configuração."\n\n"Qualquer utilizador pode aceitar as permissões de aplicações atualizadas em nome de todos os outros utilizadores." + "Pode partilhar este dispositivo com outras pessoas criando utilizadores adicionais. Cada utilizador tem o seu próprio espaço, que pode personalizar com as suas próprias aplicações, imagem de fundo e etc. Os utilizadores podem também ajustar as definições do tablet, como o Wi-Fi que afeta toda a gente.\n\nDepois de criar um novo utilizador, essa pessoa necessita de passar por um processo de configuração.\n\nQualquer utilizador pode aceitar as permissões de aplicações atualizadas em nome de todos os outros utilizadores." + "Depois de criar um novo utilizador, essa pessoa necessita de passar por um processo de configuração.\n\nQualquer utilizador pode aceitar as permissões de aplicações atualizadas em nome de todos os outros utilizadores." "Configurar o utilizador agora?" "Certifique-se de que a pessoa está disponível para pegar no tablet e configurar o respetivo espaço" "Configurar perfil agora?" @@ -1875,6 +1893,9 @@ "Esta definição afeta todos os utilizadores deste telemóvel." "Alterar idioma" "Alterar tamanho da letra" + "Restrições" + "Remover restrições" + "Alterar PIN" "Mostrar notificações" "Ajuda" "Conta para conteúdo" diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml index 684b86b73dd..0a29fd81019 100644 --- a/res/values-pt/arrays.xml +++ b/res/values-pt/arrays.xml @@ -233,7 +233,8 @@ "Local" "Pessoal" "Mensagens" - "Dispositivo" + "Mídia" + "Dispositivo"
    "localização aproximada" @@ -267,6 +268,17 @@ "reproduzir áudio" "ler a área de transferência" "modificar a área de transferência" + "botões de mídia" + "foco de áudio" + "volume mestre" + "volume da voz" + "volume do toque" + "volume da mídia" + "volume do alarme" + "volume da notificação" + "volume do Bluetooth" + "permanecer ativo" + "monitorar local" "Local" @@ -300,12 +312,33 @@ "Reproduzir áudio" "Ler a área de transferência" "Modificar a área de transferência" + "Botões de mídia" + "Foco de áudio" + "Volume mestre" + "Volume da voz" + "Volume do toque" + "Volume da mídia" + "Volume do alarme" + "Volume da notificação" + "Volume do Bluetooth" + "Permanecer ativo" + "Local" "Curto" "Médio" "Longo" + + "Dalvik" + "ART" + "ART (depuração)" + + + "Usar Dalvik" + "Usar ART" + "Usar compilação de depuração do ART" + "Nunca verificar" "Verificar somente conteúdo DRM" @@ -367,6 +400,11 @@ "Na tela em linhas" "Em adb shell dumpsys gfxinfo" + + "Desativado" + "Mostrar áreas de overdraw" + "Mostrar contador de overdraw" + "Limite padrão" "Sem processos em segundo plano" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 895ab3bddcf..96a52646bdb 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -275,8 +275,8 @@ "Você perdeu a conectividade de dados porque deixou o roaming de dados da sua rede doméstica desativado." "Ativar" "Quando você permite o roaming de dados, poderão ser cobradas taxas significativas de roaming!" - "Ao permitir o roaming de dados, você poderá receber cobranças significativas de roaming."\n\n"Esta configuração afeta todos os usuários do tablet." - "Ao permitir o roaming de dados, você poderá receber cobranças significativas de roaming."\n\n"Esta configuração afeta todos os usuários do telefone." + "Ao permitir o roaming de dados, você poderá receber cobranças significativas de roaming.\n\nEsta configuração afeta todos os usuários do tablet." + "Ao permitir o roaming de dados, você poderá receber cobranças significativas de roaming.\n\nEsta configuração afeta todos os usuários do telefone." "Permitir roaming de dados?" "Seleção de operador" "Selecione um operador de rede" @@ -322,8 +322,8 @@ "Exigir um PIN numérico ou uma senha para decodificar seu tablet sempre que ligá-lo" "Exigir um PIN numérico ou senha para decodificar seu telefone sempre que ligá-lo" "Criptografado" - "Você pode criptografar suas contas, configurações, aplicativos transferidos e seus dados, mídia e outros arquivos. Após criptografar seu tablet, será necessário digitar um PIN numérico ou senha para descriptografar toda vez que você ligá-lo. Não é possível desfazer a criptografia em seu tablet, exceto se realizar uma redefinição para configuração original, apagando todos os seus dados."\n\n"A criptografia leva um hora ou mais. Você deve iniciar com a bateria carregada e manter seu tablet conectado até que a criptografia seja concluída. Se você interromper o processo de criptografia, perderá alguns ou todos os seus dados." - "Você pode criptografar suas contas, configurações, aplicativos transferidos e seus dados, mídia e outros arquivos. Após criptografar seu telefone, será necessário digitar um PIN numérico ou senha para descriptografar toda vez que você ligá-lo. Não é possível desfazer a criptografia em seu telefone, exceto se realizar uma redefinição para configuração original, apagando todos os seus dados."\n\n"A criptografia leva um hora ou mais. Você deve iniciar com a bateria carregada e manter seu telefone conectado até que a criptografia seja concluída. Se você interromper o processo de criptografia, perderá alguns ou todos os seus dados." + "Você pode criptografar suas contas, configurações, aplicativos transferidos e seus dados, mídia e outros arquivos. Após criptografar seu tablet, será necessário digitar um PIN numérico ou senha para descriptografar toda vez que você ligá-lo. Não é possível desfazer a criptografia em seu tablet, exceto se realizar uma redefinição para configuração original, apagando todos os seus dados.\n\nA criptografia leva um hora ou mais. Você deve iniciar com a bateria carregada e manter seu tablet conectado até que a criptografia seja concluída. Se você interromper o processo de criptografia, perderá alguns ou todos os seus dados." + "Você pode criptografar suas contas, configurações, aplicativos transferidos e seus dados, mídia e outros arquivos. Após criptografar seu telefone, será necessário digitar um PIN numérico ou senha para descriptografar toda vez que você ligá-lo. Não é possível desfazer a criptografia em seu telefone, exceto se realizar uma redefinição para configuração original, apagando todos os seus dados.\n\nA criptografia leva um hora ou mais. Você deve iniciar com a bateria carregada e manter seu telefone conectado até que a criptografia seja concluída. Se você interromper o processo de criptografia, perderá alguns ou todos os seus dados." "Criptografar tablet" "Criptografar telefone" "Carregue sua bateria e tente novamente." @@ -339,8 +339,8 @@ "Tente novamente em ^1 segundos." "Digite sua senha" "Falha na criptografia" - "A criptografia foi interrompida e não pode ser concluída. Por esse motivo, os dados em seu tablet não podem ser acessados. "\n\n" Para continuar usando seu tablet, é necessário restaurar as configurações originais. Quando você configurar seu tablet após a restauração, poderá recuperar todos os dados que foram salvos em backup em sua Conta do Google." - "A criptografia foi interrompida e não pode ser concluída. Por esse motivo, os dados em seu telefone não podem mais ser acessados. "\n\n"Para continuar usando seu telefone, é necessário restaurar as configurações originais. Quando você configurar seu telefone após a restauração, poderá recuperar todos os dados que foram salvos em backup em sua Conta do Google." + "A criptografia foi interrompida e não pode ser concluída. Por esse motivo, os dados em seu tablet não podem ser acessados. \n\n Para continuar usando seu tablet, é necessário restaurar as configurações originais. Quando você configurar seu tablet após a restauração, poderá recuperar todos os dados que foram salvos em backup em sua Conta do Google." + "A criptografia foi interrompida e não pode ser concluída. Por esse motivo, os dados em seu telefone não podem mais ser acessados. \n\nPara continuar usando seu telefone, é necessário restaurar as configurações originais. Quando você configurar seu telefone após a restauração, poderá recuperar todos os dados que foram salvos em backup em sua Conta do Google." "Alterar o método de entrada" "Escolher bloq. de tela" "Selec. o bloq. de backup" @@ -514,6 +514,7 @@ "Conectando" "Conectado" "Disponível" + "Em uso" "Configurações do display" "Desconectar?" "Isso encerrará sua conexão com:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Desativado" "Indisponível porque o NFC está desativado" "Android Beam" - "Quando este recurso está ativado, você pode enviar o conteúdo do aplicativo para outro dispositivo compatível com NFC, mantendo os dispositivos próximos. Por exemplo, você pode enviar páginas do navegador, vídeos do YouTube, contatos de pessoas e muito mais."\n\n"Basta posicionar os dispositivos próximos (normalmente de costas um para o outro) e tocar em sua tela. O aplicativo determina o que é enviado." + "Quando este recurso está ativado, você pode enviar o conteúdo do aplicativo para outro dispositivo compatível com NFC, mantendo os dispositivos próximos. Por exemplo, você pode enviar páginas do navegador, vídeos do YouTube, contatos de pessoas e muito mais.\n\nBasta posicionar os dispositivos próximos (normalmente de costas um para o outro) e tocar em sua tela. O aplicativo determina o que é enviado." "Detecção de serviço de rede" "Permitir que aplicativos em outros dispositivos descubram aplicativos neste dispositivo" "Wi-Fi" @@ -620,7 +621,7 @@ "Protegido por %1$s" ", protegido por %1$s" "Nenhuma" - "Para aumentar a precisão da localização e outras finalidades, %1$s quer ativar a verificação de rede, mesmo que o Wi-Fi esteja desligado."\n\n"Permitir isto para todos os aplicativos que quiserem verificar?" + "Para aumentar a precisão da localização e outras finalidades, %1$s quer ativar a verificação de rede, mesmo que o Wi-Fi esteja desligado.\n\nPermitir isto para todos os aplicativos que quiserem verificar?" "Permitir" "Negar" "Conectar" @@ -632,8 +633,8 @@ "Cancelar" "Ignorar mesmo assim" "Não ignorar" - "AVISO: você poderá receber cobranças significativas de dados da operadora."\n\n"A configuração do tablet pode exigir atividade de rede significativa." - "AVISO: você poderá receber cobranças significativas de dados da operadora."\n\n"A configuração do telefone pode exigir atividade de rede significativa." + "AVISO: você poderá receber cobranças significativas de dados da operadora.\n\nA configuração do tablet pode exigir atividade de rede significativa." + "AVISO: você poderá receber cobranças significativas de dados da operadora.\n\nA configuração do telefone pode exigir atividade de rede significativa." "AVISO: o tablet não poderá verificar a atualização do software até conectar-se à Internet." "AVISO: o telefone não poderá verificar a atualização do software até conectar-se à Internet." "O tablet não foi capaz de conectar à rede Wi-Fi." @@ -773,9 +774,9 @@ "PIN do SIM" "PIN incorreto" "Os PINs não correspondem" - "Não é possível alterar o PIN."\n"PIN possivelmente incorreto." + "Não é possível alterar o PIN.\nPIN possivelmente incorreto." "PIN do SIM alterado" - "Não é possível alterar o estado de bloqueio do cartão SIM."\n"PIN possivelmente incorreto." + "Não é possível alterar o estado de bloqueio do cartão SIM.\nPIN possivelmente incorreto." "OK" "Cancelar" "Status do tablet" @@ -918,9 +919,9 @@ "Configuração original" "Apaga todos os dados no tablet" "Apaga todos os dados no telefone" - "Essa ação apagará todos os dados do ""armazenamento interno"" do seu tablet, incluindo:"\n\n
  • "Sua Conta do Google"
  • \n
  • "Configurações e dados do sistema e dos aplicativos"
  • \n
  • "Aplicativos transferidos"
  • - "Essa ação apagará todos os dados do ""armazenamento interno"" de seu telefone, incluindo:"\n\n
  • "Sua Conta do Google"
  • \n
  • "Configurações e dados do sistema e dos aplicativos"
  • \n
  • "Aplicativos baixados"
  • - \n\n"No momento você está conectado às seguintes contas:"\n + "Essa ação apagará todos os dados do ""armazenamento interno"" do seu tablet, incluindo:\n\n"
  • "Sua Conta do Google"
  • \n
  • "Configurações e dados do sistema e dos aplicativos"
  • \n
  • "Aplicativos transferidos"
  • + "Essa ação apagará todos os dados do ""armazenamento interno"" de seu telefone, incluindo:\n\n"
  • "Sua Conta do Google"
  • \n
  • "Configurações e dados do sistema e dos aplicativos"
  • \n
  • "Aplicativos baixados"
  • + \n\n"No momento você está conectado às seguintes contas:\n"
  • "Músicas"
  • \n
  • "Fotos"
  • \n
  • "Outros dados do usuário"
  • \n\n"Para limpar músicas, fotos e outros dados de usuário, o ""armazenamento USB"" precisa ser apagado." \n\n"Para limpar músicas, imagens e outros dados de usuário, o conteúdo do ""cartão SD"" precisa ser apagado." @@ -1105,7 +1106,7 @@ "Mostrar processo em cache" "Redefinir preferências" "Redefinir preferências?" - "Isso redefinirá todas as preferências para:"\n\n" "
  • "aplicativos desativados"
  • \n" "
  • "notificações de aplicativos desativados"
  • \n" "
  • "aplicativos padrão para ações"
  • \n" "
  • "restrições de dados em segundo plano para aplicativos"
  • \n\n" Os dados dos aplicativos não serão perdidos."
    + "Isso redefinirá todas as preferências para:\n\n "
  • "aplicativos desativados"
  • \n" "
  • "notificações de aplicativos desativados"
  • \n" "
  • "aplicativos padrão para ações"
  • \n" "
  • "restrições de dados em segundo plano para aplicativos"
  • \n\n" Os dados dos aplicativos não serão perdidos."
    "Redefinir aplicativos" "Gerenciar espaço" "Filtro" @@ -1240,9 +1241,7 @@ "Para alterar, pressione Ctrl+espaço" "Padrão" "Layouts de teclado" - "Dicionário do usuário" - "Dicionário pessoal" - "Dicionários pessoais" + "Dicionário pessoal" "Adicionar" "Adicionar ao dicionário" @@ -1303,6 +1302,11 @@ "Incluir a opção de obter um relatório de bugs no menu do botão de ligar" "Permanecer ativo" "A tela nunca entrará em inatividade enquanto estiver carregando." + "Ativar registro de rastreamento Bluetooth HCI" + "Capturar todos os pacotes Bluetooth HCI em um arquivo" + "Selecionar tempo de execução" + "Selecionar tempo de execução" + "Reiniciar para mudar tempo de execução de %1$s para %2$s?" "Permitir locais fictícios" "Permitir locais fictícios" "Permitir a depuração USB?" @@ -1315,11 +1319,13 @@ "Proteger o armazenamento USB" "Aplicativos precisam de permissão para ler o armazenamento USB" "Proteger o armazenamento USB?" - "Quando o armazenamento USB está protegido, os aplicativos devem solicitar permissão para ler dados de armazenamento externo."\n\n"Alguns aplicativos podem não funcionar até que sejam atualizados por seus desenvolvedores." + "Quando o armazenamento USB está protegido, os aplicativos devem solicitar permissão para ler dados de armazenamento externo.\n\nAlguns aplicativos podem não funcionar até que sejam atualizados por seus desenvolvedores." "Proteger o cartão SD" "Aplicativos precisam de permissão para ler o cartão SD" "Proteger o cartão SD?" - "Quando o cartão SD está protegido, os aplicativos devem solicitar permissão para ler dados de armazenamento externo."\n\n"Alguns aplicativos podem não funcionar até que sejam atualizados por seus desenvolvedores." + "Quando o cartão SD está protegido, os aplicativos devem solicitar permissão para ler dados de armazenamento externo.\n\nAlguns aplicativos podem não funcionar até que sejam atualizados por seus desenvolvedores." + "Terminal local" + "Ativar o aplicativo terminal que oferece acesso ao shell local" "Escolher o gadget" "Escolher widget" "Criar widget e permitir acesso?" @@ -1340,11 +1346,11 @@ "Serviços" "Sistema" "Gestos de ampliação" - "Quando este recurso está ativado, você pode aumentar e diminuir o zoom com um toque triplo na tela."\n\n"Quando o zoom é aplicado, você pode:"\n
    • "Deslocar: arraste dois ou mais dedos pela tela."
    • \n
    • "Ajustar o nível de zoom: use o gesto de pinçagem ou expanda usando dois ou mais dedos."
    \n\n"Você também pode ampliar temporariamente o que estiver sob seu dedo dando um toque triplo e segurando. No estado ampliado, arraste o dedo para explorar as diferentes partes da tela. Levante o dedo para voltar ao estado anterior."\n\n"Observação: o toque triplo para ampliar funciona em qualquer parte da tela, exceto no teclado e na barra de navegação."
    + "Quando este recurso está ativado, você pode aumentar e diminuir o zoom com um toque triplo na tela.\n\nQuando o zoom é aplicado, você pode:\n"
    • "Deslocar: arraste dois ou mais dedos pela tela."
    • \n
    • "Ajustar o nível de zoom: use o gesto de pinçagem ou expanda usando dois ou mais dedos."
    \n\n"Você também pode ampliar temporariamente o que estiver sob seu dedo dando um toque triplo e segurando. No estado ampliado, arraste o dedo para explorar as diferentes partes da tela. Levante o dedo para voltar ao estado anterior.\n\nObservação: o toque triplo para ampliar funciona em qualquer parte da tela, exceto no teclado e na barra de navegação."
    "Atalho de acessibilidade" "Ligado" "Desativado" - "Quando este recurso está ativado, você pode ativar rapidamente os recursos de acessibilidade em duas etapas:"\n\n"Etapa 1: pressione e segure o botão liga/desliga até ouvir um som ou sentir uma vibração."\n\n"Etapa 2: toque e segure com dois dedos até ouvir a confirmação de áudio."\n\n"Caso o dispositivo tenha vários usuários, este atalho na tela de bloqueio pode ativar temporariamente a acessibilidade até que o dispositivo seja desbloqueado." + "Quando este recurso está ativado, você pode ativar rapidamente os recursos de acessibilidade em duas etapas:\n\nEtapa 1: pressione e segure o botão liga/desliga até ouvir um som ou sentir uma vibração.\n\nEtapa 2: toque e segure com dois dedos até ouvir a confirmação de áudio.\n\nCaso o dispositivo tenha vários usuários, este atalho na tela de bloqueio pode ativar temporariamente a acessibilidade até que o dispositivo seja desbloqueado." "Texto grande" "Ampliação da tela" "Atual. autom. da ampliação da tela" @@ -1366,6 +1372,16 @@ "O TalkBack fornece feedback por voz para ajudar usuários cegos ou com visão reduzida. Deseja instalá-lo gratuitamente do Android Market?" "Nenhuma descrição foi fornecida." "Configurações" + "Impressão" + "Config. de impressão" + "Serviços" + "Usar %1$s?" + "%1$s pode receber os documentos que você imprimir. Esses documentos podem conter dados confidenciais." + "Nenhum serviço instalado" + "Configurações" + "Adicionar impressoras" + "Ativado" + "Desativado" "Bateria" "O que está consumindo a bateria" "Dados de uso da bat. indisp." @@ -1405,8 +1421,10 @@ "Wi-Fi em execução" "Tablet" "Telefone" - "Dados enviados" - "Dados recebidos" + "Dados móveis enviados" + "Dados móveis recebidos" + "Dados Wi-Fi enviados" + "Dados Wi-Fi recebidos" "Áudio" "Vídeo" "Tempo ligado" @@ -1460,6 +1478,7 @@ "Frequência do som" "Afeta o tom do texto falado" "Idioma" + "Idioma não selecionado" "Define a voz específica do idioma para o texto falado" "Ouça um exemplo" "Reproduzir uma rápida demonstração da voz sintetizada" @@ -1594,7 +1613,7 @@ "EAP não é suportado." "Não é possível configurar uma conexão Wi-Fi EAP durante a configuração. É possível fazer isso em seguida, na opção \"Configurações\" > \"Sem fio e redes\"." "A conexão pode levar alguns minutos..." - "Toque em ""Próximo"" para continuar a configuração."\n\n"Toque em ""Voltar"" para conectar-se a outra rede Wi-Fi." + "Toque em ""Próximo"" para continuar a configuração.\n\nToque em ""Voltar"" para conectar-se a outra rede Wi-Fi." "Sincronização ativada" "Sincronização desativada" "Erro de sincronização." @@ -1622,7 +1641,7 @@ "Gmail" "Agenda" "Contatos" - "Bem-vindo ao Google Sync!"" "\n"Um método do Google para sincronizar dados a fim de permitir acesso aos seus contatos, compromissos e muito mais, onde quer que você esteja." + "Bem-vindo ao Google Sync!"" \nUm método do Google para sincronizar dados a fim de permitir acesso aos seus contatos, compromissos e muito mais, onde quer que você esteja." "Configurações de sincronização do aplicativo" "Dados e sincronização" "Alterar senha" @@ -1676,8 +1695,7 @@ "Piscar visualizações em janelas ao desenhar c/GPU" "Atual. camad. de hardware" "Piscar camadas de hardware em verde ao atualizar" - "Mostrar overdraw da CPU" - "Melhor p/ pior: azul, verde, verm. claro, vermelho" + "Depurar overdraw da GPU" "Desativar sobreposição HW" "Sempre usar a GPU para composição de tela" "Ativar rastream. OpenGL" @@ -1738,11 +1756,11 @@ "Desat. dados de seg. plano em redes móveis. Usar outras redes se disp." "Definir um limite de dados para restringir dados em 2º plano" "Restringir dados de segundo plano?" - "Este recurso pode fazer com que um aplicativo que depende de dados de segundo plano pare de funcionar quando somente redes de acesso limitado estiverem disponíveis."\n\n"Você pode encontrar controles de uso de dados mais apropriados nas configurações disponíveis no aplicativo." + "Este recurso pode fazer com que um aplicativo que depende de dados de segundo plano pare de funcionar quando somente redes de acesso limitado estiverem disponíveis.\n\nVocê pode encontrar controles de uso de dados mais apropriados nas configurações disponíveis no aplicativo." "Restringir dados de segundo plano só é possível quando você define um limite de dados móveis." "Ativar sincronização automática?" - "As alterações feitas em suas contas na web serão automaticamente copiadas para o tablet."\n\n"Algumas contas, como Contas do Google, também poderão copiar automaticamente as alterações feitas no tablet para a web."\n" "\n"Para determinar as informações a sincronizar em cada conta, acesse Configurações > Contas." - "As alterações feitas em suas contas na web serão automaticamente copiadas para o telefone."\n\n"Algumas contas, como Contas do Google, também poderão copiar automaticamente as alterações feitas no telefone para a web."\n" "\n"Para determinar as informações a sincronizar em cada conta, acesse Configurações > Contas." + "As alterações feitas em suas contas na web serão automaticamente copiadas para o tablet.\n\nAlgumas contas, como Contas do Google, também poderão copiar automaticamente as alterações feitas no tablet para a web.\n \nPara determinar as informações a sincronizar em cada conta, acesse Configurações > Contas." + "As alterações feitas em suas contas na web serão automaticamente copiadas para o telefone.\n\nAlgumas contas, como Contas do Google, também poderão copiar automaticamente as alterações feitas no telefone para a web.\n \nPara determinar as informações a sincronizar em cada conta, acesse Configurações > Contas." "Desativar sincroniz. automática?" "Isto preservará o uso de dados e da bateria, mas será necessário sincronizar manualmente cada conta para obter as informações mais recentes, e você não será informado de novas atualizações." "Data de redefinição do ciclo de uso" @@ -1751,12 +1769,12 @@ "Definir aviso de uso de dados" "Definir limite do uso de dados" "Limitando uso de dados" - "Sua conexão de dados móveis será desativada quando o limite especificado for atingido."\n\n"Como o uso de dados é calculado por seu tablet, e sua operadora pode entender o uso de forma diferente, use um limite moderado." - "Sua conexão de dados móveis será desativada quando o limite especificado for atingido."\n\n"Como o uso de dados é calculado por seu telefone, e sua operadora pode entender o uso de forma diferente, use um limite moderado." + "Sua conexão de dados móveis será desativada quando o limite especificado for atingido.\n\nComo o uso de dados é calculado por seu tablet, e sua operadora pode entender o uso de forma diferente, use um limite moderado." + "Sua conexão de dados móveis será desativada quando o limite especificado for atingido.\n\nComo o uso de dados é calculado por seu telefone, e sua operadora pode entender o uso de forma diferente, use um limite moderado." "Restringir dados de segundo plano?" "Ao restringir os dados móveis em segundo plano, alguns aplicativos e serviços só funcionarão se você estiver conectado a uma rede Wi-Fi." - "Ao restringir os dados móveis em segundo plano, alguns aplicativos e serviços só funcionarão se você estiver conectado a uma rede Wi-Fi."\n\n"Esta configuração afeta todos os usuários do tablet." - "Ao restringir os dados móveis em segundo plano, alguns aplicativos e serviços só funcionarão se você estiver conectado a uma rede Wi-Fi."\n\n"Esta configuração afeta todos os usuários do telefone." + "Ao restringir os dados móveis em segundo plano, alguns aplicativos e serviços só funcionarão se você estiver conectado a uma rede Wi-Fi.\n\nEsta configuração afeta todos os usuários do tablet." + "Ao restringir os dados móveis em segundo plano, alguns aplicativos e serviços só funcionarão se você estiver conectado a uma rede Wi-Fi.\n\nEsta configuração afeta todos os usuários do telefone." "^1"" ""^2"\n"aviso" "^1"" ""^2"\n"limite" "Aplicativos removidos" @@ -1843,8 +1861,8 @@ "Usuário" "Perfil restrito" "Adicionar novo usuário" - "Compartilhe este dispositivo com outras pessoas criando usuários adicionais. Cada usuário terá seu próprio espaço, que poderá personalizar com seus próprios aplicativos, plano de fundo, etc. Os usuários também poderão ajustar configurações do tablet que afetam a todos, como o Wi-Fi."\n\n"Depois que você cria um novo usuário, essa pessoa deve concluir o processo de configuração."\n\n"Qualquer usuário poderá aceitar permissões atualizadas de aplicativos em nome de todos os demais." - "Depois que você cria um novo usuário, essa pessoa deve concluir o processo de configuração."\n\n"Qualquer usuário poderá aceitar permissões atualizadas de aplicativos em nome de todos os demais." + "Compartilhe este dispositivo com outras pessoas criando usuários adicionais. Cada usuário terá seu próprio espaço, que poderá personalizar com seus próprios aplicativos, plano de fundo, etc. Os usuários também poderão ajustar configurações do tablet que afetam a todos, como o Wi-Fi.\n\nDepois que você cria um novo usuário, essa pessoa deve concluir o processo de configuração.\n\nQualquer usuário poderá aceitar permissões atualizadas de aplicativos em nome de todos os demais." + "Depois que você cria um novo usuário, essa pessoa deve concluir o processo de configuração.\n\nQualquer usuário poderá aceitar permissões atualizadas de aplicativos em nome de todos os demais." "Configurar o usuário agora?" "Certifique-se de que a pessoa está disponível para assumir o tablet e configurar seu espaço" "Configurar perfil agora?" @@ -1875,6 +1893,9 @@ "Esta configuração afeta todos os usuários do telefone." "Alterar idioma" "Alterar tamanho da fonte" + "Restrições" + "Remover restrições" + "Alterar PIN" "Mostrar notificações" "Ajuda" "Conta para conteúdo" diff --git a/res/values-rm/arrays.xml b/res/values-rm/arrays.xml index 436d800cf48..0b0b1c7b10c 100644 --- a/res/values-rm/arrays.xml +++ b/res/values-rm/arrays.xml @@ -158,7 +158,8 @@ - + + @@ -190,6 +191,17 @@ + + + + + + + + + + + @@ -221,9 +233,26 @@ + + + + + + + + + + + + + + + + + @@ -267,6 +296,9 @@ + + + diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml index e35500b1860..f5d3bc1da9e 100644 --- a/res/values-rm/strings.xml +++ b/res/values-rm/strings.xml @@ -749,6 +749,8 @@ + + @@ -1906,10 +1908,7 @@ - "Dicziunari da l\'utilisader" - - - + "Agiuntar" @@ -2006,6 +2005,16 @@ "Restar activ" "Il visur na dorma mai cun chargiar" + + + + + + + + + + "Posiziuns faussas" "Permetter posiziuns faussas" "Permetter da debugar USB?" @@ -2037,6 +2046,10 @@ + + + + "Tscherner in gadget" "Tscherner in widget" @@ -2116,6 +2129,26 @@ + + + + + + + + + + + + + + + + + + + + "Consumaders da l\'accu" @@ -2169,8 +2202,14 @@ "Telefon" - "Datas tramessas" - "Datas recepidas" + + + + + + + + "Audio" "Video" "Temp activ" @@ -2244,6 +2283,8 @@ "Autezza dal tun" "Influenzescha il tun dal text discurrì" "Lingua" + + "Definescha la vusch specifica da mintga lingua per il text pledà" "Tadlar in exempel" "Far ina curta demonstraziun da la sintesa vocala" @@ -2631,9 +2672,7 @@ - - - + @@ -3028,6 +3067,12 @@ + + + + + + diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml index 3d909a85f54..74f8f83443e 100644 --- a/res/values-ro/arrays.xml +++ b/res/values-ro/arrays.xml @@ -233,7 +233,8 @@ "Locație" "Personal" "Mesagerie" - "Gadget" + "Media" + "Dispozitiv"
    "locație imprecisă" @@ -267,6 +268,17 @@ "redă conținut audio" "citește clipboardul" "modifică clipboardul" + "butoane media" + "focalizare audio" + "volum principal" + "volum voce" + "volum sonerie" + "volum media" + "volum alarmă" + "volum notificări" + "volumul Bluetooth" + "mențineți activ" + "monitorizarea locației" "Locație" @@ -300,12 +312,33 @@ "Redă conținut audio" "Citește clipboardul" "Modifică clipboardul" + "Butoane media" + "Focalizare audio" + "Volum principal" + "Volum voce" + "Volum sonerie" + "Volum media" + "Volum alarmă" + "Volum notificări" + "Volum Bluetooth" + "Mențineți activ" + "Locație" "Scurtă" "Medie" "Lungă" + + "Dalvik" + "ART" + "ART (depanare)" + + + "Utilizați Dalvik" + "Utilizați ART" + "Utilizați ART, versiunea de depanare" + "Nu verificaţi niciodată" "Verificaţi doar pentru conţinut DRM" @@ -367,6 +400,11 @@ "Pe ecran ca linii" "În adb shell dumpsys gfxinfo" + + "Dezactivată" + "Afișați zonele cu suprapunere" + "Afișați contorul de suprapunere" + "Limita standard" "Nu există procese de fundal" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 728a56b661a..f0ddbbdc9d3 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -275,8 +275,8 @@ "Aţi pierdut conectivitatea la date deoarece aţi părăsit reţeaua de domiciliu neavând activat roamingul." "Activaţi" "Când permiteţi roamingul de date puteţi acumula taxe considerabile pentru roaming!" - "Dacă permiteţi roamingul de date, puteţi acumula cheltuieli considerabile pentru roaming!"\n\n"Această setare afectează toţi utilizatorii de pe această tabletă." - "Dacă permiteţi roamingul de date, puteţi acumula cheltuieli considerabile pentru roaming!"\n\n"Această setare afectează toţi utilizatorii de pe acest telefon." + "Dacă permiteţi roamingul de date, puteţi acumula cheltuieli considerabile pentru roaming!\n\nAceastă setare afectează toţi utilizatorii de pe această tabletă." + "Dacă permiteţi roamingul de date, puteţi acumula cheltuieli considerabile pentru roaming!\n\nAceastă setare afectează toţi utilizatorii de pe acest telefon." "Permiteţi roamingul de date?" "Selectarea operatorului" "Alegeţi un operator de reţea" @@ -322,8 +322,8 @@ "Necesită un cod PIN numeric sau o parolă de decriptare a tabletei la fiecare pornire a acesteia" "Necesită un cod PIN numeric sau o parolă de decriptare a telefonului la fiecare pornire a acestuia" "Criptat" - "Puteţi să criptaţi conturi, setări, aplicaţii descărcate şi datele acestora, fişiere media şi alte tipuri de fişiere. După criptarea tabletei, trebuie să introduceţi un cod PIN numeric sau o parolă pentru a o decripta de fiecare dată când o porniţi. Nu puteţi decripta tableta decât prin resetarea configurării din fabrică, ceea ce va şterge toate datele de pe aceasta."\n\n"Criptarea poate dura cel puţin o oră. Trebuie să începeţi cu o baterie încărcată şi să ţineţi tableta conectată până la finalizarea criptării. Întreruperea procesului de criptare poate duce la pierderea tuturor datelor sau a unor părţi din acestea." - "Puteţi să criptaţi conturi, setări, aplicaţii descărcate şi datele acestora, fişiere media şi alte tipuri de fişiere. După criptarea telefonului, trebuie să introduceţi un cod PIN numeric sau o parolă pentru a-l decripta de fiecare dată când îl porniţi. Nu puteţi decripta telefonul decât prin resetarea configurării din fabrică, ceea ce va şterge toate datele de pe acesta."\n\n"Criptarea poate dura cel puţin o oră. Trebuie să începeţi cu o baterie încărcată şi să ţineţi telefonul conectat până la finalizarea criptării. Întreruperea procesului de criptare poate duce la pierderea tuturor datelor sau a unor părţi din acestea." + "Puteţi să criptaţi conturi, setări, aplicaţii descărcate şi datele acestora, fişiere media şi alte tipuri de fişiere. După criptarea tabletei, trebuie să introduceţi un cod PIN numeric sau o parolă pentru a o decripta de fiecare dată când o porniţi. Nu puteţi decripta tableta decât prin resetarea configurării din fabrică, ceea ce va şterge toate datele de pe aceasta.\n\nCriptarea poate dura cel puţin o oră. Trebuie să începeţi cu o baterie încărcată şi să ţineţi tableta conectată până la finalizarea criptării. Întreruperea procesului de criptare poate duce la pierderea tuturor datelor sau a unor părţi din acestea." + "Puteţi să criptaţi conturi, setări, aplicaţii descărcate şi datele acestora, fişiere media şi alte tipuri de fişiere. După criptarea telefonului, trebuie să introduceţi un cod PIN numeric sau o parolă pentru a-l decripta de fiecare dată când îl porniţi. Nu puteţi decripta telefonul decât prin resetarea configurării din fabrică, ceea ce va şterge toate datele de pe acesta.\n\nCriptarea poate dura cel puţin o oră. Trebuie să începeţi cu o baterie încărcată şi să ţineţi telefonul conectat până la finalizarea criptării. Întreruperea procesului de criptare poate duce la pierderea tuturor datelor sau a unor părţi din acestea." "Criptaţi tableta" "Criptaţi telefonul" "Încărcaţi bateria şi încercaţi din nou." @@ -339,8 +339,8 @@ "Încercaţi din nou peste ^1 (de) secunde." "Introduceţi parola" "Criptare nereuşită" - "Criptarea a fost întreruptă şi nu se poate finaliza. Prin urmare, datele de pe tableta dvs. nu mai sunt accesibile. "\n\n"Pentru a relua utilizarea tabletei, trebuie să efectuaţi o resetare la valorile din fabrică. Când configuraţi tableta după resetare, veţi putea restabili toate datele pentru care aţi creat copii de rezervă în Contul Google." - "Criptarea a fost întreruptă şi nu se poate finaliza. Prin urmare, datele de pe telefonul dvs. nu mai sunt accesibile. "\n\n"Pentru a relua utilizarea telefonului, trebuie să efectuaţi o resetare la valorile din fabrică. Când configuraţi telefonul după resetare, veţi putea restabili toate datele pentru care aţi creat copii de rezervă în Contul Google." + "Criptarea a fost întreruptă şi nu se poate finaliza. Prin urmare, datele de pe tableta dvs. nu mai sunt accesibile. \n\nPentru a relua utilizarea tabletei, trebuie să efectuaţi o resetare la valorile din fabrică. Când configuraţi tableta după resetare, veţi putea restabili toate datele pentru care aţi creat copii de rezervă în Contul Google." + "Criptarea a fost întreruptă şi nu se poate finaliza. Prin urmare, datele de pe telefonul dvs. nu mai sunt accesibile. \n\nPentru a relua utilizarea telefonului, trebuie să efectuaţi o resetare la valorile din fabrică. Când configuraţi telefonul după resetare, veţi putea restabili toate datele pentru care aţi creat copii de rezervă în Contul Google." "Comutaţi metoda de introducere" "Alegeţi blocare ecran" "Aleg. blocare rezervă" @@ -514,6 +514,7 @@ "Se conectează" "Conectat" "Disponibil" + "Se utilizează" "Setări de afişare" "Deconectaţi?" "Această acţiune va încheia conexiunea cu:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Dezactivată" "Indisponibilă, deoarece NFC este oprit" "Android Beam" - "După activarea acestei funcţii, puteţi transmite conţinutul aplicaţiilor către un alt dispozitiv compatibil NFC, ţinând cele două dispozitive apropiate unul de celălalt. De exemplu, puteţi să transmiteţi pagini din browser, videoclipuri YouTube, persoane din agendă şi multe altele."\n\n"Nu trebuie decât să apropiaţi cele două dispozitive (de obicei, aşezându-le unul în spatele celuilalt) şi să atingeţi ecranul. Aplicaţia determină apoi ce poate fi transmis." + "După activarea acestei funcţii, puteţi transmite conţinutul aplicaţiilor către un alt dispozitiv compatibil NFC, ţinând cele două dispozitive apropiate unul de celălalt. De exemplu, puteţi să transmiteţi pagini din browser, videoclipuri YouTube, persoane din agendă şi multe altele.\n\nNu trebuie decât să apropiaţi cele două dispozitive (de obicei, aşezându-le unul în spatele celuilalt) şi să atingeţi ecranul. Aplicaţia determină apoi ce poate fi transmis." "Descoperire serviciu de reţea" "Permite aplicaţiilor de pe alte dispozitive să descopere aplicaţii pe acest dispozitiv" "Wi-Fi" @@ -620,7 +621,7 @@ "Securizată cu %1$s" ", securizată cu %1$s" "Niciuna" - "Pentru a îmbunătăți precizia locației, precum și pentru alte scopuri, %1$s solicită permisiunea să activeze scanarea rețelelor, chiar și atunci când rețeaua Wi-Fi este dezactivată."\n\n"Permiteți acest lucru pentru toate aplicațiile care solicită scanarea?" + "Pentru a îmbunătăți precizia locației, precum și pentru alte scopuri, %1$s solicită permisiunea să activeze scanarea rețelelor, chiar și atunci când rețeaua Wi-Fi este dezactivată.\n\nPermiteți acest lucru pentru toate aplicațiile care solicită scanarea?" "Permiteți" "Respingeți" "Conectaţi-vă" @@ -632,8 +633,8 @@ "Anulaţi" "Ignoraţi oricum" "Nu ignoraţi" - "AVERTISMENT: puteţi acumula costuri suplimentare pentru date de la operator."\n\n"Configurarea tabletei poate presupune o activitate semnificativă în reţea." - "AVERTISMENT: puteţi acumula costuri suplimentare pentru date de la operator."\n\n"Configurarea telefonului poate presupune o activitate semnificativă în reţea." + "AVERTISMENT: puteţi acumula costuri suplimentare pentru date de la operator.\n\nConfigurarea tabletei poate presupune o activitate semnificativă în reţea." + "AVERTISMENT: puteţi acumula costuri suplimentare pentru date de la operator.\n\nConfigurarea telefonului poate presupune o activitate semnificativă în reţea." "AVERTISMENT: tableta nu va putea verifica actualizarea software-ului decât după ce aveți o conexiune de internet." "AVERTISMENT: telefonul nu va putea verifica actualizarea software-ului decât după ce aveți o conexiune de internet." "Tableta nu s-a putut conecta la această rețea Wi-Fi." @@ -773,9 +774,9 @@ "PIN SIM" "Cod PIN incorect" "Codurile PIN nu corespund" - "Nu se poate schimba codul PIN."\n"Codul PIN poate fi incorect." + "Nu se poate schimba codul PIN.\nCodul PIN poate fi incorect." "Codul PIN pentru SIM a fost modificat" - "Nu se poate modifica starea de blocare a cardului SIM."\n"Codul PIN poate fi incorect." + "Nu se poate modifica starea de blocare a cardului SIM.\nCodul PIN poate fi incorect." "OK" "Anulaţi" "Stare tabletă" @@ -918,9 +919,9 @@ "Resetarea configurării din fabrică" "Șterge toate datele de pe tabletă" "Șterge toate datele de pe telefon" - "Această acţiune va şterge toate datele din ""stocarea internă"" a tabletei dvs., inclusiv:"\n\n
  • "Contul dvs. Google;"
  • \n
  • "datele şi setările sistemului şi ale aplicaţiilor;"
  • \n
  • "aplicaţiile descărcate."
  • - "Această acţiune va şterge toate datele din ""stocarea internă"" a telefonului dvs., inclusiv:"\n\n
  • "Contul dvs. Google;"
  • \n
  • "datele şi setările sistemului şi ale aplicaţiilor;"
  • \n
  • "aplicaţiile descărcate."
  • - \n\n"În prezent sunteţi conectat(ă) la următoarele conturi:"\n + "Această acţiune va şterge toate datele din ""stocarea internă"" a tabletei dvs., inclusiv:\n\n"
  • "Contul dvs. Google;"
  • \n
  • "datele şi setările sistemului şi ale aplicaţiilor;"
  • \n
  • "aplicaţiile descărcate."
  • + "Această acţiune va şterge toate datele din ""stocarea internă"" a telefonului dvs., inclusiv:\n\n"
  • "Contul dvs. Google;"
  • \n
  • "datele şi setările sistemului şi ale aplicaţiilor;"
  • \n
  • "aplicaţiile descărcate."
  • + \n\n"În prezent sunteţi conectat(ă) la următoarele conturi:\n"
  • "Muzică"
  • \n
  • "Fotografii"
  • \n
  • "Alte date ale utilizatorului"
  • \n\n"Pentru a şterge muzică, imagini şi alte date ale utilizatorului, ""stocarea USB"" trebuie să fie ştearsă." \n\n"Pentru a şterge muzică, imagini şi alte date ale utilizatorului, ""cardul SD"" trebuie să fie şters." @@ -1105,7 +1106,7 @@ "Procese memorie cache" "Resetați pref. aplicații" "Resetaţi pref. aplicații?" - "Astfel vor fi resetate toate preferinţele pentru:"\n\n" "
  • "aplicaţii dezactivate;"
  • \n" "
  • "notificări de aplicaţii dezactivate;"
  • \n" "
  • "aplicaţii prestabilite pentru acţiuni;"
  • \n" "
  • "restricţii privind datele de fundal pentru aplicaţii."
  • \n\n" Nu veţi pierde nimic din datele aplicaţiilor."
    + "Astfel vor fi resetate toate preferinţele pentru:\n\n "
  • "aplicaţii dezactivate;"
  • \n" "
  • "notificări de aplicaţii dezactivate;"
  • \n" "
  • "aplicaţii prestabilite pentru acţiuni;"
  • \n" "
  • "restricţii privind datele de fundal pentru aplicaţii."
  • \n\n" Nu veţi pierde nimic din datele aplicaţiilor."
    "Resetaţi aplicaţiile" "Gestionaţi spaţiul" "Filtraţi" @@ -1241,9 +1242,7 @@ "Aspecte tastatură" - "Dicţionarul utilizatorului" - "Dicţionar personal" - "Dicţionare personale" + "Dicționar personal" "Adăugaţi" "Adăugaţi în dicţionar" @@ -1304,6 +1303,11 @@ "Includeţi în meniul de pornire opţiunea de a executa un raport despre erori" "Activ permanent" "Ecranul nu va fi inactiv pe durata încărcării" + "Activați jurnalul de examinare HCI Bluetooth" + "Înregistrați toate pachetele HCI Bluetooth într-un fișier" + "Select. mediul de execuție" + "Select. mediul de execuție" + "Reporniți pentru a schimba mediul de execuție de la %1$s la %2$s?" "Permiteţi locaţiile fictive" "Permiteţi locaţiile fictive" "Permiteţi depanarea USB?" @@ -1316,11 +1320,13 @@ "Protejaţi stocarea USB" "Aplicaţiile trebuie să ceară permisiunea de a citi stocarea USB" "Protejaţi stocarea USB?" - "Când stocarea USB este protejată, aplicaţiile trebuie să solicite permisiunea de a citi datele de pe stocarea externă."\n\n"Este posibil ca unele aplicaţii să nu funcţioneze înainte de a fi actualizate de către dezvoltatorii lor." + "Când stocarea USB este protejată, aplicaţiile trebuie să solicite permisiunea de a citi datele de pe stocarea externă.\n\nEste posibil ca unele aplicaţii să nu funcţioneze înainte de a fi actualizate de către dezvoltatorii lor." "Protejaţi cardul SD" "Aplicaţiile trebuie să ceară permisiunea de a citi cardul SD" "Protejaţi cardul SD?" - "Când cardul SD este protejat, aplicaţiile trebuie să solicite permisiunea de a citi datele de pe stocarea externă."\n\n"Este posibil ca unele aplicaţii să nu funcţioneze înainte de a fi actualizate de către dezvoltatorii lor." + "Când cardul SD este protejat, aplicaţiile trebuie să solicite permisiunea de a citi datele de pe stocarea externă.\n\nEste posibil ca unele aplicaţii să nu funcţioneze înainte de a fi actualizate de către dezvoltatorii lor." + "Aplicație terminal locală" + "Activați aplicația terminal care oferă acces la shell local" "Alegeţi obiectul gadget" "Alegeţi obiectul widget" "Creaţi widgetul şi permiteţi accesul?" @@ -1341,11 +1347,11 @@ "Servicii" "Sistem" "Gesturi pentru mărire" - "După activarea acestei funcţii, puteţi mări şi micşora atingând de trei ori ecranul."\n\n"În timp ce măriţi, puteţi:"\n
    • "să deplasaţi: deplasaţi două sau mai multe degete pe ecran;"
    • \n
    • "să ajustaţi nivelul de zoom: ciupiţi cu două sau mai multe degete ori îndepărtați-le."
    \n\n"De asemenea, puteţi să măriţi temporar ce se află sub degetul dvs. atingând ecranul de trei ori şi menţinând degetul pe ecran. În această stare mărită, puteţi să glisaţi degetul pentru a explora diferite părţi ale ecranului. Ridicaţi degetul pentru a reveni la starea anterioară."\n\n"Notă: atingerea triplă pentru mărire funcţionează peste tot, cu excepţia tastaturii şi a barei de navigare."
    + "După activarea acestei funcţii, puteţi mări şi micşora atingând de trei ori ecranul.\n\nÎn timp ce măriţi, puteţi:\n"
    • "să deplasaţi: deplasaţi două sau mai multe degete pe ecran;"
    • \n
    • "să ajustaţi nivelul de zoom: ciupiţi cu două sau mai multe degete ori îndepărtați-le."
    \n\n"De asemenea, puteţi să măriţi temporar ce se află sub degetul dvs. atingând ecranul de trei ori şi menţinând degetul pe ecran. În această stare mărită, puteţi să glisaţi degetul pentru a explora diferite părţi ale ecranului. Ridicaţi degetul pentru a reveni la starea anterioară.\n\nNotă: atingerea triplă pentru mărire funcţionează peste tot, cu excepţia tastaturii şi a barei de navigare."
    "Comandă rapidă accesibilitate" "Activat" "Dezactivată" - "După activarea acestei funcţii, puteţi să activaţi rapid funcţiile de accesibilitate în doi paşi:"\n\n"Pasul 1: apăsaţi şi menţineţi apăsat butonul de pornire până când auziţi un sunet sau simţiţi o vibraţie."\n\n"Pasul 2: atingeţi ecranul cu două degete şi menţineţi degetele pe ecran până când auziţi o confirmare audio."\n\n"Dacă gadgetul are mai mulţi utilizatori, folosirea acestei comenzi rapide pe ecranul de blocare activează temporar accesibilitatea până când gadgetul este deblocat." + "După activarea acestei funcţii, puteţi să activaţi rapid funcţiile de accesibilitate în doi paşi:\n\nPasul 1: apăsaţi şi menţineţi apăsat butonul de pornire până când auziţi un sunet sau simţiţi o vibraţie.\n\nPasul 2: atingeţi ecranul cu două degete şi menţineţi degetele pe ecran până când auziţi o confirmare audio.\n\nDacă gadgetul are mai mulţi utilizatori, folosirea acestei comenzi rapide pe ecranul de blocare activează temporar accesibilitatea până când gadgetul este deblocat." "Text mare" "Mărirea ecranului" "Actualizaţi auto. mărirea ecranului" @@ -1367,6 +1373,16 @@ "Serviciul TalkBack oferă feedback vocal pentru a ajuta utilizatorii nevăzători şi cu probleme de vedere. Doriţi să îl instalaţi în mod gratuit din Android Market?" "Nu a fost furnizată o descriere." "Setări" + "Printare" + "Setări de printare" + "Servicii" + "Utilizați %1$s?" + "%1$s poate primi documentele pe care le printați. Aceste documente pot conține informații delicate." + "Nu există servicii instalate" + "Setări" + "Adăugați imprimante" + "Activată" + "Dezactiv." "Acumulator" "Ce funcţii au utilizat bateria" "Date utilizare baterie nedisp." @@ -1406,8 +1422,10 @@ "Funcționare Wi-Fi" "Tabletă" "Telefon" - "Date trimise" - "Date primite" + "Date mobile trimise" + "Date mobile primite" + "Date Wi-Fi trimise" + "Date Wi-Fi primite" "Audio" "Video" "Durată de activitate" @@ -1461,6 +1479,7 @@ "Înălţime" "Afectează tonul textului vorbit" "Limbă" + "Nu ați selectat limba" "Setează vocea caracteristică limbii pentru textul vorbit" "Ascultaţi un exemplu" "Redaţi o demonstraţie scurtă a sintetizării vorbirii" @@ -1595,7 +1614,7 @@ "EAP nu este acceptat." "Nu puteți configura o conexiune Wi-Fi EAP în timpul instalării. După instalare, puteți face acest lucru în Setări > Rețele wireless." "Conectarea poate dura câteva minute..." - "Atingeți ""Înainte"" pentru a continua configurarea."\n\n"Atingeți ""Înapoi"" pentru a vă conecta la altă rețea Wi-Fi." + "Atingeți ""Înainte"" pentru a continua configurarea.\n\nAtingeți ""Înapoi"" pentru a vă conecta la altă rețea Wi-Fi." "Sincronizare activată" "Sincronizare dezactivată" "Eroare de sincronizare." @@ -1623,7 +1642,7 @@ "Gmail" "Calendar" "Agendă" - "Bun venit la Sincronizarea Google!"" "\n"O abordare Google asupra sincronizării datelor, care vă permite accesul la agenda dvs., la întâlniri şi la multe alte informaţii, oriunde v-aţi afla." + "Bun venit la Sincronizarea Google!"" \nO abordare Google asupra sincronizării datelor, care vă permite accesul la agenda dvs., la întâlniri şi la multe alte informaţii, oriunde v-aţi afla." "Setări privind sincronizarea aplicaţiei" "Datele şi sincronizarea" "Schimbaţi parola" @@ -1677,8 +1696,7 @@ "Iluminare ecrane din ferestre la desenarea cu GPU" "Actualiz. strat. hardware" "Straturile hardware clipesc verde la actualizare" - "Nivel suprapunere GPU" - "Max. – min.: albastru, verde, roşu deschis, roşu." + "Depanați suprapunerea" "Dezactivaţi suprapun. HW" "Utilizaţi mereu GPU pentru compunerea ecranului" "Monitorizări OpenGL" @@ -1739,11 +1757,11 @@ "Dezact. date de fundal în reţele mobile. Dacă sunt dispon., utiliz. reţele non-mobile." "Pt. restr. dat. fundal pt. aplic., set. întâi lim. pt. date mob." "Restricţionaţi datele de fundal?" - "Această funcţie poate face ca o aplicaţie care depinde de datele de fundal să nu mai funcţioneze când sunt disponibile numai reţele mobile."\n\n"Puteţi găsi comenzi mai adecvate pentru utilizarea datelor în setările disponibile în cadrul aplicaţiei." + "Această funcţie poate face ca o aplicaţie care depinde de datele de fundal să nu mai funcţioneze când sunt disponibile numai reţele mobile.\n\nPuteţi găsi comenzi mai adecvate pentru utilizarea datelor în setările disponibile în cadrul aplicaţiei." "Restricţionarea datelor de fundal este posibilă numai dacă aţi setat o limită de date mobile." "Activaţi sinc. autom. a datelor?" - "Modificările conturilor dvs. pe web vor fi copiate în mod automat pe tabletă."\n\n"Unele conturi pot să copieze, de asemenea, în mod automat toate modificările pe care le efectuaţi pe tabletă pe web. Aşa funcţionează un Cont Google."\n\n"Pentru a alege ce tipuri de informaţii se pot sincroniza în fiecare cont, accesaţi Setări > Conturi." - "Modificările conturilor dvs. pe web vor fi copiate în mod automat pe telefon."\n\n"Unele conturi pot să copieze, de asemenea, în mod automat toate modificările pe care le efectuaţi pe telefon pe web. Aşa funcţionează un Cont Google."\n\n"Pentru a alege ce tipuri de informaţii se pot sincroniza în fiecare cont, accesaţi Setări > Conturi." + "Modificările conturilor dvs. pe web vor fi copiate în mod automat pe tabletă.\n\nUnele conturi pot să copieze, de asemenea, în mod automat toate modificările pe care le efectuaţi pe tabletă pe web. Aşa funcţionează un Cont Google.\n\nPentru a alege ce tipuri de informaţii se pot sincroniza în fiecare cont, accesaţi Setări > Conturi." + "Modificările conturilor dvs. pe web vor fi copiate în mod automat pe telefon.\n\nUnele conturi pot să copieze, de asemenea, în mod automat toate modificările pe care le efectuaţi pe telefon pe web. Aşa funcţionează un Cont Google.\n\nPentru a alege ce tipuri de informaţii se pot sincroniza în fiecare cont, accesaţi Setări > Conturi." "Dezact. sinc. autom. a datelor?" "Această acţiune va economisi date şi durata bateriei, dar va trebui să sincronizaţi fiecare cont manual pentru a culege informaţiile recente. În plus, nu veţi primi notificări atunci când apar actualizări." "Data de resetare a ciclului de utilizare" @@ -1752,12 +1770,12 @@ "Setaţi un avertisment de utilizare a datelor" "Setaţi o limită de utilizare a datelor" "Limitarea utilizării datelor" - "Conexiunea de date mobile va fi dezactivată la atingerea limitei specificate."\n\n"Din moment ce utilizarea de date este măsurată de tableta dvs., iar operatorul poate contabiliza în mod diferit utilizarea, vă recomandăm să utilizaţi o limită estimativă." - "Conexiunea de date mobile va fi dezactivată la atingerea limitei specificate."\n\n"Din moment ce utilizarea de date este măsurată de telefonul dvs., iar operatorul poate contabiliza în mod diferit utilizarea, vă recomandăm să utilizaţi o limită estimativă." + "Conexiunea de date mobile va fi dezactivată la atingerea limitei specificate.\n\nDin moment ce utilizarea de date este măsurată de tableta dvs., iar operatorul poate contabiliza în mod diferit utilizarea, vă recomandăm să utilizaţi o limită estimativă." + "Conexiunea de date mobile va fi dezactivată la atingerea limitei specificate.\n\nDin moment ce utilizarea de date este măsurată de telefonul dvs., iar operatorul poate contabiliza în mod diferit utilizarea, vă recomandăm să utilizaţi o limită estimativă." "Restricţionaţi datele de fundal?" "Dacă limitați transferul de date mobile în fundal, unele aplicații și servicii nu vor funcționa decât dacă sunteți conectat(ă) la o rețea Wi-Fi." - "Dacă limitați transferul de date mobile în fundal, unele aplicații și servicii nu vor funcționa decât dacă sunteți conectat(ă) la o rețea Wi-Fi."\n\n"Această setare afectează toți utilizatorii de pe această tabletă." - "Dacă limitați transferul de date mobile în fundal, unele aplicații și servicii nu vor funcționa decât dacă sunteți conectat(ă) la o rețea Wi-Fi."\n\n"Această setare afectează toți utilizatorii de pe acest telefon." + "Dacă limitați transferul de date mobile în fundal, unele aplicații și servicii nu vor funcționa decât dacă sunteți conectat(ă) la o rețea Wi-Fi.\n\nAceastă setare afectează toți utilizatorii de pe această tabletă." + "Dacă limitați transferul de date mobile în fundal, unele aplicații și servicii nu vor funcționa decât dacă sunteți conectat(ă) la o rețea Wi-Fi.\n\nAceastă setare afectează toți utilizatorii de pe acest telefon." "^1"" ""^2"\n"avertisment" "^1"" ""^2"\n"limită" "Aplicaţii eliminate" @@ -1844,8 +1862,8 @@ "Utilizator" "Profil limitat" "Adăugaţi un utilizator nou" - "Puteți să permiteți accesul la acest gadget altor persoane, prin crearea unor utilizatori suplimentari. Fiecare utilizator are propriul spațiu, pe care îl poate personaliza cu propriile sale aplicații, imagini de fundal etc. De asemenea, utilizatorii pot ajusta setările tabletei, cum ar fi setările pentru Wi-Fi, care afectează pe toți ceilalți utilizatori."\n\n"După ce creați un utilizator nou, respectiva persoană trebuie să parcurgă un proces de configurare."\n\n"Oricare utilizator poate accepta permisiunile aplicațiilor actualizate în numele tuturor celorlalți utilizatori." - "După ce creaţi un utilizator nou, respectiva persoană trebuie să parcurgă un proces de configurare."\n\n"Oricare utilizator poate accepta permisiunile aplicaţiilor actualizate în numele tuturor celorlalţi utilizatori." + "Puteți să permiteți accesul la acest gadget altor persoane, prin crearea unor utilizatori suplimentari. Fiecare utilizator are propriul spațiu, pe care îl poate personaliza cu propriile sale aplicații, imagini de fundal etc. De asemenea, utilizatorii pot ajusta setările tabletei, cum ar fi setările pentru Wi-Fi, care afectează pe toți ceilalți utilizatori.\n\nDupă ce creați un utilizator nou, respectiva persoană trebuie să parcurgă un proces de configurare.\n\nOricare utilizator poate accepta permisiunile aplicațiilor actualizate în numele tuturor celorlalți utilizatori." + "După ce creaţi un utilizator nou, respectiva persoană trebuie să parcurgă un proces de configurare.\n\nOricare utilizator poate accepta permisiunile aplicaţiilor actualizate în numele tuturor celorlalţi utilizatori." "Configuraţi utilizatorul acum?" "Asiguraţi-vă că respectiva persoană poate să preia tableta şi să îşi configureze propriul spaţiu" "Configurați profilul acum?" @@ -1876,6 +1894,9 @@ "Această setare afectează toţi utilizatorii de pe acest telefon." "Schimbaţi limba" "Modificaţi dimensiunea fontului" + "Restricții" + "Eliminați restricțiile" + "Schimbați codul PIN" "Afişaţi notificările" "Ajutor" "Cont pentru conţinut" diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml index c63f13dc87f..3960a266235 100644 --- a/res/values-ru/arrays.xml +++ b/res/values-ru/arrays.xml @@ -233,7 +233,8 @@ "Местоположение" "Личные данные" "SMS/MMS" - "Устройство" + "Мультимедиа" + "Устройство"
    "приблизительное местоположение" @@ -252,7 +253,7 @@ "позвонить" "чтение SMS" "создание SMS" - "получение SMS" + "Получение SMS" "получение экстренных SMS" "получение MMS" "получение сообщений WAP PUSH" @@ -261,12 +262,23 @@ "запись SMS на смарт-карту" "изменение настроек" "отображать поверх других элементов" - "доступ к уведомлениям" + "Доступ к уведомлениям" "камера" "записать аудио" "воспроизвести аудио" "считать из буфера обмена" "изменить буфер обмена" + "кнопки мультимедиа" + "аудиофокус" + "общая громкость" + "громкость голоса" + "громкость звонка" + "громкость мультимедиа" + "громкость будильника" + "громкость уведомлений" + "громкость Bluetooth-устройств" + "не отключать" + "Отслеживать местоположение" "Местоположение" @@ -300,12 +312,33 @@ "Воспроизвести аудио" "Считать из буфера обмена" "Изменить буфер обмена" + "Кнопки мультимедиа" + "Аудиофокус" + "Общая громкость" + "Громкость голоса" + "Громкость звонка" + "Громкость мультимедиа" + "Громкость будильника" + "Громкость уведомлений" + "Громкость Bluetooth-устройств" + "Не отключать" + "Местоположение" "Небольшая" "Средняя" "Большая" + + "Dalvik" + "ART" + "ART (отладка)" + + + "Использовать Dalvik" + "Использовать ART" + "Использовать отладочную версию ART" + "Никогда не проверять" "Проверять только содержание DRM" @@ -367,6 +400,11 @@ "На экране в виде линий" "В adb shell dumpsys gfxinfo" + + "ВЫКЛ" + "Показывать области наложения" + "Показывать число объектов" + "Стандартное ограничение" "Без фоновых процессов" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 52d027c5b97..ad69cefb827 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -275,8 +275,8 @@ "Передача данных прекращена, потому что телефон находится за пределами домашней сети, а интернет-роуминг выключен." "Включить" "Возможны высокие расходы на использование роуминга." - "Использование роуминга может повлечь за собой непредвиденные расходы."\n\n"Настройки будут изменены для всех пользователей устройства." - "Использование роуминга может повлечь за собой непредвиденные расходы."\n\n"Настройки будут изменены для всех пользователей устройства." + "Использование роуминга может повлечь за собой непредвиденные расходы.\n\nНастройки будут изменены для всех пользователей устройства." + "Использование роуминга может повлечь за собой непредвиденные расходы.\n\nНастройки будут изменены для всех пользователей устройства." "Разрешить интернет-роуминг?" "Выбор оператора" "Выберите оператора связи" @@ -322,8 +322,8 @@ "Запрос числового PIN-кода или пароля для дешифрования при каждом включении планшетного ПК" "Запрос числового PIN-кода или пароля для дешифрования при каждом включении телефона" "Зашифровано" - "Можно зашифровать данные различных типов: аккаунты, настройки, загруженные приложения и их контент, мультимедийные и другие файлы. После этого при каждом включении устройства потребуется вводить PIN-код или пароль. Шифрование снимается только путем сброса настроек, в результате которого удаляются все данные."\n\n"Шифрование занимает не менее часа. Батарея должна быть полностью заряжена, а устройство подключено к источнику питания, пока шифрование не завершится. Если прервать его, данные будут частично или полностью потеряны." - "Можно зашифровать данные различных типов: аккаунты, настройки, загруженные приложения и их контент, мультимедийные и другие файлы. После этого при каждом включении устройства потребуется вводить PIN-код или пароль. Шифрование снимается только путем сброса настроек, в результате которого удаляются все данные."\n\n"Шифрование занимает не менее часа. Батарея должна быть полностью заряжена, а устройство подключено к источнику питания, пока шифрование не завершится. Если прервать его, данные на устройстве будут частично или полностью потеряны." + "Можно зашифровать данные различных типов: аккаунты, настройки, загруженные приложения и их контент, мультимедийные и другие файлы. После этого при каждом включении устройства потребуется вводить PIN-код или пароль. Шифрование снимается только путем сброса настроек, в результате которого удаляются все данные.\n\nШифрование занимает не менее часа. Батарея должна быть полностью заряжена, а устройство подключено к источнику питания, пока шифрование не завершится. Если прервать его, данные будут частично или полностью потеряны." + "Можно зашифровать данные различных типов: аккаунты, настройки, загруженные приложения и их контент, мультимедийные и другие файлы. После этого при каждом включении устройства потребуется вводить PIN-код или пароль. Шифрование снимается только путем сброса настроек, в результате которого удаляются все данные.\n\nШифрование занимает не менее часа. Батарея должна быть полностью заряжена, а устройство подключено к источнику питания, пока шифрование не завершится. Если прервать его, данные на устройстве будут частично или полностью потеряны." "Зашифровать данные" "Зашифровать данные" "Зарядите батарею и повторите попытку." @@ -339,8 +339,8 @@ "Повторите попытку через ^1 с." "Введите пароль" "Сбой шифрования" - "Данные на вашем планшетном ПК больше недоступны из-за того, что шифрование было прервано. "\n\n"Чтобы дальше использовать устройство, нужно сбросить настройки. После этого вы сможете восстановить все данные, для которых в аккаунте Google были созданы резервные копии." - "Данные на вашем телефоне больше недоступны из-за того, что шифрование было прервано. "\n\n"Чтобы дальше использовать устройство, нужно сбросить настройки. После этого вы сможете восстановить все данные, для которых в аккаунте Google были созданы резервные копии." + "Данные на вашем планшетном ПК больше недоступны из-за того, что шифрование было прервано. \n\nЧтобы дальше использовать устройство, нужно сбросить настройки. После этого вы сможете восстановить все данные, для которых в аккаунте Google были созданы резервные копии." + "Данные на вашем телефоне больше недоступны из-за того, что шифрование было прервано. \n\nЧтобы дальше использовать устройство, нужно сбросить настройки. После этого вы сможете восстановить все данные, для которых в аккаунте Google были созданы резервные копии." "Сменить способ ввода" "Блокировка экрана" "Доп. способ блокировки" @@ -514,6 +514,7 @@ "Подключение…" "Подключен" "Доступен" + "Используется" "Настройки экрана" "Отключиться?" "Произойдет разъединение с устройством<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Выключено" "Недоступно, так как отключена связь малого радиуса действия" "Android Beam" - "Когда включена эта функция, вы можете обмениваться данными между устройствами, просто приложив их друг к другу."\n\n"Передавать можно практически любые данные, включая контакты, ссылки, веб-страницы, фотографии и видео." + "Когда включена эта функция, вы можете обмениваться данными между устройствами, просто приложив их друг к другу.\n\nПередавать можно практически любые данные, включая контакты, ссылки, веб-страницы, фотографии и видео." "Обнаружение сетевых служб" "Разрешить приложениям на других устройствах обнаруживать приложения на этом устройстве" "Wi-Fi" @@ -620,7 +621,7 @@ "Защита %1$s" ", защита %1$s" "Нет" - "Чтобы определение местоположения и некоторые другие функции работали лучше, приложению \"%1$s\" необходимо выполнять поиск сетей, даже если модуль Wi-Fi отключен."\n\n"Разрешить?" + "Чтобы определение местоположения и некоторые другие функции работали лучше, приложению \"%1$s\" необходимо выполнять поиск сетей, даже если модуль Wi-Fi отключен.\n\nРазрешить?" "Разрешить" "Отклонить" "Подключить" @@ -632,8 +633,8 @@ "Отмена" "ОК" "Отмена" - "ВНИМАНИЕ! Возможны дополнительные расходы на услуги оператора связи."\n\n"Настройка устройства может потребовать передачи большого объема данных по сети." - "ВНИМАНИЕ! Возможны дополнительные расходы на услуги оператора связи."\n\n"Настройка устройства может потребовать передачи большого объема данных по сети." + "ВНИМАНИЕ! Возможны дополнительные расходы на услуги оператора связи.\n\nНастройка устройства может потребовать передачи большого объема данных по сети." + "ВНИМАНИЕ! Возможны дополнительные расходы на услуги оператора связи.\n\nНастройка устройства может потребовать передачи большого объема данных по сети." "ВНИМАНИЕ! Без подключения к Интернету невозможно проверить наличие обновлений для ПО." "ВНИМАНИЕ! Без подключения к Интернету невозможно проверить наличие обновлений для ПО." "Не удалось подключиться к сети Wi-Fi." @@ -773,9 +774,9 @@ "PIN-код SIM-карты" "Неверный PIN-код" "PIN-коды не совпадают" - "Не удается изменить PIN."\n"Возможно, код введен неверно." + "Не удается изменить PIN.\nВозможно, код введен неверно." "PIN-код SIM-карты успешно изменен" - "Не удалось изменить состояние блокировки SIM-карты."\n"Возможно, введен неверный PIN-код." + "Не удалось изменить состояние блокировки SIM-карты.\nВозможно, введен неверный PIN-код." "ОК" "Отмена" "Состояние планшетного ПК" @@ -918,9 +919,9 @@ "Сброс настроек" "Возврат к заводским настройкам и удаление всех данных из памяти планшетного ПК" "Возврат к заводским настройкам и удаление всех данных из памяти телефона" - "Будут удалены все данные из ""внутренней памяти"" устройства, в том числе:"\n\n
  • "Ваш аккаунт Google"
  • \n
  • "Настройки/данные системы и приложений"
  • \n
  • "Загруженные приложения"
  • - "Будут удалены все данные из ""внутренней памяти"" устройства, в том числе:"\n\n
  • "Ваш аккаунт Google"
  • \n
  • "Настройки/данные системы и приложений"
  • \n
  • "Загруженные приложения"
  • - \n\n"Аккаунты, добавленные на этом устройстве:"\n + "Будут удалены все данные из ""внутренней памяти"" устройства, в том числе:\n\n"
  • "Ваш аккаунт Google"
  • \n
  • "Настройки/данные системы и приложений"
  • \n
  • "Загруженные приложения"
  • + "Будут удалены все данные из ""внутренней памяти"" устройства, в том числе:\n\n"
  • "Ваш аккаунт Google"
  • \n
  • "Настройки/данные системы и приложений"
  • \n
  • "Загруженные приложения"
  • + \n\n"Аккаунты, добавленные на этом устройстве:\n"
  • "Музыка"
  • \n
  • "Фото"
  • \n
  • "Другие данные"
  • \n\n"Чтобы удалить музыку, изображения и другие пользовательские данные, необходимо очистить ""USB-накопитель""." \n\n"Чтобы удалить музыку, фотографии и другие пользовательские данные, необходимо очистить ""SD-карту""." @@ -1105,7 +1106,7 @@ "Показать процессы в кэше" "Сбросить настройки" "Сбросить настройки?" - "Будут сброшены следующие настройки:"\n\n" "
  • "список отключенных приложений;"
  • \n" "
  • "уведомления для отключенных приложений;"
  • \n" "
  • "список приложений по умолчанию;"
  • \n" "
  • "ограничения на передачу данных в фоновом режиме."
  • \n\n" Данные приложений удалены не будут."
    + "Будут сброшены следующие настройки:\n\n "
  • "список отключенных приложений;"
  • \n" "
  • "уведомления для отключенных приложений;"
  • \n" "
  • "список приложений по умолчанию;"
  • \n" "
  • "ограничения на передачу данных в фоновом режиме."
  • \n\n" Данные приложений удалены не будут."
    "Да" "Управление местом" "Фильтр" @@ -1240,9 +1241,7 @@ "Для смены нажмите CTRL + Пробел" "По умолчанию" "Раскладка клавиатуры" - "Словарь пользователя" - "Пользовательский словарь" - "Пользовательские словари" + "Пользовательский словарь" "Добавить" "Добавление в словарь" @@ -1303,6 +1302,11 @@ "Показывать в меню опцию отправки отчета об ошибке" "Не выключать экран" "Во время зарядки экран будет всегда включен" + "Включить журнал трансляции операций HCI Bluetooth" + "Сохранять все пакеты HCI Bluetooth в файле" + "Выберите среду" + "Среда выполнения" + "Перезагрузить устройство, чтобы сменить среду выполнения с %1$s на %2$s?" "Фиктивные местоположения" "Разрешить использование фиктивных местоположений" "Разрешить отладку USB?" @@ -1315,11 +1319,13 @@ "Защитить USB-накопитель" "Запрашивать разрешение для считывания данных с USB-накопителя" "Защитить USB-накопитель?" - "Если USB-накопитель защищен, приложения должны запрашивать разрешение для считывания данных с него."\n\n"Некоторые приложения могут не работать. В этом случае дождитесь, пока они не обновятся." + "Если USB-накопитель защищен, приложения должны запрашивать разрешение для считывания данных с него.\n\nНекоторые приложения могут не работать. В этом случае дождитесь, пока они не обновятся." "Защитить SD-карту" "Запрашивать разрешение для считывания данных с SD-карты" "Защитить SD-карту?" - "Если SD-карта защищена, приложения должны запрашивать разрешение для считывания данных с нее."\n\n"Некоторые приложения могут не работать. В этом случае дождитесь, пока они не обновятся." + "Если SD-карта защищена, приложения должны запрашивать разрешение для считывания данных с нее.\n\nНекоторые приложения могут не работать. В этом случае дождитесь, пока они не обновятся." + "Локальный терминальный доступ" + "Разрешить терминальный доступ к локальной оболочке" "Выбор гаджета" "Выберите виджет" "Создать виджет и разрешить доступ?" @@ -1340,11 +1346,11 @@ "Службы" "Система" "Жесты для увеличения" - "Эта функция позволяет увеличивать и уменьшать изображение, трижды нажав на экран."\n\n"При увеличенном масштабе можно:"\n
    • "панорамировать – проведите пальцами по экрану;"
    • \n
    • "изменять масштаб – сведите или разведите пальцы."
    \n\n"Чтобы временно увеличить изображение под пальцем, трижды нажмите на экран и удерживайте его. Проведя пальцем, вы можете посмотреть на другие области экрана. Чтобы вернуть экран в прежнее состояние, уберите палец."\n\n"Примечание. Тройным нажатием увеличиваются все области, кроме клавиатуры и панели навигации."
    + "Эта функция позволяет увеличивать и уменьшать изображение, трижды нажав на экран.\n\nПри увеличенном масштабе можно:\n"
    • "панорамировать – проведите пальцами по экрану;"
    • \n
    • "изменять масштаб – сведите или разведите пальцы."
    \n\n"Чтобы временно увеличить изображение под пальцем, трижды нажмите на экран и удерживайте его. Проведя пальцем, вы можете посмотреть на другие области экрана. Чтобы вернуть экран в прежнее состояние, уберите палец.\n\nПримечание. Тройным нажатием увеличиваются все области, кроме клавиатуры и панели навигации."
    "Быстрое включение" "Вкл." "Выкл." - "Вы сможете быстро включать специальные возможности. Вот как это сделать."\n\n"1. Нажмите кнопку питания и удерживайте ее, пока не раздастся звуковой сигнал или вибросигнал."\n\n"2. Нажмите на экран двумя пальцами и не отпускайте их, пока не услышите сообщение о том, что команда выполнена."\n\n"Если устройством пользуется несколько человек, специальные возможности будут включены до тех пор, пока устройство не будет разблокировано или не будет выбран другой пользователь." + "Вы сможете быстро включать специальные возможности. Вот как это сделать.\n\n1. Нажмите кнопку питания и удерживайте ее, пока не раздастся звуковой сигнал или вибросигнал.\n\n2. Нажмите на экран двумя пальцами и не отпускайте их, пока не услышите сообщение о том, что команда выполнена.\n\nЕсли устройством пользуется несколько человек, специальные возможности будут включены до тех пор, пока устройство не будет разблокировано или не будет выбран другой пользователь." "Крупный текст" "Масштаб" "Сохранять масштаб" @@ -1366,6 +1372,16 @@ "Бесплатное приложение TalkBack дает голосовое описание элементов интерфейса для пользователей с нарушением зрения. Установить его из Android Маркета?" "Нет описания" "Настройки" + "Печать" + "Настройки печати" + "Сервисы" + "Включить %1$s?" + "Сервису \"%1$s\" могут быть переданы документы, содержащие конфиденциальные данные." + "Сервисов нет" + "Настройки" + "Добавить принтеры" + "ВКЛ" + "ВЫКЛ" "Батарея" "На что расходуется заряд батареи" "Расход батареи неизвестен." @@ -1405,8 +1421,10 @@ "Модуль Wi-Fi включен" "Планшетный ПК" "Телефон" - "Отправлено" - "Получено" + "Данные отправлены" + "Данные получены" + "Данные отправлены по сети Wi‑Fi" + "Данные получены по сети Wi‑Fi" "Аудио" "Видео" "Время работы" @@ -1460,6 +1478,7 @@ "Тон" "Влияет на высоту синтезированной речи" "Язык" + "Язык не выбран" "Выбор языка для чтения текста" "Прослушать пример" "Воспроизвести краткую демонстрацию синтезированной речи" @@ -1594,7 +1613,7 @@ "EAP не поддерживается." "Во время установки нельзя настроить подключение к сети Wi-Fi с защитой EAP. Вы можете сделать это позже в меню \"Настройки > Беспроводные сети\"." "Подключение может занять несколько минут..." - "Нажмите ""Далее"", чтобы продолжить настройку."\n\n"Нажмите ""Назад"", чтобы подключиться к другой сети Wi‑Fi." + "Нажмите ""Далее"", чтобы продолжить настройку.\n\nНажмите ""Назад"", чтобы подключиться к другой сети Wi‑Fi." "Синхронизация включена" "Синхронизация отключена" "Ошибка синхронизации." @@ -1676,8 +1695,7 @@ "Подсвечивать области экрана при отрисовке с GPU" "Показ. аппаратные обновл." "Выделять аппаратные уровни зеленым при обновлении" - "Показывать наложения" - "Порядок: синий, зеленый, светло-красный, красный" + "Отладка наложения" "Откл. аппарат. наложения" "Всегда использовать GPU при компоновке экрана" "Вкл. трассировку OpenGL" @@ -1738,11 +1756,11 @@ "Откл. фоновый режим для моб. сетей (использовать другие сети)" "Сначала установите лимит для мобильного трафика." "Ограничение фонового режима" - "Если будут доступны только мобильные сети, программы, зависящие от фонового режима, могут перестать работать."\n\n"Установите другие параметры передачи данных в настройках приложения." + "Если будут доступны только мобильные сети, программы, зависящие от фонового режима, могут перестать работать.\n\nУстановите другие параметры передачи данных в настройках приложения." "Ограничение фонового режима возможно только при лимитировании мобильного трафика." "Включить автосинхронизацию?" - "Все изменения, внесенные в аккаунты на компьютере, будут автоматически скопированы на устройство."\n\n"В некоторых случаях также выполняется обратная синхронизация."\n\n"Чтобы указать для каждого аккаунта, какие данные нужно синхронизировать, перейдите в меню \"Настройки > Аккаунты\"." - "Все изменения, внесенные в аккаунты на компьютере, будут автоматически скопированы на устройство."\n\n"В некоторых случаях также выполняется обратная синхронизация."\n\n"Чтобы указать для каждого аккаунта, какие данные нужно синхронизировать, перейдите в меню \"Настройки > Аккаунты\"." + "Все изменения, внесенные в аккаунты на компьютере, будут автоматически скопированы на устройство.\n\nВ некоторых случаях также выполняется обратная синхронизация.\n\nЧтобы указать для каждого аккаунта, какие данные нужно синхронизировать, перейдите в меню \"Настройки > Аккаунты\"." + "Все изменения, внесенные в аккаунты на компьютере, будут автоматически скопированы на устройство.\n\nВ некоторых случаях также выполняется обратная синхронизация.\n\nЧтобы указать для каждого аккаунта, какие данные нужно синхронизировать, перейдите в меню \"Настройки > Аккаунты\"." "Отключить автосинхронизацию?" "Это сократит трафик и расход энергии. Однако чтобы получать новые данные, необходимо будет синхронизировать каждый аккаунт вручную. При этом уведомления об обновлениях отображаться не будут." "Удаление статистики" @@ -1751,12 +1769,12 @@ "Настройка предупреждения" "Лимитирование трафика" "Объем трафика ограничен" - "По достижении лимита трафика передача данных по мобильной сети будет отключена."\n\n"Во избежание дополнительных расходов старайтесь не достигать этого лимита, так как оператор и ваше устройство могут по-разному учитывать трафик." - "По достижении лимита трафика передача данных по мобильной сети будет отключена."\n\n"Во избежание дополнительных расходов старайтесь не достигать этого лимита, так как оператор и ваше устройство могут по-разному учитывать трафик." + "По достижении лимита трафика передача данных по мобильной сети будет отключена.\n\nВо избежание дополнительных расходов старайтесь не достигать этого лимита, так как оператор и ваше устройство могут по-разному учитывать трафик." + "По достижении лимита трафика передача данных по мобильной сети будет отключена.\n\nВо избежание дополнительных расходов старайтесь не достигать этого лимита, так как оператор и ваше устройство могут по-разному учитывать трафик." "Ограничение фонового режима" "Если ограничить передачу данных в фоновом режиме, некоторые приложения и службы не будут работать без подключения к сети Wi-Fi." - "Если ограничить передачу данных в фоновом режиме, некоторые приложения и службы не будут работать без подключения к сети Wi-Fi."\n\n"Настройки будут изменены для всех пользователей устройства." - "Если ограничить передачу данных в фоновом режиме, некоторые приложения и службы не будут работать без подключения к сети Wi-Fi."\n\n"Настройки будут изменены для всех пользователей устройства." + "Если ограничить передачу данных в фоновом режиме, некоторые приложения и службы не будут работать без подключения к сети Wi-Fi.\n\nНастройки будут изменены для всех пользователей устройства." + "Если ограничить передачу данных в фоновом режиме, некоторые приложения и службы не будут работать без подключения к сети Wi-Fi.\n\nНастройки будут изменены для всех пользователей устройства." "Предупреждение"\n"^1"" ""^2" "Лимит"\n"^1"" ""^2" "Удаленные приложения" @@ -1845,8 +1863,8 @@ "Добавить пользователя" "Профиль с огр. доступом" "Добавить пользователя" - "Если вашим устройством пользуется кто-то ещё, создайте отдельные аккаунты. У каждого будет свое пространство, где можно, например, установить приложения или выбрать обои. Некоторые параметры, такие как настройки сети Wi-Fi, будут общими для всех."\n\n"Каждый новый пользователь должен выполнить настройку."\n\n"Пользователи могут разрешать обновления для любых аккаунтов на устройстве." - "Каждый новый пользователь должен выполнить настройку."\n\n"Пользователи могут разрешать обновления для любых аккаунтов на устройстве." + "Если вашим устройством пользуется кто-то ещё, создайте отдельные аккаунты. У каждого будет свое пространство, где можно, например, установить приложения или выбрать обои. Некоторые параметры, такие как настройки сети Wi-Fi, будут общими для всех.\n\nКаждый новый пользователь должен выполнить настройку.\n\nПользователи могут разрешать обновления для любых аккаунтов на устройстве." + "Каждый новый пользователь должен выполнить настройку.\n\nПользователи могут разрешать обновления для любых аккаунтов на устройстве." "Настроить аккаунт?" "Если у пользователя нет возможности настроить аккаунт прямо сейчас, он сможет сделать это позже." "Настроить профиль?" @@ -1877,6 +1895,9 @@ "Настройки будут изменены для всех пользователей устройства." "Измените язык" "Измените размер шрифта" + "Ограничения" + "Отменить ограничения" + "Изменить PIN-код" "Включить уведомления" "Справка" "Аккаунт для контента" diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml index 6ab5e68171b..41f8e5a2175 100644 --- a/res/values-sk/arrays.xml +++ b/res/values-sk/arrays.xml @@ -233,7 +233,8 @@ "Poloha" "Osobné" "SMS a MMS" - "Zariadenie" + "Médiá" + "Zariadenie"
    "približná poloha" @@ -267,6 +268,17 @@ "prehrávanie zvuku" "načítať schránku" "upraviť schránku" + "mediálne tlačidlá" + "zvukové zameranie" + "hlavná hlasitosť" + "hlasitosť hlasu" + "hlasitosť zvonenia" + "hlasitosť médií" + "hlasitosť budíka" + "hlasitosť upozornení" + "hlasitosť bluetooth" + "zakázať režim spánku" + "sledovať polohu" "Poloha" @@ -300,12 +312,33 @@ "Prehrať zvuk" "Načítať schránku" "Upraviť schránku" + "Tlačidlá médií" + "Zameranie zvuku" + "Hlavná hlasitosť" + "Hlasitosť hlasu" + "Hlasitosť zvonenia" + "Hlasitosť médií" + "Hlasitosť budíka" + "Hlasitosť upozornení" + "Hlasitosť zariadenia Bluetooth" + "Zakázať režim spánku" + "Poloha" "Krátka" "Stredná" "Dlhá" + + "Dalvik" + "ART" + "ART (ladenie)" + + + "Použiť nástroj Dalvik" + "Použiť nástroj ART" + "Použiť zostavu na ladenie programu ART" + "Nikdy nekontrolovať" "Kontrolovať len obsah DRM" @@ -367,6 +400,11 @@ "Na obrazovke v podobe riadkov" "V adb shell dumpsys gfxinfo" + + "Vypnuté" + "Zobraziť oblasti prekreslení" + "Zobraziť počítadlo prekreslení" + "Štandardný limit" "Žiadne procesy na pozadí" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 321c8625016..0de09c44b59 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -275,8 +275,8 @@ "Pripojenie dátových služieb bolo prerušené, pretože ste opustili domovskú sieť a dátové služby pri roamingu máte vypnuté." "Zapnúť" "Ak povolíte dátové služby pri roamingu, môžu sa účtovať vysoké poplatky." - "Ak povolíte dátové služby pri roamingu, môžu sa účtovať vysoké poplatky za roaming!"\n\n"Toto nastavenie ovplyvní všetkých používateľov tohto tabletu." - "Ak povolíte dátové služby pri roamingu, môžu sa účtovať vysoké poplatky za roaming!"\n\n"Toto nastavenie ovplyvní všetkých používateľov tohto telefónu." + "Ak povolíte dátové služby pri roamingu, môžu sa účtovať vysoké poplatky za roaming!\n\nToto nastavenie ovplyvní všetkých používateľov tohto tabletu." + "Ak povolíte dátové služby pri roamingu, môžu sa účtovať vysoké poplatky za roaming!\n\nToto nastavenie ovplyvní všetkých používateľov tohto telefónu." "Povoliť dátové služby pri roamingu?" "Výber operátora" "Zvoliť sieťového operátora" @@ -322,8 +322,8 @@ "Pri každom zapnutí tabletu požadovať číslo PIN alebo heslo na jeho dešifrovanie" "Pri každom zapnutí telefónu požadovať číslo PIN alebo heslo na jeho dešifrovanie" "Šifrované" - "Svoje účty, nastavenia, prevzaté aplikácie a ich údaje môžete šifrovať. Po zašifrovaní tabletu budete musieť pri každom zapnutí zadať číselný kód PIN alebo heslo a dešifrovať ho – toto šifrovanie budete môcť zrušiť iba obnovením továrenských nastavení, čím sa všetky údaje v tablete vymažú."\n\n"Šifrovanie môže trvať aj viac ako hodinu. V tablete musí byť pred šifrovaním nabitá batéria a po celú dobu šifrovania musí byť pripojený k zdroju napájania. Ak šifrovanie prerušíte, stratíte niektoré alebo všetky údaje." - "Svoje účty, nastavenia, prevzaté aplikácie a ich údaje môžete šifrovať. Po zašifrovaní telefónu budete musieť pri každom zapnutí zadať číselný kód PIN alebo heslo a dešifrovať ho – toto šifrovanie budete môcť zrušiť iba obnovením továrenských nastavení, čím sa všetky údaje v telefóne vymažú."\n\n"Šifrovanie môže trvať aj viac ako hodinu. V telefóne musí byť pred šifrovaním nabitá batéria a po celú dobu šifrovania musí byť pripojený k zdroju napájania. Ak šifrovanie prerušíte, stratíte niektoré alebo všetky údaje." + "Svoje účty, nastavenia, prevzaté aplikácie a ich údaje môžete šifrovať. Po zašifrovaní tabletu budete musieť pri každom zapnutí zadať číselný kód PIN alebo heslo a dešifrovať ho – toto šifrovanie budete môcť zrušiť iba obnovením továrenských nastavení, čím sa všetky údaje v tablete vymažú.\n\nŠifrovanie môže trvať aj viac ako hodinu. V tablete musí byť pred šifrovaním nabitá batéria a po celú dobu šifrovania musí byť pripojený k zdroju napájania. Ak šifrovanie prerušíte, stratíte niektoré alebo všetky údaje." + "Svoje účty, nastavenia, prevzaté aplikácie a ich údaje môžete šifrovať. Po zašifrovaní telefónu budete musieť pri každom zapnutí zadať číselný kód PIN alebo heslo a dešifrovať ho – toto šifrovanie budete môcť zrušiť iba obnovením továrenských nastavení, čím sa všetky údaje v telefóne vymažú.\n\nŠifrovanie môže trvať aj viac ako hodinu. V telefóne musí byť pred šifrovaním nabitá batéria a po celú dobu šifrovania musí byť pripojený k zdroju napájania. Ak šifrovanie prerušíte, stratíte niektoré alebo všetky údaje." "Šifrovať tablet" "Šifrovať telefón" "Nabite batériu a skúste to znova." @@ -339,8 +339,8 @@ "Počet sekúnd zostávajúcich do ďalšieho pokusu: ^1." "Zadajte svoje heslo" "Šifrovanie bolo neúspešné" - "Šifrovanie bolo prerušené a nedá sa dokončiť. Výsledkom je, že údaje vo vašom tablete už nie sú k dispozícii. "\n\n"Ak chcete ďalej používať svoj tablet, musíte obnoviť jeho továrenské nastavenia. Po ich obnovení budete mať počas nastavovania tabletu príležitosť obnoviť všetky údaje, ktoré sa zálohovali do vášho účtu Google." - "Šifrovanie bolo prerušené a nedá sa dokončiť. Výsledkom je, že údaje vo vašom telefóne už nie sú k dispozícii. "\n\n"Ak chcete ďalej používať svoj telefón, musíte obnoviť jeho továrenské nastavenia. Po ich obnovení budete mať počas nastavovania telefónu príležitosť obnoviť všetky údaje, ktoré boli zálohované vo vašom účte Google." + "Šifrovanie bolo prerušené a nedá sa dokončiť. Výsledkom je, že údaje vo vašom tablete už nie sú k dispozícii. \n\nAk chcete ďalej používať svoj tablet, musíte obnoviť jeho továrenské nastavenia. Po ich obnovení budete mať počas nastavovania tabletu príležitosť obnoviť všetky údaje, ktoré sa zálohovali do vášho účtu Google." + "Šifrovanie bolo prerušené a nedá sa dokončiť. Výsledkom je, že údaje vo vašom telefóne už nie sú k dispozícii. \n\nAk chcete ďalej používať svoj telefón, musíte obnoviť jeho továrenské nastavenia. Po ich obnovení budete mať počas nastavovania telefónu príležitosť obnoviť všetky údaje, ktoré boli zálohované vo vašom účte Google." "Prepnúť metódu vstupu" "Zvoľte uzamk. obrazov." "Vybrať zámku zálohy" @@ -514,6 +514,7 @@ "Prepája sa" "Pripojené" "K dispozícii" + "Používa sa" "Nastavenia obrazovky" "Odpojiť?" "Táto akcia ukončí vaše pripojenie so zariadením:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Vyp." "Nedostupné, pretože je vypnutá technológia NFC" "Android Beam" - "Ak je táto funkcia zapnutá a podržíte zariadenia blízko pri sebe, môžete odosielať obsah aplikácií do iného zariadenia s technológiou NFC. Napríklad môžete odosielať stránky prehliadača, videá YouTube, osobné kontakty a ďalšie."\n\n"Stačí priložiť zariadenia k sebe (obyčajne zadnými stranami) a potom sa dotknúť obrazovky. Aplikácia určí, aký obsah bude odoslaný." + "Ak je táto funkcia zapnutá a podržíte zariadenia blízko pri sebe, môžete odosielať obsah aplikácií do iného zariadenia s technológiou NFC. Napríklad môžete odosielať stránky prehliadača, videá YouTube, osobné kontakty a ďalšie.\n\nStačí priložiť zariadenia k sebe (obyčajne zadnými stranami) a potom sa dotknúť obrazovky. Aplikácia určí, aký obsah bude odoslaný." "Vyhľadávanie sieťových služieb" "Povoliť aplikáciám v iných zariadeniach hľadať aplikácie v tomto zariadení" "Wi-Fi" @@ -620,7 +621,7 @@ "Zabezpečenie: %1$s" ", zabezpečenie: %1$s" "Žiadne" - "Aplikácia %1$s chce zapnúť vyhľadávanie sietí (z dôvodu dosiahnutia vyššej presnosti určovania polohy aj z iných dôvodov) a hľadať siete aj v prípade, že je vypnutý modul Wi-Fi."\n\n"Chcete túto možnosť povoliť všetkým aplikáciám, ktoré chcú vyhľadávať siete?" + "Aplikácia %1$s chce zapnúť vyhľadávanie sietí (z dôvodu dosiahnutia vyššej presnosti určovania polohy aj z iných dôvodov) a hľadať siete aj v prípade, že je vypnutý modul Wi-Fi.\n\nChcete túto možnosť povoliť všetkým aplikáciám, ktoré chcú vyhľadávať siete?" "Povoliť" "Odmietnuť" "Pripojiť" @@ -632,8 +633,8 @@ "Zrušiť" "Preskočiť aj tak" "Nepreskočiť" - "UPOZORNENIE: Operátor môže účtovať ďalšie poplatky za dáta."\n\n"Nastavenie tabletu môže vyžadovať prenos významného množstva dát." - "UPOZORNENIE: Operátor môže účtovať ďalšie poplatky za dáta."\n\n"Nastavenie telefónu môže vyžadovať prenos významného množstva dát." + "UPOZORNENIE: Operátor môže účtovať ďalšie poplatky za dáta.\n\nNastavenie tabletu môže vyžadovať prenos významného množstva dát." + "UPOZORNENIE: Operátor môže účtovať ďalšie poplatky za dáta.\n\nNastavenie telefónu môže vyžadovať prenos významného množstva dát." "UPOZORNENIE: Tablet nebude môcť overiť aktuálnosť vášho softvéru, až kým nebudete mať pripojenie k internetu." "UPOZORNENIE: Telefón nebude môcť overiť aktuálnosť vášho softvéru, až kým nebudete mať pripojenie k internetu." "Tablet sa k tejto sieti Wi-Fi nedokázal pripojiť." @@ -773,9 +774,9 @@ "Kód PIN karty SIM" "Nesprávny kód PIN" "Kódy PIN sa nezhodujú" - "Kód PIN nie je možné zmeniť."\n"Kód PIN je zrejme nesprávny." + "Kód PIN nie je možné zmeniť.\nKód PIN je zrejme nesprávny." "Kód PIN karty SIM bol zmenený." - "Stav zámku karty SIM nie je možné zmeniť."\n"Zrejme ste zadali nesprávny kód PIN." + "Stav zámku karty SIM nie je možné zmeniť.\nZrejme ste zadali nesprávny kód PIN." "OK" "Zrušiť" "Stav tabletu" @@ -918,9 +919,9 @@ "Obnovenie továrenských nastavení" "Vymaže všetky údaje v tablete" "Vymaže všetky údaje v telefóne" - "Táto operácia vymaže všetky údaje v ""internom úložisku"" tabletu, vrátane:"\n\n
  • "účtu Google,"
  • \n
  • "údajov a nastavení systému a aplikácií,"
  • \n
  • "prevzatých aplikácií"
  • - "Táto operácia vymaže všetky údaje v ""internom úložisku"" telefónu, vrátane:"\n\n
  • "účtu Google,"
  • \n
  • "údajov a nastavení systému a aplikácií,"
  • \n
  • "prevzatých aplikácií"
  • - \n\n"Aktuálne ste prihlásení do nasledujúcich účtov:"\n + "Táto operácia vymaže všetky údaje v ""internom úložisku"" tabletu, vrátane:\n\n"
  • "účtu Google,"
  • \n
  • "údajov a nastavení systému a aplikácií,"
  • \n
  • "prevzatých aplikácií"
  • + "Táto operácia vymaže všetky údaje v ""internom úložisku"" telefónu, vrátane:\n\n"
  • "účtu Google,"
  • \n
  • "údajov a nastavení systému a aplikácií,"
  • \n
  • "prevzatých aplikácií"
  • + \n\n"Aktuálne ste prihlásení do nasledujúcich účtov:\n"
  • "Hudba"
  • \n
  • "Fotografie"
  • \n
  • "Iné používateľské údaje"
  • \n\n"Ak chcete vymazať hudbu, obrázky a ďalšie používateľské údaje, musíte vymazať ""úložisko USB""." \n\n"Ak chcete vymazať hudbu, obrázky a ďalšie používateľské údaje, musíte vymazať ""kartu SD""." @@ -1105,7 +1106,7 @@ "Procesy vo vyrov. pamäti" "Obnoviť predvoľby aplik." "Obnoviť predvoľby aplik.?" - "Touto akciou obnovíte všetky predvoľby pre:"\n\n" "
  • "zakázané aplikácie,"
  • \n" "
  • "zakázané upozornenia aplikácií,"
  • \n" "
  • "predvolené aplikácie na vykonávanie akcií,"
  • \n" "
  • "obmedzenia údajov na pozadí pre aplikácie."
  • \n\n" O žiadne údaje aplikácií neprídete."
    + "Touto akciou obnovíte všetky predvoľby pre:\n\n "
  • "zakázané aplikácie,"
  • \n" "
  • "zakázané upozornenia aplikácií,"
  • \n" "
  • "predvolené aplikácie na vykonávanie akcií,"
  • \n" "
  • "obmedzenia údajov na pozadí pre aplikácie."
  • \n\n" O žiadne údaje aplikácií neprídete."
    "Obnoviť aplikácie" "Správa pamäte" "Filtrovať" @@ -1240,9 +1241,7 @@ "Prepnite klávesmi ctrl-space" "Predvolené" "Rozloženia klávesnice" - "Používateľský slovník" - "Osobný slovník" - "Osobné slovníky" + "Osobný slovník" "Pridať" "Pridať do slovníka" @@ -1303,6 +1302,11 @@ "V hlavnej ponuke zahrnúť možnosť na vytvorenie správy o chybe" "Nezamykať obrazovku" "Obrazovka sa pri nabíjaní neprepne do režimu spánku" + "Povoliť sledovací protokol Bluetooth HCI" + "Zaznamenať všetky pakety Bluetooth HCI do súboru" + "Výber času spustenia" + "Výber času spustenia" + "Chcete vykonať reštart a zmeniť čas spustenia z %1$s na %2$s?" "Povoliť simulované polohy" "Povoliť simulované polohy" "Povoliť ladenie USB?" @@ -1315,11 +1319,13 @@ "Chrániť úložisko USB" "Aplikácie musia pred čítaním z úložiska USB žiadať povolenie" "Chrániť úložisko USB?" - "Keď je úložisko USB chránené, aplikácie musia pred čítaním údajov z externého úložiska požiadať o povolenie."\n\n"Pri niektorých aplikáciách platí, že budú fungovať až vtedy, keď ich vývojári aktualizujú." + "Keď je úložisko USB chránené, aplikácie musia pred čítaním údajov z externého úložiska požiadať o povolenie.\n\nPri niektorých aplikáciách platí, že budú fungovať až vtedy, keď ich vývojári aktualizujú." "Chrániť kartu SD" "Aplikácie musia pred čítaním z karty SD vyžiadať povolenie" "Chrániť kartu SD?" - "Keď je karta SD chránená, aplikácie musia pred čítaním údajov z externého úložiska požiadať o povolenie."\n\n"Pri niektorých aplikáciách platí, že budú fungovať až vtedy, keď ich vývojári aktualizujú." + "Keď je karta SD chránená, aplikácie musia pred čítaním údajov z externého úložiska požiadať o povolenie.\n\nPri niektorých aplikáciách platí, že budú fungovať až vtedy, keď ich vývojári aktualizujú." + "Miestny terminál" + "Povoliť terminálovú apl. na miestny prístup k prostrediu shell" "Vyberte modul gadget" "Vyberte miniaplikáciu" "Vytvoriť miniaplikáciu a povoliť prístup?" @@ -1340,11 +1346,11 @@ "Služby" "Systém" "Gestá priblíženia" - "Keď je táto funkcia zapnutá, môžete približovať alebo odďalovať trojitým klepnutím na obrazovku."\n\n"Počas priblíženia môžete:"\n
    • "Posúvať: Ťahajte dvoma alebo viacerými prstami po obrazovke."
    • \n
    • "Prispôsobiť úroveň priblíženia: Priblížte dva alebo viacero prstov k sebe alebo ich od seba odtiahnite."
    \n\n"Obsah pod prstom môžete tiež dočasne priblížiť trojitým klepnutím a podržaním. V stave priblíženia môžete posúvaním prsta preskúmavať rôzne časti obrazovky. Odtiahnutím prsta sa vrátite do predchádzajúceho stavu."\n\n"Poznámka: Priblíženie trojitým klepnutím funguje všade okrem klávesnice a navigačného panela."
    + "Keď je táto funkcia zapnutá, môžete približovať alebo odďalovať trojitým klepnutím na obrazovku.\n\nPočas priblíženia môžete:\n"
    • "Posúvať: Ťahajte dvoma alebo viacerými prstami po obrazovke."
    • \n
    • "Prispôsobiť úroveň priblíženia: Priblížte dva alebo viacero prstov k sebe alebo ich od seba odtiahnite."
    \n\n"Obsah pod prstom môžete tiež dočasne priblížiť trojitým klepnutím a podržaním. V stave priblíženia môžete posúvaním prsta preskúmavať rôzne časti obrazovky. Odtiahnutím prsta sa vrátite do predchádzajúceho stavu.\n\nPoznámka: Priblíženie trojitým klepnutím funguje všade okrem klávesnice a navigačného panela."
    "Skratka zjednodušeného ovládania" "Zapnuté" "Vypnuté" - "Ak je táto funkcia zapnutá, môžete rýchlo v dvoch krokoch povoliť funkcie zjednodušenia ovládania:"\n\n"Krok 1: Stlačte tlačidlo zapnutia a podržte ho, dokým nezaznie zvukový signál alebo nezacítite vibrácie."\n\n"Krok 2: Dotknite sa obrazovky dvoma prstami a podržte ju, dokým nezaznie zvuk potvrdenia."\n\n"Ak má zariadenie viacero používateľov, pomocou tejto skratky je možné na uzamknutej obrazovke dočasne povoliť zjednodušenie ovládania, dokým sa zariadenie neodomkne." + "Ak je táto funkcia zapnutá, môžete rýchlo v dvoch krokoch povoliť funkcie zjednodušenia ovládania:\n\nKrok 1: Stlačte tlačidlo zapnutia a podržte ho, dokým nezaznie zvukový signál alebo nezacítite vibrácie.\n\nKrok 2: Dotknite sa obrazovky dvoma prstami a podržte ju, dokým nezaznie zvuk potvrdenia.\n\nAk má zariadenie viacero používateľov, pomocou tejto skratky je možné na uzamknutej obrazovke dočasne povoliť zjednodušenie ovládania, dokým sa zariadenie neodomkne." "Veľké písmo" "Priblíženie obrazovky" "Auto. aktualiz. priblíž. obrazovky" @@ -1366,6 +1372,16 @@ "Aplikácia Talkback poskytuje hovorenú odozvu na pomoc nevidomým a slabozrakým používateľom. Chcete si túto aplikáciu bezplatne nainštalovať zo služby Android Market?" "K dispozícii nie je žiadny popis." "Nastavenia" + "Tlač" + "Nastavenia tlače" + "Služby" + "Použiť službu %1$s?" + "Služba %1$s môže prijímať dokumenty, ktoré tlačíte. Tieto dokumenty môžu obsahovať citlivé údaje." + "Nie sú nainštalované žiadne služby" + "Nastavenia" + "Pridať tlačiarne" + "Zapnuté" + "Vypnuté" "Batéria" "Čo využíva batériu" "Údaje o spotrebe nie sú k dispozícii." @@ -1405,8 +1421,10 @@ "Pripojenie Wi-Fi aktívne" "Tablet" "Telefón" - "Odoslané údaje" - "Prijaté údaje" + "Odoslané mobilné dáta" + "Prijaté mobilné dáta" + "Dáta odoslané cez Wi-Fi" + "Dáta prijaté cez Wi-Fi" "Zvuk" "Video" "Doba zapnutia" @@ -1460,6 +1478,7 @@ "Výška" "Určuje zvuk hovoreného textu" "Jazyk" + "Nebol vybratý jazyk" "Nastavenia jazyka hlasu pre hovorený text" "Vypočuť príklad" "Prehrať krátku ukážku syntézy reči" @@ -1594,7 +1613,7 @@ "Protokol EAP nie je podporovaný." "Počas inštalácie nie je možné konfigurovať pripojenie k sieti Wi-Fi cez protokol EAP. Po inštalácii to môžete vykonať v sekcii Nastavenia > Bezdrôtové pripojenie a siete." "Pripájanie môže trvať niekoľko minút..." - "Ak chcete pokračovať v nastavovaní, dotknite sa možnosti ""Ďalej""."\n\n"Ak sa chcete pripojiť k inej sieti Wi-Fi, dotknite sa možnosti ""Späť""." + "Ak chcete pokračovať v nastavovaní, dotknite sa možnosti ""Ďalej"".\n\nAk sa chcete pripojiť k inej sieti Wi-Fi, dotknite sa možnosti ""Späť""." "Synchronizácia je povolená" "Synchronizácia bola zakázaná" "Chyba synchronizácie" @@ -1622,7 +1641,7 @@ "Gmail" "Kalendár" "Kontakty" - "Víta vás služba Google Sync"" "\n"Spoločnosť Google pomocou nej synchronizuje údaje a umožňuje vám tak pristupovať ku kontaktom, stretnutiam a ďalším informáciám, nech ste kdekoľvek." + "Víta vás služba Google Sync"" \nSpoločnosť Google pomocou nej synchronizuje údaje a umožňuje vám tak pristupovať ku kontaktom, stretnutiam a ďalším informáciám, nech ste kdekoľvek." "Nastavenia synchronizácie aplikácie" "Údaje a synchronizácia" "Zmeniť heslo" @@ -1676,8 +1695,7 @@ "Zobrazenia v oknách vykresľované s GPU blikajú" "Zobr. aktual. hardv. vrs." "Hard. vrstvy pri aktualizácii blikajú na zeleno" - "Zobraziť prekreslenie GPU" - "Od najlepš. k najhorš.: modr., zel., sv. červ., červ." + "Ladenie prekresľovania GPU" "Zakázať hardvér. prekrytia" "Vždy používať jednotku GPU na skladanie obrazovky" "Povoliť trasovanie OpenGL" @@ -1738,11 +1756,11 @@ "Zakázať údaje na pozadí v mob. sieťach. Použiť iné ako mob. siete, ak sú k disp." "Nastav. dát. limitu mob. siete obmedzíte údaje na poz. pre apl." "Obmedziť údaje na pozadí?" - "Ak budú k dispozícii len mobilné siete, môže táto funkcia spôsobiť, že aplikácie, ktoré údaje na pozadí vyžadujú, nebudú fungovať."\n\n"Vhodnejšie spôsoby ovládania využívania údajov nájdete v nastaveniach aplikácie." + "Ak budú k dispozícii len mobilné siete, môže táto funkcia spôsobiť, že aplikácie, ktoré údaje na pozadí vyžadujú, nebudú fungovať.\n\nVhodnejšie spôsoby ovládania využívania údajov nájdete v nastaveniach aplikácie." "Obmedzenie údajov na pozadí je možné len v prípade, že ste nastavili dátový limit pre mobilnú sieť." "Zapnúť automat. synchr. údajov?" - "Všetky zmeny vykonané v rámci vašich účtov na webe sa automaticky skopírujú do vášho tabletu."\n\n"Niektoré účty môžu tiež automaticky skopírovať na web akékoľvek zmeny vykonané v tablete. Týmto spôsobom funguje aj účet Google."\n\n"Typy informácií, ktoré sa budú v jednotlivých účtoch synchronizovať, môžete nastaviť v sekcii Nastavenia > Účty." - "Všetky zmeny vykonané v rámci vašich účtov na webe sa automaticky skopírujú do vášho telefónu."\n\n"Niektoré účty môžu tiež automaticky skopírovať na web akékoľvek zmeny vykonané v telefóne. Týmto spôsobom funguje aj účet Google."\n\n"Typy informácií, ktoré sa budú v jednotlivých účtoch synchronizovať, môžete nastaviť v sekcii Nastavenia > Účty." + "Všetky zmeny vykonané v rámci vašich účtov na webe sa automaticky skopírujú do vášho tabletu.\n\nNiektoré účty môžu tiež automaticky skopírovať na web akékoľvek zmeny vykonané v tablete. Týmto spôsobom funguje aj účet Google.\n\nTypy informácií, ktoré sa budú v jednotlivých účtoch synchronizovať, môžete nastaviť v sekcii Nastavenia > Účty." + "Všetky zmeny vykonané v rámci vašich účtov na webe sa automaticky skopírujú do vášho telefónu.\n\nNiektoré účty môžu tiež automaticky skopírovať na web akékoľvek zmeny vykonané v telefóne. Týmto spôsobom funguje aj účet Google.\n\nTypy informácií, ktoré sa budú v jednotlivých účtoch synchronizovať, môžete nastaviť v sekcii Nastavenia > Účty." "Vypnúť automat. synchr. údajov?" "Toto nastavenie šetrí spotrebu dát a batérie. Na získanie najnovších informácií však budete musieť každý účet synchronizovať ručne. Nebudete tiež dostávať upozornenia na dostupné aktualizácie." "Dátum obnovenia cyklu sledovania prenesených dát" @@ -1751,12 +1769,12 @@ "Nastaviť upozornenie o využívaní údajov" "Nastaviť limit využívania údajov" "Nastavuje sa obmedzenie dátových prenosov" - "Po dosiahnutí stanoveného limitu bude vaše mobilné dátové pripojenie zakázané."\n\n"Keďže sa využitie dát meria pomocou vášho tabletu a operátor môže využitie dát účtovať inak, zvážte nastavenie nižšieho limitu." - "Po dosiahnutí stanoveného limitu bude vaše mobilné dátové pripojenie zakázané."\n\n"Keďže sa využitie dát meria pomocou vášho telefónu a operátor môže využitie dát účtovať inak, zvážte nastavenie nižšieho limitu." + "Po dosiahnutí stanoveného limitu bude vaše mobilné dátové pripojenie zakázané.\n\nKeďže sa využitie dát meria pomocou vášho tabletu a operátor môže využitie dát účtovať inak, zvážte nastavenie nižšieho limitu." + "Po dosiahnutí stanoveného limitu bude vaše mobilné dátové pripojenie zakázané.\n\nKeďže sa využitie dát meria pomocou vášho telefónu a operátor môže využitie dát účtovať inak, zvážte nastavenie nižšieho limitu." "Obmedziť údaje na pozadí?" "Ak obmedzíte mobilné dáta na pozadí, niektoré aplikácie a služby nebudú fungovať, dokým sa nepripojíte k sieti Wi-Fi." - "Ak obmedzíte mobilné dáta na pozadí, niektoré aplikácie a služby nebudú fungovať, dokým sa nepripojíte k sieti Wi-Fi."\n\n"Toto nastavenie ovplyvní všetkých používateľov tohto tabletu." - "Ak obmedzíte mobilné dáta na pozadí, niektoré aplikácie a služby nebudú fungovať, dokým sa nepripojíte k sieti Wi-Fi."\n\n"Toto nastavenie ovplyvní všetkých používateľov tohto telefónu." + "Ak obmedzíte mobilné dáta na pozadí, niektoré aplikácie a služby nebudú fungovať, dokým sa nepripojíte k sieti Wi-Fi.\n\nToto nastavenie ovplyvní všetkých používateľov tohto tabletu." + "Ak obmedzíte mobilné dáta na pozadí, niektoré aplikácie a služby nebudú fungovať, dokým sa nepripojíte k sieti Wi-Fi.\n\nToto nastavenie ovplyvní všetkých používateľov tohto telefónu." "^1"" ""^2"\n"upozornenie" "limit:"\n"^1"" ""^2" "Odstránené aplikácie" @@ -1843,8 +1861,8 @@ "Používateľ" "Obmedzený profil" "Pridať nového používateľa" - "Toto zariadenie môžete zdieľať aj s inými ľuďmi. Stačí vytvoriť ďalších používateľov. Každý používateľ má svoj vlastný priestor, ktorý si môže prispôsobiť pomocou aplikácií, tapety a pod. Používatelia si môžu prispôsobiť aj nastavenia tabletu, ktoré majú vplyv na ostatných (napr. nastavenia siete Wi-Fi)."\n\n"Keď vytvoríte nového používateľa, táto osoba musí prejsť procesom nastavenia."\n\n"Každý používateľ môže akceptovať aktualizované povolenia aplikácií v mene všetkých ostatných používateľov." - "Keď vytvoríte nového používateľa, táto osoba musí prejsť procesom nastavenia."\n\n"Ktorýkoľvek používateľ môže akceptovať aktualizované povolenia aplikácií v mene všetkých ostatných používateľov." + "Toto zariadenie môžete zdieľať aj s inými ľuďmi. Stačí vytvoriť ďalších používateľov. Každý používateľ má svoj vlastný priestor, ktorý si môže prispôsobiť pomocou aplikácií, tapety a pod. Používatelia si môžu prispôsobiť aj nastavenia tabletu, ktoré majú vplyv na ostatných (napr. nastavenia siete Wi-Fi).\n\nKeď vytvoríte nového používateľa, táto osoba musí prejsť procesom nastavenia.\n\nKaždý používateľ môže akceptovať aktualizované povolenia aplikácií v mene všetkých ostatných používateľov." + "Keď vytvoríte nového používateľa, táto osoba musí prejsť procesom nastavenia.\n\nKtorýkoľvek používateľ môže akceptovať aktualizované povolenia aplikácií v mene všetkých ostatných používateľov." "Chcete teraz nastaviť používateľa?" "Uistite sa, že je príslušná osoba k dispozícii, aby mohla na tablete nastaviť svoj priestor" "Nastaviť profil?" @@ -1875,6 +1893,9 @@ "Toto nastavenie ovplyvní všetkých používateľov tohto telefónu." "Zmeniť jazyk" "Zmeniť veľkosť písma" + "Obmedzenia" + "Odstrániť obmedzenia" + "Zmeniť kód PIN" "Zobraziť upozornenia" "Pomocník" "Účet pre obsah" diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml index d31eb740573..5e4c4977d50 100644 --- a/res/values-sl/arrays.xml +++ b/res/values-sl/arrays.xml @@ -233,7 +233,8 @@ "Lokacija" "Osebno" "Sporočila" - "Naprava" + "Predstavnosti" + "Naprava"
    "groba lokacija" @@ -267,6 +268,17 @@ "predvajanje zvoka" "preberi odložišče" "spremeni odložišče" + "gumbi za predstavnosti" + "fokus zvoka" + "glavna glasnost" + "glasnost glasu" + "glasnost zvonjenja" + "glasnost predstavnosti" + "glasnost alarma" + "glasnost obvestila" + "glasnost za Bluetooth" + "ohrani odklenjen zaslon" + "spremljanje lokacije" "Lokacija" @@ -300,12 +312,33 @@ "Predvajanje zvoka" "Preberi odložišče" "Spremeni odložišče" + "Gumbi za predstavnosti" + "Osredotočenost zvoka" + "Glavna glasnost" + "Glasnost glasu" + "Glasnost zvonjenja" + "Glasnost predstavnosti" + "Glasnost alarma" + "Glasnost obvestila" + "Glasnost Bluetootha" + "Ohrani odklenjen zaslon" + "Lokacija" "Kratko" "Srednja" "Dolgo" + + "Dalvik" + "ART" + "ART (iskanje napak)" + + + "Uporabi Dalvik" + "Uporabi ART" + "Uporabi različico za iskanje napak ART" + "Nikoli ne preveri" "Preveri samo glede vsebine DRM" @@ -367,6 +400,11 @@ "Na zaslonu kot črte" "V gfxinfo dumpsys lupine adb" + + "Izklop" + "Risanje zunaj vidnega območja" + "Števec risanja zunaj vidn. območja" + "Standardna omejitev" "Ni postopkov v ozadju" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index c34d0dd9476..d3c1bde7a76 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -275,8 +275,8 @@ "Podatkovna povezava ni mogoča, ker ste zapustili domače omrežje, podatkovno gostovanje pa je izklopljeno." "Vklopi" "Če dovolite podatkovno gostovanje, so lahko stroški gostovanja visoki." - "Če omogočite podatkovno gostovanje, si lahko naprtite velike stroške!"\n\n"Nastavitev vpliva na vse uporabnike v tem tabličnem računalniku." - "Če omogočite podatkovno gostovanje, si lahko naprtite velike stroške!"\n\n"Nastavitev vpliva na vse uporabnike v tem telefonu." + "Če omogočite podatkovno gostovanje, si lahko naprtite velike stroške!\n\nNastavitev vpliva na vse uporabnike v tem tabličnem računalniku." + "Če omogočite podatkovno gostovanje, si lahko naprtite velike stroške!\n\nNastavitev vpliva na vse uporabnike v tem telefonu." "Želite dovoliti podatkovno gostovanje?" "Izbira operaterja" "Izbira omrežnega operaterja" @@ -322,8 +322,8 @@ "Zahteva kodo PIN ali geslo, s katerim boste ob vsakem vklopu dešifrirali tablični računalnik" "Zahteva kodo PIN ali geslo, s katerim boste ob vsakem vklopu dešifrirali telefon" "Šifrirano" - "Šifrirate lahko račune, nastavitve, prenesene programe in njihove podatkovne, predstavnostne in druge datoteke. Če šifrirate tablični računalnik, ga morate ob vsakem vklopu dešifrirati z vpisom številske kode PIN ali gesla, sicer ga lahko dešifrirate samo tako, da ga ponastavite na tovarniške nastavitve, pri čemer izbrišete vse podatke."\n\n"Šifriranje traja uro ali več. Začeti morate z napolnjeno baterijo, računalnik pa mora biti do konca postopka priključen v električno omrežje. Če postopek prekinete, boste izgubili nekatere ali vse podatke." - "Šifrirate lahko račune, nastavitve, prenesene programe in njihove podatkovne, predstavnostne in druge datoteke. Če šifrirate telefon, ga morate ob vsakem vklopu dešifrirati z vpisom številske kode PIN ali gesla, sicer ga lahko dešifrirate samo tako, da ga ponastavite na tovarniške nastavitve, pri čemer izbrišete vse podatke."\n\n"Šifriranje traja uro ali več. Začeti morate z napolnjeno baterijo, telefon pa mora biti do konca postopka priključen v električno omrežje. Če postopek prekinete, boste izgubili nekatere ali vse podatke." + "Šifrirate lahko račune, nastavitve, prenesene programe in njihove podatkovne, predstavnostne in druge datoteke. Če šifrirate tablični računalnik, ga morate ob vsakem vklopu dešifrirati z vpisom številske kode PIN ali gesla, sicer ga lahko dešifrirate samo tako, da ga ponastavite na tovarniške nastavitve, pri čemer izbrišete vse podatke.\n\nŠifriranje traja uro ali več. Začeti morate z napolnjeno baterijo, računalnik pa mora biti do konca postopka priključen v električno omrežje. Če postopek prekinete, boste izgubili nekatere ali vse podatke." + "Šifrirate lahko račune, nastavitve, prenesene programe in njihove podatkovne, predstavnostne in druge datoteke. Če šifrirate telefon, ga morate ob vsakem vklopu dešifrirati z vpisom številske kode PIN ali gesla, sicer ga lahko dešifrirate samo tako, da ga ponastavite na tovarniške nastavitve, pri čemer izbrišete vse podatke.\n\nŠifriranje traja uro ali več. Začeti morate z napolnjeno baterijo, telefon pa mora biti do konca postopka priključen v električno omrežje. Če postopek prekinete, boste izgubili nekatere ali vse podatke." "Šifriraj tablični računalnik" "Šifriraj telefon" "Napolnite baterijo in poskusite znova." @@ -339,8 +339,8 @@ "Poskusite znova čez ^1 sekund." "Vnesite geslo" "Šifriranje ni uspelo" - "Šifriranje je bilo prekinjeno in ga ni mogoče končati, zato podatki v tabličnem računalniku niso več dostopni. "\n\n"Če želite tablični računalnik spet uporabljati, ga morate ponastaviti na tovarniške nastavitve. Ko ga po ponastavitvi spet nastavite, boste lahko obnovili vse podatke, ki so bili varnostno kopirani v Google Račun." - "Šifriranje je bilo prekinjeno in ga ni mogoče končati, zato podatki v telefonu niso več dostopni. "\n\n"Če želite telefon ponovno uporabljati, ga morate ponastaviti na tovarniške nastavitve. Ko ga po ponastavitvi ponovno nastavite, boste lahko obnovili vse podatke, ki so bili varnostno kopirani v Google Račun." + "Šifriranje je bilo prekinjeno in ga ni mogoče končati, zato podatki v tabličnem računalniku niso več dostopni. \n\nČe želite tablični računalnik spet uporabljati, ga morate ponastaviti na tovarniške nastavitve. Ko ga po ponastavitvi spet nastavite, boste lahko obnovili vse podatke, ki so bili varnostno kopirani v Google Račun." + "Šifriranje je bilo prekinjeno in ga ni mogoče končati, zato podatki v telefonu niso več dostopni. \n\nČe želite telefon ponovno uporabljati, ga morate ponastaviti na tovarniške nastavitve. Ko ga po ponastavitvi ponovno nastavite, boste lahko obnovili vse podatke, ki so bili varnostno kopirani v Google Račun." "Preklopite način vnosa" "Izberite zakl. zaslona" "Izberite varnostno zaklepanje" @@ -514,6 +514,7 @@ "Povezovanje" "Povezane" "Na voljo" + "V uporabi" "Nastavitve naprave" "Želite prekiniti povezavo?" "S tem bo prekinjena povezava z napravo:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Izklopljeno" "Ni na voljo, ker je NFC izklopljen" "Android Beam" - "Če je ta funkcija vklopljena, lahko vsebino iz programa prenesete v drugo napravo, ki podpira NFC, tako da napravi približate. Prenesete lahko na primer strani brskalnika, videoposnetke v YouTubu, stike iz programa Ljudje in drugo."\n\n"Približajte napravi (običajno s hrbtno stranjo) in se dotaknite zaslona. Kaj se prenese, je odvisno od programa." + "Če je ta funkcija vklopljena, lahko vsebino iz programa prenesete v drugo napravo, ki podpira NFC, tako da napravi približate. Prenesete lahko na primer strani brskalnika, videoposnetke v YouTubu, stike iz programa Ljudje in drugo.\n\nPribližajte napravi (običajno s hrbtno stranjo) in se dotaknite zaslona. Kaj se prenese, je odvisno od programa." "Odkrivanje omrežnih storitev" "Dovoli, da aplikacije v drugih napravah odkrivajo aplikacije v tej napravi" "Wi‑Fi" @@ -620,7 +621,7 @@ "Zaščiteno z %1$s" ", zaščiteno z %1$s" "Brez" - "Za izboljšanje natančnosti lokacijskih podatkov in druge namene želi %1$s vklopiti iskanje omrežij, tudi ko je Wi-Fi izklopljen."\n\n"Želite to dovoliti vsem aplikacijam, ki želijo iskati omrežja?" + "Za izboljšanje natančnosti lokacijskih podatkov in druge namene želi %1$s vklopiti iskanje omrežij, tudi ko je Wi-Fi izklopljen.\n\nŽelite to dovoliti vsem aplikacijam, ki želijo iskati omrežja?" "Dovoli" "Zavrni" "Vzpostavi povezavo" @@ -632,8 +633,8 @@ "Prekliči" "Kljub temu preskoči" "Ne preskoči" - "OPOZORILO: Operater vam lahko zaračuna dodatne stroške."\n\n"Nastavitev tabličnega računalnika lahko zahteva znatno omrežno dejavnost." - "OPOZORILO: Operater vam lahko zaračuna dodatne stroške."\n\n"Nastavitev telefona lahko zahteva znatno omrežno dejavnost." + "OPOZORILO: Operater vam lahko zaračuna dodatne stroške.\n\nNastavitev tabličnega računalnika lahko zahteva znatno omrežno dejavnost." + "OPOZORILO: Operater vam lahko zaračuna dodatne stroške.\n\nNastavitev telefona lahko zahteva znatno omrežno dejavnost." "OPOZORILO: Dokler nimate internetne povezave, tablični računalnik ne more preveriti, ali je programska oprema posodobljena." "OPOZORILO: Dokler nimate internetne povezave, telefon ne more preveriti, ali je programska oprema posodobljena." "Tablični računalnik se ni mogel povezati v to omrežje Wi-Fi." @@ -773,9 +774,9 @@ "Koda PIN za kartico SIM" "Napačen PIN" "Kodi PIN se ne ujemata" - "Kode PIN ni mogoče spremeniti."\n"Koda PIN je morda napačna." + "Kode PIN ni mogoče spremeniti.\nKoda PIN je morda napačna." "Sprememba kode PIN za kartico SIM je uspela" - "Zaklepanja kartice SIM ni mogoče spremeniti."\n"Morda je koda PIN napačna." + "Zaklepanja kartice SIM ni mogoče spremeniti.\nMorda je koda PIN napačna." "V redu" "Prekliči" "Stanje tabličnega računalnika" @@ -918,9 +919,9 @@ "Ponastavitev na tovarniške nastavitve" "Izbriše vse podatke na tabličnem računalniku" "Izbriše vse podatke iz telefona" - "S tem boste iz ""notranjega pomnilnika"" tabličnega računalnika izbrisali vse podatke:"\n\n
  • "Google Račun"
  • \n
  • "Podatke in nastavitve sistema in programov"
  • \n
  • "Prenesene programe"
  • - "S tem boste iz ""notranjega pomnilnika"" telefona izbrisali vse podatke:"\n\n
  • "Google Račun"
  • \n
  • "Podatke in nastavitve sistema in programov"
  • \n
  • "Prenesene programe"
  • - \n\n"Trenutno ste prijavljeni v te račune:"\n + "S tem boste iz ""notranjega pomnilnika"" tabličnega računalnika izbrisali vse podatke:\n\n"
  • "Google Račun"
  • \n
  • "Podatke in nastavitve sistema in programov"
  • \n
  • "Prenesene programe"
  • + "S tem boste iz ""notranjega pomnilnika"" telefona izbrisali vse podatke:\n\n"
  • "Google Račun"
  • \n
  • "Podatke in nastavitve sistema in programov"
  • \n
  • "Prenesene programe"
  • + \n\n"Trenutno ste prijavljeni v te račune:\n"
  • "Glasba"
  • \n
  • "Fotografije"
  • \n
  • "Drugi uporabniški podatki"
  • \n\n"Če želite izbrisati glasbo, slike in druge uporabniške podatke, morate izbrisati ""pomnilnik USB""." \n\n"Če želite izbrisati glasbo, slike in druge uporabniške podatke, morate izbrisati ""kartico SD""." @@ -1105,7 +1106,7 @@ "Pokaži predpom. procese" "Ponast. nast. aplikacije" "Ponastavitev nastavitev?" - "Ponastavili boste vse nastavitve za:"\n\n" "
  • "Onemogočene aplikacije"
  • \n" "
  • "Obvestila o onemogočenih aplikacijah"
  • \n" "
  • "Privzete aplikacije za dejanja"
  • \n" "
  • "Omejitve podatkov v ozadju za aplikacije"
  • \n\n" Podatkov aplikacij ne boste izgubili."
    + "Ponastavili boste vse nastavitve za:\n\n "
  • "Onemogočene aplikacije"
  • \n" "
  • "Obvestila o onemogočenih aplikacijah"
  • \n" "
  • "Privzete aplikacije za dejanja"
  • \n" "
  • "Omejitve podatkov v ozadju za aplikacije"
  • \n\n" Podatkov aplikacij ne boste izgubili."
    "Ponastavitev aplikacij" "Upravljaj prostor" "Filtriraj" @@ -1240,9 +1241,7 @@ "Preklopite s Ctrl + preslednica" "Privzeto" "Razporeditve tipkovnice" - "Uporabniški slovar" - "Osebni slovar" - "Osebni slovarji" + "Osebni slovar" "Dodaj" "Dodaj v slovar" @@ -1303,6 +1302,11 @@ "Vključitev možnosti za poročila o napakah v meniju z možnostmi izklop/vklop" "Brez zaklepanja" "Med polnjenjem se zaslon ne bo nikoli zaklenil" + "Omogoči dnevnik vohljanja Bluetooth HCI" + "Zajemi vse pakete Bluetooth HCI v datoteko" + "Izbira izvajalnika" + "Izbira izvajalnika" + "Želite napravo znova zagnati, da se različica izvajalnika spremeni z %1$s na %2$s?" "Dovoli lažne lokacije" "Dovoli lažne lokacije" "Ali dovolite odpravljanje težav s povezavo USB?" @@ -1315,11 +1319,13 @@ "Zaščiti shrambo USB" "Aplikacije morajo zahtevati dovoljenje za branje shrambe USB" "Želite zaščititi shrambo USB?" - "Če je shramba USB zaščitena, morajo aplikacije zahtevati dovoljenje za branje podatkov iz zunanje shrambe."\n\n"Nekatere aplikacije morda ne bodo delovale, dokler jih njihovi razvijalci ne posodobijo." + "Če je shramba USB zaščitena, morajo aplikacije zahtevati dovoljenje za branje podatkov iz zunanje shrambe.\n\nNekatere aplikacije morda ne bodo delovale, dokler jih njihovi razvijalci ne posodobijo." "Zaščiti kartico SD" "Aplikacije morajo zahtevati dovoljenje za branje kartice SD" "Želite zaščititi kartico SD?" - "Če je kartica SD zaščitena, morajo aplikacije zahtevati dovoljenje za branje podatkov iz zunanje shrambe."\n\n"Nekatere aplikacije morda ne bodo delovale, dokler jih njihovi razvijalci ne posodobijo." + "Če je kartica SD zaščitena, morajo aplikacije zahtevati dovoljenje za branje podatkov iz zunanje shrambe.\n\nNekatere aplikacije morda ne bodo delovale, dokler jih njihovi razvijalci ne posodobijo." + "Lokalni terminal" + "Omogočanje terminalske aplikacije za dostop do lokalne lupine" "Izberi pripomoček" "Izberite pripomoček" "Želite ustvariti pripomoček in dovoliti dostop?" @@ -1340,11 +1346,11 @@ "Storitve" "Sistem" "Poteze za povečavo" - "Če je ta funkcija vklopljena, lahko vsebino na zaslonu povečate ali pomanjšate tako, da se trikrat dotaknete zaslona."\n\n"Pri povečavi lahko:"\n
    • "Pomikate vsebino na zaslonu: Dva prsta ali več povlecite po zaslonu."
    • \n
    • "Prilagodite stopnjo povečave/pomanjšave: Najmanj dva prsta približajte ali razširite."
    \n\n"Začasno lahko tisto, kar je pod vašim prstom, povečate tudi tako, da se zaslona trikrat dotaknete in ga pridržite. V tem načinu povečave lahko povlečete s prstom in raziščete različne dele zaslona. Dvignite prst, če se želite vrniti v prejšnje stanje."\n\n"Opomba: Trojni dotik za povečavo deluje povsod, razen pri tipkovnici in v vrstici za krmarjenje"
    + "Če je ta funkcija vklopljena, lahko vsebino na zaslonu povečate ali pomanjšate tako, da se trikrat dotaknete zaslona.\n\nPri povečavi lahko:\n"
    • "Pomikate vsebino na zaslonu: Dva prsta ali več povlecite po zaslonu."
    • \n
    • "Prilagodite stopnjo povečave/pomanjšave: Najmanj dva prsta približajte ali razširite."
    \n\n"Začasno lahko tisto, kar je pod vašim prstom, povečate tudi tako, da se zaslona trikrat dotaknete in ga pridržite. V tem načinu povečave lahko povlečete s prstom in raziščete različne dele zaslona. Dvignite prst, če se želite vrniti v prejšnje stanje.\n\nOpomba: Trojni dotik za povečavo deluje povsod, razen pri tipkovnici in v vrstici za krmarjenje"
    "Bližnj. prip. za ljudi s pos. pot." "Vklopljeno" "Izklopljeno" - "Če je ta funkcija vklopljena, lahko v dveh korakih hitro omogočite funkcije za ljudi s posebnimi potrebami:"\n\n"1. korak: Pritisnite in pridržite gumb za vklop, dokler ne zaslišite zvoka ali začutite vibracije."\n\n"2. korak: Dotaknite se zaslona z dvema prstoma in pridržite, dokler ne zaslišite zvočne potrditve."\n\n"Če napravo uporablja več uporabnikov, z uporabo te bližnjice na zaslonu za zaklepanje začasno omogočite funkcije za ljudi s posebnimi potrebami, dokler naprave ne odklenete." + "Če je ta funkcija vklopljena, lahko v dveh korakih hitro omogočite funkcije za ljudi s posebnimi potrebami:\n\n1. korak: Pritisnite in pridržite gumb za vklop, dokler ne zaslišite zvoka ali začutite vibracije.\n\n2. korak: Dotaknite se zaslona z dvema prstoma in pridržite, dokler ne zaslišite zvočne potrditve.\n\nČe napravo uporablja več uporabnikov, z uporabo te bližnjice na zaslonu za zaklepanje začasno omogočite funkcije za ljudi s posebnimi potrebami, dokler naprave ne odklenete." "Veliko besedilo" "Povečava zaslona" "Samodejno posodobi povečavo zaslona" @@ -1366,6 +1372,16 @@ "Program TalkBack daje izgovorjene povratne informacije za pomoč slepim in slabovidnim uporabnikom. Ali ga želite brezplačno namestiti iz trgovine Android Market?" "Ni opisa." "Nastavitve" + "Tiskanje" + "Nastavitve tiskanja" + "Storitve" + "Želite uporabiti storitev %1$s?" + "Storitev %1$s lahko prejema dokumente, ki jih natisnete. Ti dokumenti lahko vsebujejo občutljive podatke." + "Nameščena ni nobena storitev" + "Nastavitve" + "Dodajanje tiskalnikov" + "Vklop" + "Izklop" "Baterija" "Kaj porablja energijo baterije" "Podatki o porabi baterije niso na voljo." @@ -1405,8 +1421,10 @@ "Wi-Fi vklopljen" "Tablični računalnik" "Telefon" - "Poslani podatki" - "Podatki prejeti" + "Podatki, poslani v mobilnih omr." + "Podatki, prejeti v mobilnih omr." + "Podatki, poslani v omr. Wi-Fi" + "Podatki, prejeti v omr. Wi-Fi" "Zvok" "Video" "Čas vklopa" @@ -1460,6 +1478,7 @@ "Višina tona" "Vpliva na ton govorjenega besedila" "Jezik" + "Jezik ni izbran" "Nastavite glas, odvisen od jezika, za govorjeno besedilo" "Poslušaj primer" "Predvajaj kratko predstavitev sinteze govora" @@ -1594,7 +1613,7 @@ "EAP ni podprt." "Povezave EAP Wi-Fi ne morete nastaviti med namestitvijo. To lahko po namestitvi naredite v Nastavitve > Brezžično in omrežja." "Vzpostavljanje povezave lahko traja nekaj minut ..." - "Če želite nadaljevati namestitev, se dotaknite ""Naprej""."\n\n"Če se želite povezati z drugim omrežjem Wi-Fi, se dotaknite ""Nazaj""." + "Če želite nadaljevati namestitev, se dotaknite ""Naprej"".\n\nČe se želite povezati z drugim omrežjem Wi-Fi, se dotaknite ""Nazaj""." "Sinhronizacija omogočena" "Sinhronizacija onemogočena" "Napaka pri sinhronizaciji" @@ -1622,7 +1641,7 @@ "Gmail" "Koledar" "Stiki" - "Pozdravljeni v storitvi Google Sync."" "\n"Googlov pristop k sinhroniziranju podatkov, s katerim lahko dostopate do stikov, koledarskih vnosov in drugih podatkov ne glede na to, kje ste." + "Pozdravljeni v storitvi Google Sync."" \nGooglov pristop k sinhroniziranju podatkov, s katerim lahko dostopate do stikov, koledarskih vnosov in drugih podatkov ne glede na to, kje ste." "Nastavitve sinhronizacije programov" "Podatki in sinhronizacija" "Spremeni geslo" @@ -1676,8 +1695,7 @@ "Osvetli poglede v oknih pri risanju z GPE" "Pokaži pos. sl. str. opr." "Obarvaj sloje strojne opreme zeleno ob posodobitvi" - "Prikaži prepisovanje GPE" - "Od najboljšega do najslabšega: modra, zelena, svetlo rdeča, rdeča" + "Odpr. nap. ris. zunaj vidn. obm. za GPE" "Onem. strojni medp." "Za sestavljanje slike vedno uporabi graf. procesor" "Omogoči sledi OpenGL" @@ -1738,11 +1756,11 @@ "Onem. prenos podat. v ozadju v mob. omr. Upor. bodo nemob. omr." "Če želite za ta program omejiti prenos podatkov v ozadju, nastavite omejitev prenosa podatkov v mobilnih omrežjih." "Želite omejiti podatke v ozadju?" - "Ta funkcija lahko povzroči prenehanje delovanja aplikacije, ki je odvisna od podatkov v ozadju, če so na voljo samo mobilna omrežja."\n\n"Ustreznejši kontrolniki za uporabo podatkov so na voljo v nastavitvah v aplikaciji." + "Ta funkcija lahko povzroči prenehanje delovanja aplikacije, ki je odvisna od podatkov v ozadju, če so na voljo samo mobilna omrežja.\n\nUstreznejši kontrolniki za uporabo podatkov so na voljo v nastavitvah v aplikaciji." "Prenos podatkov v ozadju lahko omejite samo, če nastavite omejitev količine podatkov, prenesenih v mobilnih omrežjih." "Želite vklopiti samodejno sinhroniziranje podatkov?" - "Vse spremembe vaših računov v spletu bodo samodejno kopirane v tablični računalnik."\n\n"Nekateri računi lahko spremembe, narejene v tabličnem računalniku, samodejno kopirajo v splet. Na ta način deluje Google Račun."\n\n"Če želite izbrati, katere vrste podatkov sinhronizirati v katerem računu, pojdite na Nastavitve > Računi." - "Vse spremembe vaših računov v spletu bodo samodejno kopirane v telefon."\n\n"Nekateri računi lahko spremembe, narejene v telefonu, samodejno kopirajo v splet. Na ta način deluje Google Račun."\n\n"Če želite izbrati, katere vrste podatkov sinhronizirati v katerem računu, pojdite na Nastavitve > Računi." + "Vse spremembe vaših računov v spletu bodo samodejno kopirane v tablični računalnik.\n\nNekateri računi lahko spremembe, narejene v tabličnem računalniku, samodejno kopirajo v splet. Na ta način deluje Google Račun.\n\nČe želite izbrati, katere vrste podatkov sinhronizirati v katerem računu, pojdite na Nastavitve > Računi." + "Vse spremembe vaših računov v spletu bodo samodejno kopirane v telefon.\n\nNekateri računi lahko spremembe, narejene v telefonu, samodejno kopirajo v splet. Na ta način deluje Google Račun.\n\nČe želite izbrati, katere vrste podatkov sinhronizirati v katerem računu, pojdite na Nastavitve > Računi." "Želite izklopiti samodejno sinhroniziranje podatkov?" "S tem zmanjšate količino prenesenih podatkov in porabo akumulatorja, vendar boste morali vsak posamezen račun sinhronizirati ročno, da dobite najnovejše podatke. Prav tako ne boste dobili obvestil o posodobitvah." "Datum ponastavitve cikla porabe" @@ -1751,12 +1769,12 @@ "Nastavi opozorilo o uporabi podatkov" "Nastavitev omejitve količine prenesenih podatkov" "Omejitev porabe podatkov" - "Vaša mobilna podatkovna povezava bo onemogočena, ko dosežete omejitev."\n\n"Ker uporabo podatkov meri tablični računalnik, operater pa jo lahko obračunava drugače, priporočamo, da uporabite nekoliko manjšo omejitev." - "Vaša mobilna podatkovna povezava bo onemogočena, ko dosežete omejitev."\n\n"Ker uporabo podatkov meri telefon, operater pa jo lahko obračunava drugače, priporočamo, da uporabite nekoliko manjšo omejitev." + "Vaša mobilna podatkovna povezava bo onemogočena, ko dosežete omejitev.\n\nKer uporabo podatkov meri tablični računalnik, operater pa jo lahko obračunava drugače, priporočamo, da uporabite nekoliko manjšo omejitev." + "Vaša mobilna podatkovna povezava bo onemogočena, ko dosežete omejitev.\n\nKer uporabo podatkov meri telefon, operater pa jo lahko obračunava drugače, priporočamo, da uporabite nekoliko manjšo omejitev." "Želite omejiti podatke v ozadju?" "Če omejite podatkovni prenos v mobilnih omrežjih v ozadju, nekatere aplikacije in storitve ne bodo delovale, kadar niste povezani v omrežje Wi-Fi." - "Če omejite podatkovni prenos v mobilnih omrežjih v ozadju, nekatere aplikacije in storitve ne bodo delovale, kadar niste povezani v omrežje Wi-Fi."\n\n"Nastavitev vpliva na vse uporabnike tega tabličnega računalnika." - "Če omejite podatkovni prenos v mobilnih omrežjih v ozadju, nekatere aplikacije in storitve ne bodo delovale, kadar niste povezani v omrežje Wi-Fi."\n\n"Nastavitev vpliva na vse uporabnike tega telefona." + "Če omejite podatkovni prenos v mobilnih omrežjih v ozadju, nekatere aplikacije in storitve ne bodo delovale, kadar niste povezani v omrežje Wi-Fi.\n\nNastavitev vpliva na vse uporabnike tega tabličnega računalnika." + "Če omejite podatkovni prenos v mobilnih omrežjih v ozadju, nekatere aplikacije in storitve ne bodo delovale, kadar niste povezani v omrežje Wi-Fi.\n\nNastavitev vpliva na vse uporabnike tega telefona." "^1"" ^2"\n"opozorilo" "^1"" ""^2"\n"omejitev" "Odstranjeni programi" @@ -1843,8 +1861,8 @@ "Uporabnik" "Omejen profil" "Dodaj novega uporabnika" - "To napravo lahko delite z drugimi, pred tem pa morate ustvariti dodatne uporabnike. Vsak uporabnik ima svoj prostor, ki ga lahko prilagaja z dodajanjem aplikacij, ozadij in drugih elementov. Uporabniki lahko poleg tega prilagajajo nastavitve tabličnega računalnika, ki vplivajo tudi na druge uporabnike, na primer Wi-Fi."\n\n"Ko ustvarite novega uporabnika, mora ta oseba opraviti postopek namestitve."\n\n"Vsak uporabnik lahko sprejme posodobljena dovoljenja za aplikacije v imenu vseh drugih uporabnikov." - "Ko ustvarite novega uporabnika, mora slednji opraviti postopek namestitve."\n\n"Vsak uporabnik lahko sprejme nova dovoljenja za aplikacije v imenu vseh ostalih uporabnikov." + "To napravo lahko delite z drugimi, pred tem pa morate ustvariti dodatne uporabnike. Vsak uporabnik ima svoj prostor, ki ga lahko prilagaja z dodajanjem aplikacij, ozadij in drugih elementov. Uporabniki lahko poleg tega prilagajajo nastavitve tabličnega računalnika, ki vplivajo tudi na druge uporabnike, na primer Wi-Fi.\n\nKo ustvarite novega uporabnika, mora ta oseba opraviti postopek namestitve.\n\nVsak uporabnik lahko sprejme posodobljena dovoljenja za aplikacije v imenu vseh drugih uporabnikov." + "Ko ustvarite novega uporabnika, mora slednji opraviti postopek namestitve.\n\nVsak uporabnik lahko sprejme nova dovoljenja za aplikacije v imenu vseh ostalih uporabnikov." "Želite uporabnika nastaviti zdaj?" "Prepričajte se, da ima oseba čas za nastavitev svojega prostora v tabličnem računalniku" "Želite zdaj nastaviti profil?" @@ -1875,6 +1893,9 @@ "Nastavitev vpliva na vse uporabnike v tem telefonu." "Spremenjen jezik" "Spremenjena velikost pisave" + "Omejitve" + "Odstranitev omejitev" + "Sprememba kode PIN" "Pokaži obvestila" "Pomoč" "Račun za vsebino" diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml index 8552560573b..e78eb2bde95 100644 --- a/res/values-sr/arrays.xml +++ b/res/values-sr/arrays.xml @@ -233,7 +233,8 @@ "Локација" "Лично" "Размена порука" - "Уређај" + "Медији" + "Уређај"
    "оквирна локација" @@ -267,6 +268,17 @@ "пуштање аудио записа" "читање меморије" "мењање меморије" + "дугмад за медије" + "аудио фокус" + "главна јачина звука" + "јачина звука гласа" + "јачина звука звона" + "јачина звука медија" + "јачина звука аларма" + "јачина звука обавештења" + "јачина звука Bluetooth-а" + "задржавање ван стања спавања" + "праћење локације" "Локација" @@ -300,12 +312,33 @@ "Пуштање аудио записа" "Читање меморије" "Мењање меморије" + "Дугмад за медије" + "Аудио фокус" + "Главна јачина звука" + "Јачина звука гласа" + "Јачина звука звона" + "Јачина звука медија" + "Јачина звука аларма" + "Јачина звука обавештења" + "Јачина звука Bluetooth-а" + "Задржи ван стања спавања" + "Локација" "Кратко" "Средње" "Дугачко" + + "Dalvik" + "ART" + "ART (отклањање грешака)" + + + "Коришћење Dalvik-а" + "Коришћење ART-а" + "Коришћење ART верзије за отклањање грешака" + "Никад не проверавај" "Потражи само DRM садржај" @@ -367,6 +400,11 @@ "На екрану у виду линија" "У adb shell dumpsys gfxinfo" + + "Искључи" + "Прикажи области преклапања" + "Прикажи бројач преклапања" + "Стандардно ограничење" "Без позадинских процеса" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 28747652245..ba760e56b37 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -275,8 +275,8 @@ "Веза за пренос података је прекинута зато што сте напустили матичну мрежу са искљученим преносом података у ромингу." "Укључи" "Када омогућите пренос података у ромингу, могу да настану велики трошкови роминга!" - "Када омогућите пренос података у ромингу, можете да направите велике трошкове у ромингу!"\n\n"Ово подешавање утиче на све кориснике овог таблета." - "Када омогућите пренос података у ромингу, можете да направите велике трошкове у ромингу!"\n\n"Ово подешавање утиче на све кориснике овог телефона." + "Када омогућите пренос података у ромингу, можете да направите велике трошкове у ромингу!\n\nОво подешавање утиче на све кориснике овог таблета." + "Када омогућите пренос података у ромингу, можете да направите велике трошкове у ромингу!\n\nОво подешавање утиче на све кориснике овог телефона." "Желите ли да дозволите пренос података у ромингу?" "Избор оператера" "Избор мрежног оператера" @@ -322,8 +322,8 @@ "Захтева нумерички PIN или лозинку за дешифровање таблета сваки пут када га укључите" "Захтева нумерички PIN или лозинку за дешифровање телефона сваки пут када га укључите" "Шифровано" - "Можете да шифрујете налоге, подешавања, преузете апликације и њихове податке, медије и друге датотеке. Када будете шифровали таблет, потребно је да унесете нумерички PIN или лозинку да бисте га дешифровали сваки пут када га укључите. Не можете да дешифрујете таблет осим ако га не вратите на фабричке податке, чиме ћете избрисати све податке."\n\n"Шифровање траје сат времена или дуже. Потребно је да почнете са напуњеном батеријом и да не искључујете таблет док се шифровање не доврши. Ако прекинете процес шифровања, изгубићете све податке или део њих." - "Можете да шифрујете налоге, подешавања, преузете апликације и њихове податке, медије и друге датотеке. Када будете шифровали телефон, потребно је да унесете нумерички PIN или лозинку да бисте га дешифровали сваки пут када га укључите. Не можете да дешифрујете телефон осим ако га не вратите на фабричке податке, чиме ћете избрисати све податке."\n\n"Шифровање траје сат времена или дуже. Потребно је да почнете са напуњеном батеријом и да не искључујете телефон док се шифровање не доврши. Ако прекинете процес шифровања, изгубићете све податке или део њих." + "Можете да шифрујете налоге, подешавања, преузете апликације и њихове податке, медије и друге датотеке. Када будете шифровали таблет, потребно је да унесете нумерички PIN или лозинку да бисте га дешифровали сваки пут када га укључите. Не можете да дешифрујете таблет осим ако га не вратите на фабричке податке, чиме ћете избрисати све податке.\n\nШифровање траје сат времена или дуже. Потребно је да почнете са напуњеном батеријом и да не искључујете таблет док се шифровање не доврши. Ако прекинете процес шифровања, изгубићете све податке или део њих." + "Можете да шифрујете налоге, подешавања, преузете апликације и њихове податке, медије и друге датотеке. Када будете шифровали телефон, потребно је да унесете нумерички PIN или лозинку да бисте га дешифровали сваки пут када га укључите. Не можете да дешифрујете телефон осим ако га не вратите на фабричке податке, чиме ћете избрисати све податке.\n\nШифровање траје сат времена или дуже. Потребно је да почнете са напуњеном батеријом и да не искључујете телефон док се шифровање не доврши. Ако прекинете процес шифровања, изгубићете све податке или део њих." "Шифруј таблет" "Шифруј телефон" "Напуните батерију и покушајте поново." @@ -339,8 +339,8 @@ "Покушајте поново за ^1 секунди." "Унесите лозинку" "Шифровање није успело" - "Шифровање је прекинуто и не може да се доврши. Као последица тога, подаци на таблету више нису доступни. "\n\n" Да бисте наставили да користите таблет, потребно је да га вратите на фабричка подешавања. Када подесите таблет након враћања на фабричка подешавања, имаћете прилику да вратите све податке за које сте направили резервне копије на Google налогу." - "Шифровање је прекинуто и не може да се доврши. Као последица тога, подаци на телефону више нису доступни. "\n\n"Да бисте наставили да користите телефон, потребно је да га вратите на фабричка подешавања. Када подесите телефон након враћања на фабричка подешавања, имаћете прилику да вратите све податке за које сте направили резервне копије на Google налогу." + "Шифровање је прекинуто и не може да се доврши. Као последица тога, подаци на таблету више нису доступни. \n\n Да бисте наставили да користите таблет, потребно је да га вратите на фабричка подешавања. Када подесите таблет након враћања на фабричка подешавања, имаћете прилику да вратите све податке за које сте направили резервне копије на Google налогу." + "Шифровање је прекинуто и не може да се доврши. Као последица тога, подаци на телефону више нису доступни. \n\nДа бисте наставили да користите телефон, потребно је да га вратите на фабричка подешавања. Када подесите телефон након враћања на фабричка подешавања, имаћете прилику да вратите све податке за које сте направили резервне копије на Google налогу." "Пребаци методе уноса" "Избор закључав. екрана" "Закључавање рез. коп." @@ -514,6 +514,7 @@ "Повезивање" "Повезан" "Доступан" + "У употреби" "Подешавања екрана" "Желите ли да прекинете везу?" "Овим ћете прекинути везу са уређајем:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Искључено" "Недоступно зато што је NFC искључен" "Android Beam" - "Када је ова функција укључена, можете да преносите садржај апликација на други уређај на коме је омогућен NFC тако што ћете приближити уређаје један другоме. На пример, можете да преносите странице прегледача, YouTube видео снимке, контакте из апликације Људи и још пуно тога."\n\n"Само прислоните уређаје један на други (обично са задње стране), а затим додирните екран. Апликација одређује шта ће бити пренето." + "Када је ова функција укључена, можете да преносите садржај апликација на други уређај на коме је омогућен NFC тако што ћете приближити уређаје један другоме. На пример, можете да преносите странице прегледача, YouTube видео снимке, контакте из апликације Људи и још пуно тога.\n\nСамо прислоните уређаје један на други (обично са задње стране), а затим додирните екран. Апликација одређује шта ће бити пренето." "Откривање мрежне услуге" "Дозвољава апликацијама на другим уређајима да откривају апликације на овом уређају" "Wi‑Fi" @@ -620,7 +621,7 @@ "Обезбеђено помоћу %1$s" ", обезбеђено помоћу %1$s" "Ништа" - "Због побољшања прецизности локације и у друге сврхе, %1$s жели да укључи скенирање мреже чак и када је Wi-Fi искључен."\n\n"Желите ли да дозволите ово за све апликације које желе да скенирају?" + "Због побољшања прецизности локације и у друге сврхе, %1$s жели да укључи скенирање мреже чак и када је Wi-Fi искључен.\n\nЖелите ли да дозволите ово за све апликације које желе да скенирају?" "Дозволи" "Одбиј" "Повежи" @@ -632,8 +633,8 @@ "Откажи" "Ипак прескочи" "Не прескачи" - "УПОЗОРЕЊЕ: Можете да изазовете додатне трошкове оператера за пренос података."\n\n"Подешавање таблета може да захтева значајну активност на мрежи." - "УПОЗОРЕЊЕ: Можете да изазовете додатне трошкове оператера за пренос података."\n\n"Подешавање телефона може да захтева значајну активност на мрежи." + "УПОЗОРЕЊЕ: Можете да изазовете додатне трошкове оператера за пренос података.\n\nПодешавање таблета може да захтева значајну активност на мрежи." + "УПОЗОРЕЊЕ: Можете да изазовете додатне трошкове оператера за пренос података.\n\nПодешавање телефона може да захтева значајну активност на мрежи." "УПОЗОРЕЊЕ: Док не успоставите интернет везу, таблет неће моћи да верификује да је софтвер ажуриран." "УПОЗОРЕЊЕ: Док не успоставите интернет везу, телефон неће моћи да верификује да је софтвер ажуриран." "Таблет није могао да се повеже са овом Wi-Fi мрежом." @@ -773,9 +774,9 @@ "SIM PIN" "Нетачан PIN" "PIN-ови се не подударају" - "Није могуће променити PIN."\n"Могуће је да је PIN нетачан." + "Није могуће променити PIN.\nМогуће је да је PIN нетачан." "SIM PIN је успешно промењен" - "Није могуће променити стање закључавања SIM картице."\n"Могуће је да је PIN нетачан." + "Није могуће променити стање закључавања SIM картице.\nМогуће је да је PIN нетачан." "Потврди" "Откажи" "Статус таблета" @@ -918,9 +919,9 @@ "Враћање фабричких података" "Брише све податке са таблета" "Брише све податке у телефону" - "Овим бришете све податке из ""интерне меморије"" таблета, укључујући:"\n\n
  • "Google налог"
  • \n
  • "Податке и подешавања система и апликација"
  • \n
  • "Преузете апликације"
  • - "Овим бришете све податке из ""интерне меморије"" телефона, укључујући:"\n\n
  • "Google налог"
  • \n
  • "Податке и подешавања система и апликација"
  • \n
  • "Преузете апликације"
  • - \n\n"Тренутно сте пријављени на следеће налоге:"\n + "Овим бришете све податке из ""интерне меморије"" таблета, укључујући:\n\n"
  • "Google налог"
  • \n
  • "Податке и подешавања система и апликација"
  • \n
  • "Преузете апликације"
  • + "Овим бришете све податке из ""интерне меморије"" телефона, укључујући:\n\n"
  • "Google налог"
  • \n
  • "Податке и подешавања система и апликација"
  • \n
  • "Преузете апликације"
  • + \n\n"Тренутно сте пријављени на следеће налоге:\n"
  • "Музика"
  • \n
  • "Фотографије"
  • \n
  • "Други кориснички подаци"
  • \n\n"Да бисте обрисали музику, слике и друге корисничке податке, потребно је да избришете ""USB меморију""." \n\n"Да бисте обрисали музику, слике и друге корисничке податке, потребно је да избришете садржај ""SD картице""." @@ -1105,7 +1106,7 @@ "Прикажи кеширане процесе" "Ресетуј подешавања аплик." "Жел. да ресет. под. апл.?" - "Овим ћете ресетовати сва подешавања за:"\n\n" "
  • "Онемогућене апликације"
  • \n" "
  • "Обавештења о онемогућеним апликацијама"
  • \n" "
  • "Подразумеване апликације за радње"
  • \n" "
  • "Ограничења података у позадини за апликације"
  • \n\n" Нећете изгубити никакве податке о апликацијама."
    + "Овим ћете ресетовати сва подешавања за:\n\n "
  • "Онемогућене апликације"
  • \n" "
  • "Обавештења о онемогућеним апликацијама"
  • \n" "
  • "Подразумеване апликације за радње"
  • \n" "
  • "Ограничења података у позадини за апликације"
  • \n\n" Нећете изгубити никакве податке о апликацијама."
    "Ресетуј апликације" "Управљај простором" "Филтрирај" @@ -1240,9 +1241,7 @@ "Да бисте пребацили, притисните Control-Spacebar" "Подразумевано" "Распореди тастатуре" - "Кориснички речник" - "Лични речник" - "Лични речници" + "Лични речник" "Додај" "Додавање у речник" @@ -1303,6 +1302,11 @@ "Омогућите опцију за прављење извештаја о грешкама у менију напајања" "Не закључавај" "Екран неће бити у режиму спавања током пуњења" + "Омогући snoop евиденцију за Bluetooth HCI" + "Сними све Bluetooth HCI пакете у датотеци" + "Избор времена извршавања" + "Избор времена извршавања" + "Желите ли да поново покренете уређај да бисте променили време извршавања из %1$s у %2$s?" "Дозволи лажне локације" "Дозволи лажне локације" "Дозволи отклањање USB грешака?" @@ -1315,11 +1319,13 @@ "Заштити USB меморију" "Апликације морају да захтевају дозволу за читање USB меморије" "Желите да заштитите USB меморију?" - "Када је USB меморија заштићена, апликације морају да захтевају дозволу за читање података из спољне меморије."\n\n"Неке апликације можда неће функционисати док их програмери не буду ажурирали." + "Када је USB меморија заштићена, апликације морају да захтевају дозволу за читање података из спољне меморије.\n\nНеке апликације можда неће функционисати док их програмери не буду ажурирали." "Заштити SD картицу" "Апликације морају да захтевају дозволу за читање SD картице" "Желите да заштитите SD картицу?" - "Када је SD картица заштићена, апликације морају да захтевају дозволу за читање података из спољне меморије."\n\n"Неке апликације можда неће функционисати док их програмери не буду ажурирали." + "Када је SD картица заштићена, апликације морају да захтевају дозволу за читање података из спољне меморије.\n\nНеке апликације можда неће функционисати док их програмери не буду ажурирали." + "Локални терминал" + "Омогући аплик. терминала за приступ локалном командном окружењу" "Избор гаџета" "Избор виџета" "Желите ли да направите виџет и дозволите приступ?" @@ -1340,11 +1346,11 @@ "Услуге" "Систем" "Покрети за увећање" - "Када је ова функција укључена, можете да увећавате и да умањујете приказ троструким додиром на екран."\n\n"Док сте у увећаном приказу, можете:"\n
    • "да померате: Превуците два или више прстију преко екрана."
    • \n
    • "да прилагођавате ниво зумирања: Спојите два или више прстију или их раширите."
    \n\n"Такође можете привремено да увећате оно што вам је под прстом троструким додиром и задржавањем. У овом увећаном приказу можете да превлачите прст да бисте истраживали различите делове екрана. Подигните прст да бисте се вратили у претходни приказ."\n\n"Напомена: Троструки додир за увећање функционише свуда осим на тастатури и траци за навигацију."
    + "Када је ова функција укључена, можете да увећавате и да умањујете приказ троструким додиром на екран.\n\nДок сте у увећаном приказу, можете:\n"
    • "да померате: Превуците два или више прстију преко екрана."
    • \n
    • "да прилагођавате ниво зумирања: Спојите два или више прстију или их раширите."
    \n\n"Такође можете привремено да увећате оно што вам је под прстом троструким додиром и задржавањем. У овом увећаном приказу можете да превлачите прст да бисте истраживали различите делове екрана. Подигните прст да бисте се вратили у претходни приказ.\n\nНапомена: Троструки додир за увећање функционише свуда осим на тастатури и траци за навигацију."
    "Пречица за приступачност" "Укључено" "Искључено" - "Када је ова функција укључена, функције приступачности можете брзо да омогућите у два корака:"\n\n"1. корак: Притисните и задржите дугме за напајање док не чујете звук или осетите вибрацију."\n\n"2. корак: Додирните и задржите са два прста док не чујете звучну потврду."\n\n"Ако постоји више корисника уређаја, помоћу ове пречице на закључавању екрана можете привремено да омогућите приступачност док је уређај откључан." + "Када је ова функција укључена, функције приступачности можете брзо да омогућите у два корака:\n\n1. корак: Притисните и задржите дугме за напајање док не чујете звук или осетите вибрацију.\n\n2. корак: Додирните и задржите са два прста док не чујете звучну потврду.\n\nАко постоји више корисника уређаја, помоћу ове пречице на закључавању екрана можете привремено да омогућите приступачност док је уређај откључан." "Велики текст" "Увеличавање екрана" "Аутоматски ажурирај увелич. екрана" @@ -1366,6 +1372,16 @@ "TalkBack пружа говорне повратне информације како би помогао слепим корисницима и корисницима са слабим видом. Да ли желите да га бесплатно инсталирате са Android Market-а?" "Није наведен опис." "Подешавања" + "Штампање" + "Подешавања штампања" + "Услуге" + "Желите ли да користите %1$s?" + "%1$s може да прима документе које штампате. Такви документи могу да садрже осетљиве податке." + "Ниједна услуга није инсталирана" + "Подешавања" + "Додај штампаче" + "Укључено" + "Искључено" "Батерија" "Шта користи батерију" "Нема података о кориш. батерије" @@ -1405,8 +1421,10 @@ "Wi-Fi је активан" "Таблет" "Телефон" - "Подаци су послати" - "Подаци су примљени" + "Подаци за мобилне уређ. су посл." + "Подаци за мобил. уређ. су примљ." + "Wi‑Fi подаци су послати" + "Wi‑Fi подаци су примљени" "Аудио" "Видео" "Трајање укључења" @@ -1460,6 +1478,7 @@ "Ниво" "Утиче на тон изговореног текста" "Језик" + "Језик није изабран" "Подешава глас специфичан за језик намењен говорном тексту" "Послушај пример" "Пуштање кратке демонстрације синтезе говора" @@ -1594,7 +1613,7 @@ "EAP није подржан." "Не можете да конфигуришете EAP Wi-Fi везу током подешавања. То можете да урадите након подешавања у одељку Подешавања > Бежична веза и мреже." "Повезивање може да потраје неколико минута..." - "Додирните ""Даље"" да бисте наставили са подешавањем."\n\n"Додирните ""Назад"" да бисте се повезали са другом Wi‑Fi мрежом." + "Додирните ""Даље"" да бисте наставили са подешавањем.\n\nДодирните ""Назад"" да бисте се повезали са другом Wi‑Fi мрежом." "Синхронизација је омогућена" "Синхронизација је онемогућена" "Грешка при синхронизацији." @@ -1676,8 +1695,7 @@ "Осветли приказе у прозор. када се црта са GPU-ом" "Прикажи ажурирања хардверских слојева" "Хардверски слојеви трепере зелено када се ажурирају" - "Прикажи прекорачење GPU-а" - "Од најбољег ка најгорем: плаво, зелено, светлоцрвено, црвено" + "Отклони грешке GPU преклапања" "Онемог. HW пост. елементе" "Увек користи GPU за компоновање екрана" "Омогући OpenGL трагове" @@ -1738,11 +1756,11 @@ "Онемогући позадинске податке у мобилним мрежама. Користи немобилне мреже ако су доступне." "За ограничење позадинских података за ову апл. прво ограничите мобилне податке." "Желите ли да ограничите позадинске податке?" - "Ова функција може да заустави апликацију која зависи од позадинских података када су доступне само мобилне мреже."\n\n"Адекватније контроле за коришћење података можете да пронађете у подешавањима доступним у оквиру апликације." + "Ова функција може да заустави апликацију која зависи од позадинских података када су доступне само мобилне мреже.\n\nАдекватније контроле за коришћење података можете да пронађете у подешавањима доступним у оквиру апликације." "Ограничавање позадинских података је могуће само када будете подесили ограничење за мобилне податке." "Укључити аутом. синх. података?" - "Све промене које обавите на налозима на вебу биће аутоматски копиране на таблет."\n\n"Неки налози могу и да аутоматски копирају на Веб све промене које обавите на таблету. Google налог функционише на овај начин."\n\n"Да бисте изабрали које ће се врсте информација синхронизовати између сваког налога, идите на Подешавања > Налози." - "Све промене које обавите на налозима на вебу биће аутоматски копиране на телефон."\n\n"Неки налози могу и да аутоматски копирају на Веб све промене које обавите на телефону. Google налог функционише на овај начин."\n\n"Да бисте изабрали које ће се врсте информација синхронизовати између сваког налога, идите на Подешавања > Налози." + "Све промене које обавите на налозима на вебу биће аутоматски копиране на таблет.\n\nНеки налози могу и да аутоматски копирају на Веб све промене које обавите на таблету. Google налог функционише на овај начин.\n\nДа бисте изабрали које ће се врсте информација синхронизовати између сваког налога, идите на Подешавања > Налози." + "Све промене које обавите на налозима на вебу биће аутоматски копиране на телефон.\n\nНеки налози могу и да аутоматски копирају на Веб све промене које обавите на телефону. Google налог функционише на овај начин.\n\nДа бисте изабрали које ће се врсте информација синхронизовати између сваког налога, идите на Подешавања > Налози." "Искључити аутом. синх. података?" "На овај начин ће се смањити потрошња података и батерије, али биће потребно да ручно синхронизујете сваки налог да бисте прикупили недавне информације. Нећете примати ни обавештења када дође до ажурирања." "Датум враћања циклуса потрошње на почетне вредности" @@ -1751,14 +1769,14 @@ "Подешавање упозорења о коришћењу података" "Подешавање ограничења за коришћење података" "Ограничавање потрошње података" - "Мобилна веза за пренос података биће онемогућена када се достигне назначено ограничење."\n\n"Пошто таблет мери потрошњу података, а оператер може да обрачунава потрошњу на други начин, размотрите коришћење нижег ограничења." - "Мобилна веза за пренос података биће онемогућена када се достигне назначено ограничење."\n\n"Пошто телефон мери потрошњу података, а оператер може да обрачунава потрошњу на други начин, размотрите коришћење нижег ограничења." + "Мобилна веза за пренос података биће онемогућена када се достигне назначено ограничење.\n\nПошто таблет мери потрошњу података, а оператер може да обрачунава потрошњу на други начин, размотрите коришћење нижег ограничења." + "Мобилна веза за пренос података биће онемогућена када се достигне назначено ограничење.\n\nПошто телефон мери потрошњу података, а оператер може да обрачунава потрошњу на други начин, размотрите коришћење нижег ограничења." "Желите ли да ограничите позадинске податке?" "Ако ограничите позадинске податке за мобилне уређаје, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi мрежом." - "Ако ограничите позадинске податке за мобилне уређаје, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi мрежом."\n\n"Ово подешавање утиче на све кориснике овог таблета." - "Ако ограничите позадинске податке за мобилне уређаје, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi мрежом."\n\n"Ово подешавање утиче на све кориснике овог телефона." + "Ако ограничите позадинске податке за мобилне уређаје, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi мрежом.\n\nОво подешавање утиче на све кориснике овог таблета." + "Ако ограничите позадинске податке за мобилне уређаје, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi мрежом.\n\nОво подешавање утиче на све кориснике овог телефона." "^1"" ""^2"\n"упозорење" - "Ограничење"\n"^1"" ""^2" + "Ограничење\n^1"" ""^2" "Уклоњене апликације" "Уклоњене апликације и корисници" "Примљених: %1$s, послатих: %2$s" @@ -1843,8 +1861,8 @@ "Корисник" "Ограничени профил" "Додавање новог корисника" - "Овај уређај можете да делите са другим људима тако што ћете направити додатне кориснике. Сваки корисник има сопствени простор, који може да прилагођава помоћу својих апликација, позадина итд. Корисници могу да прилагођавају и подешавања таблета као што је Wi-Fi, која утичу на свакога."\n\n"Када направите новог корисника, та особа треба да обави подешавање."\n\n"Сваки корисник може да прихвата ажуриране дозволе апликација у име свих осталих корисника." - "Када направите новог корисника, та особа треба да обави подешавање."\n\n"Сваки корисник може да прихвата ажуриране дозволе апликација у име свих осталих корисника." + "Овај уређај можете да делите са другим људима тако што ћете направити додатне кориснике. Сваки корисник има сопствени простор, који може да прилагођава помоћу својих апликација, позадина итд. Корисници могу да прилагођавају и подешавања таблета као што је Wi-Fi, која утичу на свакога.\n\nКада направите новог корисника, та особа треба да обави подешавање.\n\nСваки корисник може да прихвата ажуриране дозволе апликација у име свих осталих корисника." + "Када направите новог корисника, та особа треба да обави подешавање.\n\nСваки корисник може да прихвата ажуриране дозволе апликација у име свих осталих корисника." "Подешавате корисника одмах?" "Уверите се да особа може да узме таблет и подеси свој простор" "Желите ли да одмах подесите профил?" @@ -1875,6 +1893,9 @@ "Ово подешавање утиче на све кориснике овог телефона." "Промена језика" "Промена величине фонта" + "Ограничења" + "Уклони ограничења" + "Промени PIN" "Прикажи обавештења" "Помоћ" "Налог за садржај" diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml index 941aee8256f..802a30f6167 100644 --- a/res/values-sv/arrays.xml +++ b/res/values-sv/arrays.xml @@ -233,7 +233,8 @@ "Plats" "Personligt" "Meddelanden" - "Enhet" + "Media" + "Enhet"
    "ungefärlig plats" @@ -267,6 +268,17 @@ "spela upp ljud" "läs Urklipp" "ändra Urklipp" + "medieknappar" + "ljudinställning" + "mastervolym" + "röstvolym" + "ringvolym" + "medievolym" + "alarmvolym" + "meddelandevolym" + "bluetooth-volym" + "behåll aktiv" + "övervaka plats" "Plats" @@ -300,12 +312,33 @@ "Spela upp ljud" "Läs Urklipp" "Ändra Urklipp" + "Medieknappar" + "Ljudinställning" + "Huvudvolym" + "Röstvolym" + "Ringvolym" + "Medievolym" + "Alarmvolym" + "Meddelandevolym" + "Bluetooth-volym" + "Behåll aktiv" + "Plats" "Kort" "Mellan" "Lång" + + "Dalvik" + "ART" + "ART (felsökning)" + + + "Använd Dalvik" + "Använd ART" + "Använd felsökningsversionen av ART" + "Kontrollera aldrig" "Kontrollera bara DRM-innehåll" @@ -367,6 +400,11 @@ "På skärmen som rader" "In adb shell dumpsys gfxinfo" + + "Av" + "Visa områden som överskrider gränsen" + "Visa antal som överskrider gränsen" + "Standardgräns" "Inga bakgrundsprocesser" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 7d1db191405..4e2273c7211 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -275,8 +275,8 @@ "Du förlorade dataanslutningen eftersom du lämnade ditt hemnätverk utan att aktivera dataroaming." "Aktivera" "När du tillåter dataroaming kan det tillkomma vissa avgifter!" - "Om du tillåter dataroaming kan det leda till höga kostnader."\n\n"Den här inställningen påverkar samtliga användare." - "Om du tillåter dataroaming kan det leda till höga kostnader."\n\n"Den här inställningen påverkar samtliga användare." + "Om du tillåter dataroaming kan det leda till höga kostnader.\n\nDen här inställningen påverkar samtliga användare." + "Om du tillåter dataroaming kan det leda till höga kostnader.\n\nDen här inställningen påverkar samtliga användare." "Vill du tillåta dataroaming?" "Val av operatör" "Välj en nätverksoperatör" @@ -322,8 +322,8 @@ "Ange PIN-kod eller lösenord för att dekryptera surfplattan varje gång du slår på den" "Ange PIN-kod eller lösenord för att dekryptera telefonen varje gång du slår på den" "Krypterad" - "Du kan kryptera dina konton, inställningar, hämtade appar och tillhörande data, media och andra filer. När du krypterar surfplattan måste du ange en numerisk PIN-kod eller ett lösenord och dekryptera enheten varje gång du startar den. Det går endast att ta bort krypteringen genom att återställa standardinställningarna, vilket raderar alla dina data."\n\n"Krypteringen tar en timme eller mer. Ladda batteriet helt innan du börjar och låt laddaren vara ansluten tills krypteringen är klar. Om du avbryter den pågående krypteringen kommer du att förlora delar av eller alla dina data." - "Du kan kryptera dina konton, inställningar, hämtade appar och tillhörande data, media och andra filer. När du krypterar mobilen måste du ange en numerisk PIN-kod eller ett lösenord och dekryptera enheten varje gång du startar den. Det går endast att ta bort krypteringen genom att återställa standardinställningarna, vilket raderar alla dina data."\n\n"Krypteringen tar en timme eller mer. Ladda batteriet helt innan du börjar och låt laddaren vara ansluten tills krypteringen är klar. Om du avbryter den pågående krypteringen kommer du att förlora delar av eller alla dina data." + "Du kan kryptera dina konton, inställningar, hämtade appar och tillhörande data, media och andra filer. När du krypterar surfplattan måste du ange en numerisk PIN-kod eller ett lösenord och dekryptera enheten varje gång du startar den. Det går endast att ta bort krypteringen genom att återställa standardinställningarna, vilket raderar alla dina data.\n\nKrypteringen tar en timme eller mer. Ladda batteriet helt innan du börjar och låt laddaren vara ansluten tills krypteringen är klar. Om du avbryter den pågående krypteringen kommer du att förlora delar av eller alla dina data." + "Du kan kryptera dina konton, inställningar, hämtade appar och tillhörande data, media och andra filer. När du krypterar mobilen måste du ange en numerisk PIN-kod eller ett lösenord och dekryptera enheten varje gång du startar den. Det går endast att ta bort krypteringen genom att återställa standardinställningarna, vilket raderar alla dina data.\n\nKrypteringen tar en timme eller mer. Ladda batteriet helt innan du börjar och låt laddaren vara ansluten tills krypteringen är klar. Om du avbryter den pågående krypteringen kommer du att förlora delar av eller alla dina data." "Kryptera surfplattan" "Kryptera telefonen" "Ladda batteriet och försök igen." @@ -339,8 +339,8 @@ "Försök igen om ^1 sekunder." "Ange ditt lösenord" "Krypteringen misslyckades" - "Krypteringen avbröts och kan inte slutföras. Data på surfplattan är därför inte tillgängliga längre."\n\n" Om du vill fortsätta använda surfplattan måste du återställa standardinställningarna. När du konfigurerar surfplattan efter återställningen kan du välja att återställa alla data som du har säkerhetskopierat i ditt Google-konto." - "Krypteringen avbröts och kan inte slutföras. Data på mobilen är därför inte tillgängliga längre."\n\n"Om du vill fortsätta använda mobilen måste du återställa standardinställningarna. När du konfigurerar enheten efter återställningen kan du välja att återställa alla data som du har säkerhetskopierat i ditt Google-konto." + "Krypteringen avbröts och kan inte slutföras. Data på surfplattan är därför inte tillgängliga längre.\n\n Om du vill fortsätta använda surfplattan måste du återställa standardinställningarna. När du konfigurerar surfplattan efter återställningen kan du välja att återställa alla data som du har säkerhetskopierat i ditt Google-konto." + "Krypteringen avbröts och kan inte slutföras. Data på mobilen är därför inte tillgängliga längre.\n\nOm du vill fortsätta använda mobilen måste du återställa standardinställningarna. När du konfigurerar enheten efter återställningen kan du välja att återställa alla data som du har säkerhetskopierat i ditt Google-konto." "Växla inmatningsmetod" "Välj skärmlås" "Välj lås för säkerhetskopiering" @@ -514,6 +514,7 @@ "Ansluter" "Anslutna" "Tillgängliga" + "Används" "Skärminställningar" "Vill du koppla från?" "Detta avslutar din anslutning till:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Av" "Inte tillgängligt eftersom NFC är inaktiverat" "Android Beam" - "När den här funktionen är aktiverad kan du överföra appinnehåll till en annan NFC-kompatibel enhet genom att hålla enheterna mot varandra. Du kan t.ex. överföra webbläsarsidor, YouTube-videoklipp, kontakter med mera."\n\n"Håll bara enheterna mot varandra (oftast baksida mot baksida) och tryck sedan på skärmen. Appen avgör vad som överförs." + "När den här funktionen är aktiverad kan du överföra appinnehåll till en annan NFC-kompatibel enhet genom att hålla enheterna mot varandra. Du kan t.ex. överföra webbläsarsidor, YouTube-videoklipp, kontakter med mera.\n\nHåll bara enheterna mot varandra (oftast baksida mot baksida) och tryck sedan på skärmen. Appen avgör vad som överförs." "Hitta nätverkstjänst" "Tillåt att appar på andra enheter hittar appar på den här enheten" "Wi-Fi" @@ -620,7 +621,7 @@ "Skyddad med %1$s" ", skyddad med %1$s" "Ingen" - "%1$s vill aktivera nätverkssökning även när Wi-Fi är avstängt för att kunna förbättra positionens exakthet och andra ändamål."\n\n"Vill du tillåta detta för alla appar som vill söka efter nätverk?" + "%1$s vill aktivera nätverkssökning även när Wi-Fi är avstängt för att kunna förbättra positionens exakthet och andra ändamål.\n\nVill du tillåta detta för alla appar som vill söka efter nätverk?" "Tillåt" "Avvisa" "Anslut" @@ -632,8 +633,8 @@ "Avbryt" "Hoppa över ändå" "Hoppa inte över" - "VARNING! Eventuella operatörsavgifter för datatrafik kan tillkomma."\n\n"Konfigurationen kan kräva betydande nätverksaktivitet." - "VARNING! Eventuella operatörsavgifter för datatrafik kan tillkomma."\n\n"Konfigurationen kan kräva betydande nätverksaktivitet." + "VARNING! Eventuella operatörsavgifter för datatrafik kan tillkomma.\n\nKonfigurationen kan kräva betydande nätverksaktivitet." + "VARNING! Eventuella operatörsavgifter för datatrafik kan tillkomma.\n\nKonfigurationen kan kräva betydande nätverksaktivitet." "Varning! Om du inte är ansluten till internet kan surfplattan inte verifiera att programvaran är uppdaterad." "Varning! Om du inte är ansluten till internet kan mobilen inte verifiera att programvaran är uppdaterad." "Det gick inte att ansluta surfplattan till Wi-Fi-nätverket." @@ -773,9 +774,9 @@ "PIN-kod för SIM-kort" "Fel PIN-kod" "PIN-koderna matchar inte" - "Det går inte att ändra PIN-koden."\n" Du kan ha angett fel PIN-kod." + "Det går inte att ändra PIN-koden.\n Du kan ha angett fel PIN-kod." "SIM-kortets PIN-kod har ändrats" - "Det gick inte att ändra SIM-kortets låsstatus."\n"Du kan ha angett fel PIN-kod." + "Det gick inte att ändra SIM-kortets låsstatus.\nDu kan ha angett fel PIN-kod." "OK" "Avbryt" "Pekdatorns status" @@ -918,9 +919,9 @@ "Återställ standardinst." "Raderar alla data på surfplattan" "Raderar alla data på telefonen" - "Detta raderar alla data från pekdatorns ""interna lagringsutrymme"", bland annat:"\n\n
  • "ditt Google-konto"
  • \n
  • "system- och appdata och inställningar"
  • \n
  • "hämtade appar"
  • - "Detta raderar alla data från pekdatorns ""interna lagringsutrymme"", bland annat:"\n\n
  • "ditt Google-konto"
  • \n
  • "system- och appdata och inställningar"
  • \n
  • "hämtade appar"
  • - \n\n"Du är inloggad på följande konton:"\n + "Detta raderar alla data från pekdatorns ""interna lagringsutrymme"", bland annat:\n\n"
  • "ditt Google-konto"
  • \n
  • "system- och appdata och inställningar"
  • \n
  • "hämtade appar"
  • + "Detta raderar alla data från pekdatorns ""interna lagringsutrymme"", bland annat:\n\n"
  • "ditt Google-konto"
  • \n
  • "system- och appdata och inställningar"
  • \n
  • "hämtade appar"
  • + \n\n"Du är inloggad på följande konton:\n"
  • "Musik"
  • \n
  • "Foton"
  • \n
  • "Andra användardata"
  • \n\n"Om du vill ta bort musik, bilder och andra användardata måste du radera ""USB-lagringsenheten""." \n\n"Om du vill ta bort musik, bilder och andra användardata måste du radera ""SD-kortet""." @@ -1105,7 +1106,7 @@ "Visa cachade processer" "Återställ inställningarna" "Vill du återställa?" - "Detta återställer alla inställningar för:"\n\n" "
  • "inaktiverade appar"
  • \n" "
  • "meddelanden om inaktiverade appar"
  • \n" "
  • "standardappar för olika åtgärder"
  • \n" "
  • "begränsningar för bakgrundsdata i appar."
  • \n\n" Inga appdata går förlorade."
    + "Detta återställer alla inställningar för:\n\n "
  • "inaktiverade appar"
  • \n" "
  • "meddelanden om inaktiverade appar"
  • \n" "
  • "standardappar för olika åtgärder"
  • \n" "
  • "begränsningar för bakgrundsdata i appar."
  • \n\n" Inga appdata går förlorade."
    "Återställ appar" "Hantera utrymme" "Filtrera" @@ -1240,9 +1241,7 @@ "Växla genom att trycka på Ctrl-Mellanslag" "Standard" "Tangentbordslayouter" - "Användarens ordlista" - "Egen ordlista" - "Egna ordlistor" + "Egen ordlista" "Lägg till" "Lägg till i ordlista" @@ -1303,6 +1302,11 @@ "Inkludera alternativet att skapa en felrapport på startmenyn" "Håll aktiverad" "Skärmen vilar aldrig när laddning pågår" + "Aktivera HCI snoop-logg för Bluetooth" + "Samla alla HCI-paket för Bluetooth i en fil" + "Välj körningstid" + "Välj körningstid" + "Vill du starta om och ändra körningstiden från %1$s till %2$s?" "Tillåt skenplatser" "Tillåt skenplatser" "Ska USB-felsökning tillåtas?" @@ -1315,11 +1319,13 @@ "Skydda USB-lagringsenheten" "Appar måste få tillstånd för att kunna läsa USB-enheten" "Vill du skydda USB-enheten?" - "När USB-lagringsenheten är skyddad måste apparna begära tillstånd för att kunna läsa data som lagras externt."\n\n"En del appar måste eventuellt uppdateras av utvecklaren för att fungera." + "När USB-lagringsenheten är skyddad måste apparna begära tillstånd för att kunna läsa data som lagras externt.\n\nEn del appar måste eventuellt uppdateras av utvecklaren för att fungera." "Skydda SD-kortet" "Appar måste få tillstånd för att kunna läsa SD-kortet" "Vill du skydda SD-kortet?" - "När SD-kortet är skyddat måste apparna begära tillstånd för att kunna läsa data som lagras externt."\n\n"En del appar måste eventuellt uppdateras av utvecklaren för att fungera." + "När SD-kortet är skyddat måste apparna begära tillstånd för att kunna läsa data som lagras externt.\n\nEn del appar måste eventuellt uppdateras av utvecklaren för att fungera." + "Lokal terminal" + "Aktivera en terminalapp som ger åtkomst till hyllor lokalt" "Välj gadget" "Välj widget" "Skapa widget och tillåta åtkomst?" @@ -1340,11 +1346,11 @@ "Tjänster" "System" "Förstoringsrörelser" - "När den här funktionen är aktiverad kan du zooma in och ut genom att trycka tre gånger på skärmen."\n\n"När du har zoomat in kan du göra följande saker:"\n
    • "Panorera: Dra minst två fingrar över skärmen."
    • \n
    • "Justera zoomen: Nyp eller dra isär med minst två fingrar."
    \n\n"Du kan också förstora något tillfälligt genom att trycka tre gånger på det och hålla kvar. I det förstorade läget kan du utforska olika delar av skärmen genom att dra med fingret. Återgå till föregående läge genom att släppa fingret."\n\n"Obs! Det går att förstora genom att trycka tre gånger överallt utom på tangentbordet och navigeringsfältet."
    + "När den här funktionen är aktiverad kan du zooma in och ut genom att trycka tre gånger på skärmen.\n\nNär du har zoomat in kan du göra följande saker:\n"
    • "Panorera: Dra minst två fingrar över skärmen."
    • \n
    • "Justera zoomen: Nyp eller dra isär med minst två fingrar."
    \n\n"Du kan också förstora något tillfälligt genom att trycka tre gånger på det och hålla kvar. I det förstorade läget kan du utforska olika delar av skärmen genom att dra med fingret. Återgå till föregående läge genom att släppa fingret.\n\nObs! Det går att förstora genom att trycka tre gånger överallt utom på tangentbordet och navigeringsfältet."
    "Aktivera tillgänglighet snabbt" "På" "Av" - "När den här funktionen är aktiverad kan du snabbt aktivera tillgänglighetsfunktioner i två steg:"\n\n"Steg 1: Tryck länge på strömbrytaren tills du hör ett ljud eller känner en vibration."\n\n"Steg 2: Tryck länge med två fingrar tills en bekräftelse läses upp."\n\n"Om genvägen på den låsta skärmen används och flera personer använder enheten, aktiveras tillgänglighetsalternativen tillfälligt tills enheten låses upp." + "När den här funktionen är aktiverad kan du snabbt aktivera tillgänglighetsfunktioner i två steg:\n\nSteg 1: Tryck länge på strömbrytaren tills du hör ett ljud eller känner en vibration.\n\nSteg 2: Tryck länge med två fingrar tills en bekräftelse läses upp.\n\nOm genvägen på den låsta skärmen används och flera personer använder enheten, aktiveras tillgänglighetsalternativen tillfälligt tills enheten låses upp." "Stor text" "Skärmförstoring" "Uppdatera skärmförstoring automatiskt" @@ -1366,6 +1372,16 @@ "TalkBack ger talad feedback till användare som är blinda eller har nedsatt syn. Vill du installera den gratis från Android Market?" "Ingen beskrivning har angetts." "Inställningar" + "Skriver ut" + "Utskriftsinställningar" + "Tjänster" + "Vill du använda %1$s?" + "%1$s kan ta emot dokument som du skriver ut. Sådana dokument kan innehålla känsliga uppgifter." + "Inga tjänster är installerade" + "Inställningar" + "Lägg till skrivare" + "På" + "Av" "Batteri" "Appar som har förbrukat batteriet" "Batteriinfo ej tillgänglig." @@ -1405,8 +1421,10 @@ "Wi-Fi körs" "Surfplatta" "Telefon" - "Skickade data" - "Mottagna data" + "Mobildata har skickats" + "Mobildata har mottagits" + "Data via Wi-Fi har skickats" + "Data via Wi-Fi har mottagits" "Ljud" "Video" "Tid aktiverad" @@ -1460,6 +1478,7 @@ "Ton" "Påverkar den talade textens ton" "Språk" + "Inget språk valt" "Ange språkspecifik röst för den talade texten" "Lyssna på ett exempel" "Spela upp en kort demonstration av talsyntes" @@ -1594,7 +1613,7 @@ "EAP stöds inte." "Det går inte att konfigurera en EAP-Wi-Fi-anslutning under installationen. Efter installationen kan du göra det i Inställningar > Trådlöst och nätverk." "Det kan ta några minuter att ansluta ..." - "Tryck på ""Nästa"" om du vill fortsätta med installationen."\n\n"Tryck på ""Tillbaka"" om du vill ansluta till ett annat Wi-Fi-nätverk." + "Tryck på ""Nästa"" om du vill fortsätta med installationen.\n\nTryck på ""Tillbaka"" om du vill ansluta till ett annat Wi-Fi-nätverk." "Synkronisering aktiverad" "Synkronisering inaktiverad" "Synkroniseringsfel." @@ -1676,8 +1695,7 @@ "Visningar blinkar i fönster vid GPU-ritningar" "Visa maskinvaruskiktuppd." "Låt maskinvaruskikt blinka grönt vid uppdateringar" - "Visa GPU-flerlagerritning" - "Från bäst till sämst: blå, grön, ljusröd, röd" + "Felsök överskriden GPU" "Inaktivera HW-överlagringar" "Använd alltid GPU för skärmsammansättning" "Aktivera OpenGL-spår" @@ -1738,11 +1756,11 @@ "Inaktivera bakgrundsdata i mobildatanät. Fasta nätverksuppkopplingar används om sådana finns." "Om du vill begränsa bakgrundsdata för appen måste du först ange en gräns för mobildata." "Vill du begränsa bakgrundsdata?" - "Den här funktionen kan medföra att en app som använder bakgrundsdata slutar fungera när endast mobila nätverk är tillgängliga."\n\n"Du kan hitta fler alternativ för dataanvändning i inställningarna i appen." + "Den här funktionen kan medföra att en app som använder bakgrundsdata slutar fungera när endast mobila nätverk är tillgängliga.\n\nDu kan hitta fler alternativ för dataanvändning i inställningarna i appen." "Det går bara att begränsa bakgrundsdata när du har angett en gräns för mobildata." "Aktivera automatisk datasynk.?" - "Alla kontoändringar som görs på webben kopieras automatiskt till surfplattan."\n\n"För vissa konton kopieras även alla ändringar som görs på surfplattan automatiskt till webben. Google-konton fungerar på det sättet."\n\n"Du kan ange vilken typ av information som ska synkroniseras för varje konto under Inställningar > Konton." - "Alla kontoändringar som görs på webben kopieras automatiskt till mobilen."\n\n"För vissa konton kopieras även alla ändringar som görs på mobilen automatiskt till webben. Google-konton fungerar på det sättet."\n\n"Du kan ställa in vilken typ av information som ska synkroniseras för varje konto under Inställningar > Konton." + "Alla kontoändringar som görs på webben kopieras automatiskt till surfplattan.\n\nFör vissa konton kopieras även alla ändringar som görs på surfplattan automatiskt till webben. Google-konton fungerar på det sättet.\n\nDu kan ange vilken typ av information som ska synkroniseras för varje konto under Inställningar > Konton." + "Alla kontoändringar som görs på webben kopieras automatiskt till mobilen.\n\nFör vissa konton kopieras även alla ändringar som görs på mobilen automatiskt till webben. Google-konton fungerar på det sättet.\n\nDu kan ställa in vilken typ av information som ska synkroniseras för varje konto under Inställningar > Konton." "Inaktivera automatisk datasynk.?" "Detta minskar dataanvändningen och sparar batteri, men varje konto måste synkroniseras manuellt varje gång du vill samla in aktuell information. Du får inte heller några meddelanden om uppdateringar." "Återställningsdag för användningscykel" @@ -1751,12 +1769,12 @@ "Ange varning för dataanvändning" "Ange gräns för dataanvändning" "Begränsa dataanvändningen" - "Mobildataanslutningen inaktiveras när den angivna gränsen är nådd."\n\n" Eftersom dataanvändningen mäts med hjälp av surfplattan, och det kan hända att din operatör beräknar användningen annorlunda, kan det vara bra att använda en lågt beräknad gräns." - "Mobildataanslutningen inaktiveras när den angivna gränsen är nådd."\n\n" Eftersom dataanvändningen mäts med hjälp av mobilen, och det kan hända att din operatör beräknar användningen annorlunda, kan det vara bra att använda en lågt beräknad gräns." + "Mobildataanslutningen inaktiveras när den angivna gränsen är nådd.\n\n Eftersom dataanvändningen mäts med hjälp av surfplattan, och det kan hända att din operatör beräknar användningen annorlunda, kan det vara bra att använda en lågt beräknad gräns." + "Mobildataanslutningen inaktiveras när den angivna gränsen är nådd.\n\n Eftersom dataanvändningen mäts med hjälp av mobilen, och det kan hända att din operatör beräknar användningen annorlunda, kan det vara bra att använda en lågt beräknad gräns." "Vill du begränsa bakgrundsdata?" "Om du begränsar mobildata i bakgrunden kommer vissa appar och tjänster bara att fungera när du är ansluten till ett Wi-Fi-nätverk." - "Om du begränsar användningen av mobildata i bakgrunden kommer vissa appar och tjänster bara att fungera när du är ansluten till ett Wi-Fi-nätverk."\n\n"Den här inställningen påverkar samtliga användare." - "Om du begränsar användningen av mobildata i bakgrunden kommer vissa appar och tjänster bara att fungera när du är ansluten till ett Wi-Fi-nätverk."\n\n"Den här inställningen påverkar samtliga användare." + "Om du begränsar användningen av mobildata i bakgrunden kommer vissa appar och tjänster bara att fungera när du är ansluten till ett Wi-Fi-nätverk.\n\nDen här inställningen påverkar samtliga användare." + "Om du begränsar användningen av mobildata i bakgrunden kommer vissa appar och tjänster bara att fungera när du är ansluten till ett Wi-Fi-nätverk.\n\nDen här inställningen påverkar samtliga användare." "^1"" ""^2"\n"varning" "^1"" ""^2"\n"gräns" "Borttagna appar" @@ -1843,8 +1861,8 @@ "Användare" "Begränsad profil" "Lägg till en ny användare" - "Du kan dela den här enheten med andra genom att skapa fler användare. Alla användare har sitt eget utrymme som de kan anpassa med appar, bakgrunder med mera. Användarna kan även justera inställningar för surfplattan som påverkar alla andra, till exempel för Wi-Fi."\n\n"När du skapar en ny användare måste han eller hon genomgå en konfigureringsprocess."\n\n"Alla användare kan godkänna uppdaterade appbehörigheter för alla andra användare." - "När du skapar en ny användare måste han eller hon genomgå en konfigureriringsprocess."\n\n"Alla användare kan godkänna uppdaterade appbehörigheter för alla andra användare." + "Du kan dela den här enheten med andra genom att skapa fler användare. Alla användare har sitt eget utrymme som de kan anpassa med appar, bakgrunder med mera. Användarna kan även justera inställningar för surfplattan som påverkar alla andra, till exempel för Wi-Fi.\n\nNär du skapar en ny användare måste han eller hon genomgå en konfigureringsprocess.\n\nAlla användare kan godkänna uppdaterade appbehörigheter för alla andra användare." + "När du skapar en ny användare måste han eller hon genomgå en konfigureriringsprocess.\n\nAlla användare kan godkänna uppdaterade appbehörigheter för alla andra användare." "Konfigurera användare nu?" "Se till att personen har möjlighet att använda surfplattan och konfigurera sitt utrymme" "Vill du konfigurera en profil nu?" @@ -1875,6 +1893,9 @@ "Den här inställningen påverkar samtliga användare." "Ändra språk" "Ändra teckenstorlek" + "Begränsningar" + "Ta bort begränsningar" + "Ändra PIN-koden" "Visa meddelanden" "Hjälp" "Konto för innehåll" diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml index d7c0c7b717d..5525a542473 100644 --- a/res/values-sw/arrays.xml +++ b/res/values-sw/arrays.xml @@ -31,7 +31,7 @@
    "Sekunde 15" - "sekunde 30" + "Sekunde 30" "Dakika 1" "Dakika 2" "Dakika 5" @@ -41,7 +41,7 @@ "Katu" "Sekunde 15" - "sekunde 30" + "Sekunde 30" "Dakika 1" "Dakika 2" "Dakika 5" @@ -55,7 +55,7 @@ "Sekunde 30" "Dakika 1" "Dakika 2" - "dakika 5" + "Dakika 5" "Dakika 10" "Dakika 30" @@ -141,7 +141,7 @@ "Dakika 2" - "dakika 5" + "Dakika 5" "Saa 1" "Kamwe muda usiishe" @@ -153,12 +153,12 @@ "Daima" - "Wakati imechopekwa ndani" - "Kamwe ( huongeza utumizi wa data)" + "Wakati inachaji pekee" + "Kamwe (huongeza matumizi ya data)" "Daima" - "Wakati imechopekwa ndani" + "Wakati inachaji pekee" "kamwe" @@ -233,7 +233,8 @@ "Eneo" "Binafsi" "Utumaji ujumbe" - "Kifaa" + "Vyombo vya Habari" + "Kifaa" "eneo lisilo laini" @@ -267,6 +268,17 @@ "cheza sauti" "soma ubao klipu" "badilisha ubao klipu" + "vitufe vya vyombo vya habari" + "mkazo wa sauti" + "sauti kuu" + "kiwango cha sauti" + "sauti ya mlio" + "sauti ya midia" + "sauti ya kengele" + "sauti ya arifa" + "sauti ya bluetooth" + "kaa chonjo" + "fuatilia eneo" "Eneo" @@ -300,12 +312,33 @@ "Cheza sauti" "Soma ubao klipu" "Rekebisha ubao klipu" + "Vitufe vya media" + "Kotovu cha sauti" + "Sauti kuu" + "Kiwango cha sauti" + "Sauti ya mlio" + "Sauti ya media" + "Sauti ya kengele" + "Sauti ya arifa" + "Sauti ya Bluetooth" + "Kaa chonjo" + "Eneo" "Fupi" "Wastani" "Ndefu" + + "Dalvik" + "ART" + "ART (rekebisha hitilafu)" + + + "Tumia Dalvik" + "Tumia ART" + "Tumia ART kurekebisha muundo" + "Katu usikague" "Chunguza maudhui ya DRM pekee" @@ -367,6 +400,11 @@ "Kwenye skrini kama mistari" "Katika adb shell dumpsys gfxinfo" + + "Zima" + "Onyesha maeneo yaliyoondolewa" + "Onyesha kihesabu kilichoondolewa" + "Kiwango cha wastani" "Hakuna mchakato wa mandari nyuma" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index 9e516a27c1c..b7308086151 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -277,8 +277,8 @@ "Umepoteza muunganisho wa data kwa sababu uliondoka kwenye mtandao wako wa kawaida ukiwa umezima utumiaji data nje ya mtandao wa kawaida." "Iwashe" "Ukiruhusu data kupitia mitandao mingine, unaweza kupata gharama kubwa ya kupitia mitandao mingine!" - "Unaporuhusu data kupitia mitandao mingine, huenda ukatozwa gharama kubwa za matumizi ya nje!"\n\n"Mpangilio huu unaathiri watumiaji wote kwenye kompyuta hii ndogo." - "Unaporuhusu data kupitia mitandao mingine, huenda ukatozwa gharama kubwa za matumizi ya nje!"\n\n"Mpangilio huu unaathiri watumiaji wote kwenye simu hii." + "Unaporuhusu data kupitia mitandao mingine, huenda ukatozwa gharama kubwa za matumizi ya nje!\n\nMpangilio huu unaathiri watumiaji wote kwenye kompyuta hii ndogo." + "Unaporuhusu data kupitia mitandao mingine, huenda ukatozwa gharama kubwa za matumizi ya nje!\n\nMpangilio huu unaathiri watumiaji wote kwenye simu hii." "Ruhusu data kupitia mitandao mingine?" "Uchaguzi wa mtoa huduma" "Chagua mtoa huduma ya mtandao" @@ -324,8 +324,8 @@ "Unahitaji PIN yenye nambari au nenosiri ili kusimbua kompyuta yako kibao kila unapoiwasha" "Unahitaji PIN yenye nambari au nenosiri ili kusimbua simu yako kila unapoiwasha" "Usimbaji fiche" - "Unaweza kusimba akaunti zako, mipangilio, programu zilizopakuliwa na data yazo, vyombo vya habari na faili zingine. Ukisha simba kwenye kompyuta yako kibao, unahitaji kucharaza PIN ya nambari au nenosiri ili kuisimbua kila mara unapoiwasha. Huwezi kusimbua kompyuta yako kibao isipokuwa kwa kurejesha mipangilio ya kiwandani, na kufuta data yako yote."\n\n"Usimbaji fiche unachukua saa moja au zaidi. Lazima uanze na betri iliyo na chaji na uweke kompyuta yako kibao kwenye chaji mpaka usimbaji fiche ukamilike. Ukiingilia mchakato wa usimbaji fiche, utapoteza baadhi ya data au data yote." - "Unaweza kusimba akaunti zako, mipangilio, programu zilizopakiwa na data yao, vyombo vya habari na faili zingine. Ukisha simba kwenye simu yako, unahitaji kucharaza PIN ya nambari au nenosiri ili kuisimbua kila mara unapoiwasha. Huwezi kusimbua simu yako isipokuwa kwa kurejesha mipangilio ya kiwandani,na kufuta data yako yote"\n\n"Usimbaji fiche huchukua saa moja au zaidi. Lazima uanze na betri iliyo na chaji na uweke simu yako kwenye chaji mpaka usimbaji fiche ukamilike. Ukiingilia mchakato wa usimbaji fiche, utapoteza baadhi ya data au data yote." + "Unaweza kusimba akaunti zako, mipangilio, programu zilizopakuliwa na data yazo, vyombo vya habari na faili zingine. Ukisha simba kwenye kompyuta yako kibao, unahitaji kucharaza PIN ya nambari au nenosiri ili kuisimbua kila mara unapoiwasha. Huwezi kusimbua kompyuta yako kibao isipokuwa kwa kurejesha mipangilio ya kiwandani, na kufuta data yako yote.\n\nUsimbaji fiche unachukua saa moja au zaidi. Lazima uanze na betri iliyo na chaji na uweke kompyuta yako kibao kwenye chaji mpaka usimbaji fiche ukamilike. Ukiingilia mchakato wa usimbaji fiche, utapoteza baadhi ya data au data yote." + "Unaweza kusimba akaunti zako, mipangilio, programu zilizopakiwa na data yao, vyombo vya habari na faili zingine. Ukisha simba kwenye simu yako, unahitaji kucharaza PIN ya nambari au nenosiri ili kuisimbua kila mara unapoiwasha. Huwezi kusimbua simu yako isipokuwa kwa kurejesha mipangilio ya kiwandani,na kufuta data yako yote\n\nUsimbaji fiche huchukua saa moja au zaidi. Lazima uanze na betri iliyo na chaji na uweke simu yako kwenye chaji mpaka usimbaji fiche ukamilike. Ukiingilia mchakato wa usimbaji fiche, utapoteza baadhi ya data au data yote." "Simba kompyuta kibao kwa njia fiche" "Simba fiche simu" "Tafadhali chaji betri yako kisha ujaribu tena." @@ -341,8 +341,8 @@ "Jaribu tena baada ya sekunde ^1." "Andika nenosiri yako" "Usimbaji fiche haujafanikiwa" - "Usimbaji fiche umekatishwa na hauwezi kukamilika. Kutokana na hayo, data kwenye kompyuta yako kibao haiwezi kupatikana. "\n\n" Ili kuendelee kutumia kompyuta yako kibao, unahitaji kurejesha mipangilio ya kiwandani. Ukisha washa kompyuta yako kibao baada ya kurejesha, utakuwa na fursa ya kurejesha data yoyote iliyokuwa imechelezwa kwenye Akaunti yako ya Google." - "Usimbaji fiche umekatishwa na hauwezi kukamilika. Kutokana na hayo, data kwenye simu yako haziwezi kuonekana. "\n\n" Ili kuendelea kutumia simu yako, utahitaji urejesha mipangilio ya kiwandani. Utakapowasha simu yako baada ya kurejesha, utakuwa na fursa ya kurejesha data zozote ulizocheleza kwenye Akaunti yako ya Google." + "Usimbaji fiche umekatishwa na hauwezi kukamilika. Kutokana na hayo, data kwenye kompyuta yako kibao haiwezi kupatikana. \n\n Ili kuendelee kutumia kompyuta yako kibao, unahitaji kurejesha mipangilio ya kiwandani. Ukisha washa kompyuta yako kibao baada ya kurejesha, utakuwa na fursa ya kurejesha data yoyote iliyokuwa imechelezwa kwenye Akaunti yako ya Google." + "Usimbaji fiche umekatishwa na hauwezi kukamilika. Kutokana na hayo, data kwenye simu yako haziwezi kuonekana. \n\n Ili kuendelea kutumia simu yako, utahitaji urejesha mipangilio ya kiwandani. Utakapowasha simu yako baada ya kurejesha, utakuwa na fursa ya kurejesha data zozote ulizocheleza kwenye Akaunti yako ya Google." "Badili mbinu ya ingizo" "Mbinu ya kufunga skrini?" "Chagua kifungio cha hifadhi" @@ -506,6 +506,7 @@ "Inaunganisha" "Vimeunganishwa" "Inapatikana" + "Vinavyotumika" "Onyesha mipangilio" "Kata muunganisho?" "Hii itaukata muunganisho wako kwa:<br><b>%1$s</b>" @@ -524,7 +525,7 @@ "Imezimwa" "Hazipatikani kwa sababu NFC imezimwa" "Android Beam" - "Wakati kipengele hiki kimewashwa, unaweza kusambazia kifaa kingine chenye NFC maudhui ya programu kwa kushika vifaa vyote vikiwa kimekaribiana. Kwa mfano, unaweza kusambaza kurasa za kivinjari, videos za YouTube, anwani za Watu, na mengine. "\n" "\n"Shika vifaa vikiwa vimekaribiana (kawaida pande za nyuma zikiwa zimeangaliana) na kisha uguse skrini yako. Programu huamua cha kusambaza." + "Wakati kipengele hiki kimewashwa, unaweza kusambazia kifaa kingine chenye NFC maudhui ya programu kwa kushika vifaa vyote vikiwa kimekaribiana. Kwa mfano, unaweza kusambaza kurasa za kivinjari, videos za YouTube, anwani za Watu, na mengine. \n \nShika vifaa vikiwa vimekaribiana (kawaida pande za nyuma zikiwa zimeangaliana) na kisha uguse skrini yako. Programu huamua cha kusambaza." "Ugunduzi wa huduma ya mtandao" "Ruhusu programu kwenye vifaa vingine kugundua programu kwenye kifaa hiki" "Wi-Fi" @@ -612,7 +613,7 @@ "Umelindwa kwa %1$s" ", umelindwa kwa %1$s" "Hamna" - "Ili kuboresha usahihi wa mahali na kwa madhumuni mengine, %1$s inataka kuwasha ukaguaji mitandao, hata wakati Wi-Fi imezimwa."\n\n"Je, ungependa kuruhusu programu zote ambazo zingependa kukagua ziweza kufanya hivyo?" + "Ili kuboresha usahihi wa mahali na kwa madhumuni mengine, %1$s inataka kuwasha ukaguaji mitandao, hata wakati Wi-Fi imezimwa.\n\nJe, ungependa kuruhusu programu zote ambazo zingependa kukagua ziweza kufanya hivyo?" "Ruhusu" "Kataa" "Unganisha" @@ -624,8 +625,8 @@ "Ghairi" "Ruka t" "Usiruke" - "ILANI: Huenda ukatozwa gharama ya ziada ya data ya mtoa huduma."\n\n"Usanidi wa kompyuta ndogo unaweza kuhitaji huduma muhimu ya mtandao." - "ILANI: Huenda ukatozwa gharama ya ziada ya data ya mtoa huduma."\n\n"Usanidi wa simu unaweza kuhitaji huduma muhimu ya mtandao." + "ILANI: Huenda ukatozwa gharama ya ziada ya data ya mtoa huduma.\n\nUsanidi wa kompyuta ndogo unaweza kuhitaji huduma muhimu ya mtandao." + "ILANI: Huenda ukatozwa gharama ya ziada ya data ya mtoa huduma.\n\nUsanidi wa simu unaweza kuhitaji huduma muhimu ya mtandao." "ILANI:Hadi uwe na muunganisho wa intaneti, kompyuta kibao yako haitaweza kuthibitisha kuwa programu yako imesasishwa." "ILANI: Hadi uwe na muunganisho wa intaneti, simu haitaweza kuthibitisha kuwa programu yako imesasishwa." "Kompyuta ndogo haikuweza kuunganishwa kwenye mtandao huu wa Wi-Fi." @@ -765,9 +766,9 @@ "PIN ya SIM" "PIN si sahihi!" "PIN hazilingani" - "Hawezi kubadilika PIN. "\n" Inawezekana PIN si sahihi." + "Hawezi kubadilika PIN. \n Inawezekana PIN si sahihi." "Umefaulu kubadilisha PIN ya SIM" - "Hauwezi kubadilisha hali ya kifungio cha SIM kadi. "\n" Inawezekana PIN si sahihi." + "Hauwezi kubadilisha hali ya kifungio cha SIM kadi. \n Inawezekana PIN si sahihi." "Sawa" "Ghairi" "Hali ya kompyuta kibao" @@ -910,9 +911,9 @@ "Rejesha data ya kiwandani" "Futa data yote kwenye kompyuta ndoto" "Inafuta data yote katika simu" - "Hii itafuta data yote kutoka hifadhi yako iliyo ""ndani ya kompyuta kibao"", pamoja na:"\n" "\n" "
  • " Akaunti yako ya Google"
  • " "\n" "
  • "Data na mipangilio ya mfumo na programu"
  • " "\n" "
  • "Programu zilizopakuliwa"
  • - "Hii itafuta data yote kutoka hifadhi yako iliyo ""ndani ya simu"", pamoja na:"\n" "\n" "
  • "Akaunti yako ya Google"
  • " "\n" "
  • "Data na mipangilio ya mfumo na programu"
  • " "\n" "
  • "programu zilizopakuliwa"
  • - \n\n"Kwa sasa umeingia kwenye akaunti zifuatazo:"\n + "Hii itafuta data yote kutoka hifadhi yako iliyo ""ndani ya kompyuta kibao"", pamoja na:\n \n "
  • " Akaunti yako ya Google"
  • " \n "
  • "Data na mipangilio ya mfumo na programu"
  • " \n "
  • "Programu zilizopakuliwa"
  • + "Hii itafuta data yote kutoka hifadhi yako iliyo ""ndani ya simu"", pamoja na:\n \n "
  • "Akaunti yako ya Google"
  • " \n "
  • "Data na mipangilio ya mfumo na programu"
  • " \n "
  • "programu zilizopakuliwa"
  • + \n\n"Kwa sasa umeingia kwenye akaunti zifuatazo:\n"
  • "Muziki"
  • \n
  • "Picha"
  • \n
  • "data nyingine ya mtumiaji"
  • \n\n"Ili kufuta pia muziki, picha, na data zingine za mtumiaji, "" hifadhi ya "" inahitaji kufutwa." \n\n"Ili kufuta muziki, picha, na data zingine za mtumiaji, ""kadi ya"" inahitaji kufutwa." @@ -1099,7 +1100,7 @@ "Onyesha michakato iliyoakibishwa" "Weka upya mapendeleo ya programu" "Ungependa kuweka upya mapendeleo ya programu?" - "Hii itaweka upya mapendeleo yote ya:"\n\n" "
  • "Programu zilizolemazwa"
  • \n" "
  • "Arifa za programu iliyolemazwa"
  • \n" "
  • "Programu chaguo-msingi za vitendo"
  • \n" "
  • "Uzuiaji wa data ya usuli ya programu"
  • \n\n" Hutapoteza data yoyote ya programu."
    + "Hii itaweka upya mapendeleo yote ya:\n\n "
  • "Programu zilizolemazwa"
  • \n" "
  • "Arifa za programu iliyolemazwa"
  • \n" "
  • "Programu chaguo-msingi za vitendo"
  • \n" "
  • "Uzuiaji wa data ya usuli ya programu"
  • \n\n" Hutapoteza data yoyote ya programu."
    "Weka upya programu" "Dhibiti nafasi" "Kichujio" @@ -1234,9 +1235,7 @@ "Ili kubadili, bonyeza Dhibiti-Kiweka nafasi" "Chaguo-msingi" "Mpangilio wa kibodi" - "Kamusi ya mtumiaji" - "Kamusi binafsi" - "kamusi binafsi" + "Kamusi binafsi" "Ongeza" "Ongeza kwenye kamusi" @@ -1297,6 +1296,11 @@ "Jumuisha chaguo katika menyu ya nguvu kwa kupeleka ripoti ya hitilafu" "Weka skrini ikiwa imewashwa" "Skrini haitawahi kuzima wakati unachaji" + "Washa kumbukumbu ya Bluetooth HCI Snoop" + "Nasa pakiti zote za Bluetooth HCI katika faili" + "Chagua muda wa kuendesha" + "Chagua muda wa kuendesha" + "Fungua upya na ubadilishe muda wa kuendesha kutoka %1$s hadi %2$s?" "Ruhusu maeneo ya jaribio" "Ruhusu maeneo ya majaribio" "Ruhusu utatuaji USB?" @@ -1309,11 +1313,13 @@ "Linda hifadhi ya USB" "Sharti programu iombe ruhusa ili kusoma hifadhi ya USB" "Linda hifadhi ya USB?" - "Wakati hifadhi ya USB imelindwa, sharti programu ziombe ruhusa ya kusoma data kutoka kwenye hifadhi ya nje."\n\n"Baadhi ya programu zinawezakosa kufanya kazi hadi zisasishwe na wasanidi wake." + "Wakati hifadhi ya USB imelindwa, sharti programu ziombe ruhusa ya kusoma data kutoka kwenye hifadhi ya nje.\n\nBaadhi ya programu zinawezakosa kufanya kazi hadi zisasishwe na wasanidi wake." "Linda kadi ya SD" "Sharti programu iombe ruhusa ili kusoma kadi ya SD" "Linda kadi ya SD?" - "Wakati kadi ya SD imelindwa, sharti programu ziombe ruhusa ya kusoma data kutoka kwenye hifadhi ya nje."\n\n"Baadhi ya programu zinawezakosa kufanya kazi hadi zisasishwe na wasanidi wake." + "Wakati kadi ya SD imelindwa, sharti programu ziombe ruhusa ya kusoma data kutoka kwenye hifadhi ya nje.\n\nBaadhi ya programu zinawezakosa kufanya kazi hadi zisasishwe na wasanidi wake." + "Kituo cha karibu" + "Washa programu ya mwisho inayotoa ufikiaji mkuu wa karibu" "Chagua kitufe" "Chagua wijeti" "Unda wijeti na uruhusu ufikiaji?" @@ -1334,11 +1340,11 @@ "Huduma" "Mfumo" "Ishara za ukuzaji" - "Kipengele hiki kinapowashwa, unaweza kukuza na kufifiza kwa kugonga skrini mara tatu."\n\n"Unapokuwa umekuza, unaweza:"\n
    • "Kupindua: Vuta vidole viwili au zaidi kwenye skrini."
    • \n
    • "Rekebisha kiwango cha ukuzaji: Bana vidole viwili au zaidi pamoja au uzitawanye."
    \n\n"Pia unaweza kukuza hali, unaweza kuvuta kidole chako ili kuchunguza sehemu mbalimbali za skrini. Inua kidole chako ili kurejea kwenye hali yako ya awali."\n\n"Dokezo: Kugonga mara tatu ili kukuza hufanya kazi kila mahali isipokuwa kwenye kibodi na upau wa kubadilisha sehemu za skrini."
    + "Kipengele hiki kinapowashwa, unaweza kukuza na kufifiza kwa kugonga skrini mara tatu.\n\nUnapokuwa umekuza, unaweza:\n"
    • "Kupindua: Vuta vidole viwili au zaidi kwenye skrini."
    • \n
    • "Rekebisha kiwango cha ukuzaji: Bana vidole viwili au zaidi pamoja au uzitawanye."
    \n\n"Pia unaweza kukuza hali, unaweza kuvuta kidole chako ili kuchunguza sehemu mbalimbali za skrini. Inua kidole chako ili kurejea kwenye hali yako ya awali.\n\nDokezo: Kugonga mara tatu ili kukuza hufanya kazi kila mahali isipokuwa kwenye kibodi na upau wa kubadilisha sehemu za skrini."
    "Njia mkato ya ufikivu" "Imewashwa" "Imezimwa" - "Kipengele hiki kinapowashwa, unaweza kuwezesha haraka vipengele vya ufikivu kwa hatua mbili:"\n\n"Hatua ya 1: Bonyeza na ushikilie kitufe cha kuwasha/kuzima mpaka utakaposikia sauti au kuhisi mtetemo."\n\n"Hatua ya 2: Gusa na ushikilie vidole viwili mpaka utakaposikia uthibitishaji wa sauti."\n\n"Ikiwa kifaa kina watumiaji wengi, kuutumia mkato huu kwenye skrini ya kufunga kunawezesha ufikivu kwa muda mpaka kifaa kitakapofunguliwa." + "Kipengele hiki kinapowashwa, unaweza kuwezesha haraka vipengele vya ufikivu kwa hatua mbili:\n\nHatua ya 1: Bonyeza na ushikilie kitufe cha kuwasha/kuzima mpaka utakaposikia sauti au kuhisi mtetemo.\n\nHatua ya 2: Gusa na ushikilie vidole viwili mpaka utakaposikia uthibitishaji wa sauti.\n\nIkiwa kifaa kina watumiaji wengi, kuutumia mkato huu kwenye skrini ya kufunga kunawezesha ufikivu kwa muda mpaka kifaa kitakapofunguliwa." "Maandishi makubwa" "Ukuzaji wa skrini" "Sasisha otomatiki ukuzaji wa skrini" @@ -1360,6 +1366,16 @@ "TalkBack hutoa majibu yaliyosemwa ili kuwasaidia watumiaji vipofu na wenye-kuona kidogo. Je, unataka kuisanidi bure kutoka kwa Android Market?" "Hakuna maelezo yaliyotolewa." "Mipangilio" + "Kuchapisha" + "Mipangilio ya kuchapisha" + "Huduma" + "Je, ungependa kutumia %1$s ?" + "%1$s inaweza kupokea hati unazozichapisha. Hati kama hizo zinaweza kuwa na data nyeti." + "Hakuna huduma zilizosakinishwa" + "Mipangilio" + "Ongeza printa" + "Kimewashwa" + "Kimezimwa" "Betri" "Ni nini kimekuwa kikitumia betri" "Data ya matumizi ya betri haipatikani." @@ -1399,8 +1415,10 @@ "Inaendesha Wi-Fi" "Kompyuta kibao" "Simu" - "Data imetumwa" - "Data iliyopokewa" + "Daya ya kifaa cha mkononi imetumwa" + "Data ya kifaa cha mkononi imepokelewa" + "Data ya Wi‑Fi imetumwa" + "Data ya Wi‑Fi imepokelewa" "Kusikika" "Video" "Washa saa" @@ -1454,6 +1472,7 @@ "Giza" "Huadhiri hali ya maandishi yaliyosemwa" "Lugha" + "Lugha haijachaguliwa" "Huweka sauti maalum ya lugha inayolingana na yanayozungumzwa" "Sikiliza mfano" "Cheza onyesho fupi la usanisi usemaji" @@ -1588,7 +1607,7 @@ "EAP haiauniwi." "Huwezi kusanidi muunganisho wa EAP Wi-Fi wakati wa usanidi. Baada ya kusanidi, unaweza kufanya hivyo katika Mipangilio > mitandao isiyotumia waya." "Kuunganisha kunaweza kuchukua dakika chache..." - "Gusa""Inayofuata"" ili kuendelea na usanidi."\n\n"Gusa""Nyuma"" ili kuunganisha kwenye mtandao tofauti wa Wi-Fi." + "Gusa""Inayofuata"" ili kuendelea na usanidi.\n\nGusa""Nyuma"" ili kuunganisha kwenye mtandao tofauti wa Wi-Fi." "Kusawazisha kumelemazwa" "Kusawazisha kumelemazwa" "Hitilafu ya usawazishaji." @@ -1616,7 +1635,7 @@ "Gmail" "Kalenda" "Anwani" - "Karibu kwa usawazishi wa Google!"" "\n"Njia ya Google ya kusawazisha data ili kuruhusu ufikiaji wa anwani zako, miadi yako, na mengine kutoka mahali popote ulipo." + "Karibu kwa usawazishi wa Google!"" \nNjia ya Google ya kusawazisha data ili kuruhusu ufikiaji wa anwani zako, miadi yako, na mengine kutoka mahali popote ulipo." "Mipangilio ya kusawazisha programu" "Usawazishaji data" "Badilisha nenosiri" @@ -1670,8 +1689,7 @@ "Kiwango cha maoni ndani ya madirisha wakati yanatolewa na GPU" "Onyesha sasisho za safu za maunzi" "Angaza kijani safu za maunzi zinaposasisha" - "Onyesha utoaji zaidi wa GPU" - "Kutoka kwa bora hadi mbovu zaidi: samawati, kijani, nyekundu hafifu, nyekundu" + "Tatua uondoaji wa GPU" "Lemaza miekeleo ya HW" "Daima tumia GPU kwa mchanganyiko wa skrini" "Wezesha ufuatiliaji wa OpenGL" @@ -1732,11 +1750,11 @@ "Lemaza data ya usuli kwenye mitandao ya simu. Mitandao isiyo ya simu itatumika kama itapatikana." "Kuzuia data ya usuli kwa programu hii, kwanza weka kikomo cha data ya simu ya mkono." "Zuia data ya mandhari nyuma?" - "Kipengee hiki kinaweza kusababisha programu inayotegemea data ya usuli kuacha kufanya kazi wakati ni mitandao ya simu tu inayopatikana."\n\n"Unaweza kupata vidhibiti faafu zaidi vya matumizi ya data katika mipangilio inayopatikana ndani ya programu." + "Kipengee hiki kinaweza kusababisha programu inayotegemea data ya usuli kuacha kufanya kazi wakati ni mitandao ya simu tu inayopatikana.\n\nUnaweza kupata vidhibiti faafu zaidi vya matumizi ya data katika mipangilio inayopatikana ndani ya programu." "Kuzuia data za usuli inawezekana tu wakati umeweka kikomo cha data ya simu ya mkono." "Je, usawazishaji data kiotomatiki uwashwe?" - "Mabadiliko yote unayoyafanya katika akaunti zako kwenye wavuti yatanakiliwa kiotomatiki katika kompyuta kibao yako."\n\n"Baadhi ya akaunti pia zinaweza kunakili kiotomatiki mabadiliko yoyote unayoyafanya kwenye kompyuta kibao hadi kwenye wavuti. Akaunti ya Google hufanyakazi kwa namna hii."\n\n"Ili kuchagua ni aina zipi za taarifa za kusawazisha katika kila akaunti, nenda kwenye Mipangilio > Akaunti." - "Mabadiliko yote unayoyafanya katika akaunti zako kwenye wavuti yatanakiliwa kiotomatiki katika simu yako."\n\n"Baadhi ya akaunti pia zinaweza kunakili kiotomatiki mabadiliko yoyote unayoyafanya kwenye simu hadi katika wavuti. Akaunti ya Google hufanyakazi kwa namna hii."\n\n"Ili kuchagua aina zipi za taarifa za kusawazisha katika kila akaunti, nenda kwenye Mipangilio > Akaunti." + "Mabadiliko yote unayoyafanya katika akaunti zako kwenye wavuti yatanakiliwa kiotomatiki katika kompyuta kibao yako.\n\nBaadhi ya akaunti pia zinaweza kunakili kiotomatiki mabadiliko yoyote unayoyafanya kwenye kompyuta kibao hadi kwenye wavuti. Akaunti ya Google hufanyakazi kwa namna hii.\n\nIli kuchagua ni aina zipi za taarifa za kusawazisha katika kila akaunti, nenda kwenye Mipangilio > Akaunti." + "Mabadiliko yote unayoyafanya katika akaunti zako kwenye wavuti yatanakiliwa kiotomatiki katika simu yako.\n\nBaadhi ya akaunti pia zinaweza kunakili kiotomatiki mabadiliko yoyote unayoyafanya kwenye simu hadi katika wavuti. Akaunti ya Google hufanyakazi kwa namna hii.\n\nIli kuchagua aina zipi za taarifa za kusawazisha katika kila akaunti, nenda kwenye Mipangilio > Akaunti." "Je, usawazishaji data kiotomatiki uzimwe?" "Hii itahifadhi data na matumizi ya betri, lakini utahitajika kusawazisha kila akaunti wewe mwenyewe ili kukusanya taarifa ya hivi karibuni. Na hutapokea arifa wakati sasisho zinapotokea." "Tarehe iliyowekwa upya ya msururu wa matumizi" @@ -1745,12 +1763,12 @@ "Weka onyo kwa matumizi ya data" "Weka kikomo cha matumizi ya data" "inapunguza matumizi ya data" - "Muunganisho wako wa data ya simu utalemazwa wakati kiwango fulani kitafikiwa. "\n\n" Kwa kuwa matumizi ya data yanapimwa na kompyuta kibao yako, na mtoa huduma wako anaweza kuhesabu matumizi kwa njia tofauti, zingatia kutumia kiwango cha kutunza." - "Muunganisho wako wa data ya simu utalemazwa wakati kiwango kilichobainishwa kitafikiwa. "\n\n" Kwa kuwa matumizi ya data yanapimwa na simu yako, na mtoa huduma wako anaweza kuhesabu matumizi kwa njia tofauti, zingatia kutumia kiwango cha kutunza." + "Muunganisho wako wa data ya simu utalemazwa wakati kiwango fulani kitafikiwa. \n\n Kwa kuwa matumizi ya data yanapimwa na kompyuta kibao yako, na mtoa huduma wako anaweza kuhesabu matumizi kwa njia tofauti, zingatia kutumia kiwango cha kutunza." + "Muunganisho wako wa data ya simu utalemazwa wakati kiwango kilichobainishwa kitafikiwa. \n\n Kwa kuwa matumizi ya data yanapimwa na simu yako, na mtoa huduma wako anaweza kuhesabu matumizi kwa njia tofauti, zingatia kutumia kiwango cha kutunza." "Zuia data ya mandhari nyuma?" "Ukizuia data ya chini kwa chini ya vifaa vya mkononi, baadhi ya programu na huduma hazitafanya kazi mpaka uunganishe mtandao wa Wi-Fi." - "Ukizuia data ya chini kwa chini kwa vifaa vya mkonon, baadhi ya programu na huduma hazitafanya kazi isipokuwa uunganishwe kwenye mtandao wa Wi-Fi."\n\n"Mpangilio huu unawaathiri watumiaji wote kwenye kompyuta hii ndogo." - "Ukizuia data ya chini kwa chini kwa vifaa vya mkononi, baadhi ya programu na huduma hazitafanya kazi isipokuwa uunganishwe kwenye mtandao wa Wi-Fi."\n\n"Mpangilio huu unawaathiri watumiaji wote kwenye simu hii." + "Ukizuia data ya chini kwa chini kwa vifaa vya mkonon, baadhi ya programu na huduma hazitafanya kazi isipokuwa uunganishwe kwenye mtandao wa Wi-Fi.\n\nMpangilio huu unawaathiri watumiaji wote kwenye kompyuta hii ndogo." + "Ukizuia data ya chini kwa chini kwa vifaa vya mkononi, baadhi ya programu na huduma hazitafanya kazi isipokuwa uunganishwe kwenye mtandao wa Wi-Fi.\n\nMpangilio huu unawaathiri watumiaji wote kwenye simu hii." "^1"" ""^2"\n"onyo" "^1""^2"\n"kiwango" "Programu zilizoondolewa" @@ -1837,8 +1855,8 @@ "Mtumiaji" "Wasifu uliozuiwa" "Ongeza mtumiaji mpya" - "Unaweza kushiriki kifaa hiki na watu wengine kwa kuweka watumiaji wa ziada. Kila mtumiaji ana nafasi yake binafsi, ambayo anaweza kugeuza kumfaa kwa programu binafsi, pazia, na kadhalika. Watumiaji pia wanaweza kurekebisha mipangilio ya kompyuta ndogo kama Wi-Fi ambayo inaathiri kila mtu."\n\n"Baada ya kuweka mtumiaji mpya, mtu huyo anahitaji kupitia mchakato wa usanidi."\n\n"Mtumiaji yeyote anaweza kukubali idhini zilizosasishwa za programu kwa niaba ya watumiaji wengine wote." - "Baada ya kuweka mtumiaji mpya, mtu huyo anahitaji kupitia mchakato wa usanidi."\n\n"Mtumiaji yeyote anaweza kukubali ruhusa zilizosasishwa za programu kwa niaba ya watumiaji wengine wote." + "Unaweza kushiriki kifaa hiki na watu wengine kwa kuweka watumiaji wa ziada. Kila mtumiaji ana nafasi yake binafsi, ambayo anaweza kugeuza kumfaa kwa programu binafsi, pazia, na kadhalika. Watumiaji pia wanaweza kurekebisha mipangilio ya kompyuta ndogo kama Wi-Fi ambayo inaathiri kila mtu.\n\nBaada ya kuweka mtumiaji mpya, mtu huyo anahitaji kupitia mchakato wa usanidi.\n\nMtumiaji yeyote anaweza kukubali idhini zilizosasishwa za programu kwa niaba ya watumiaji wengine wote." + "Baada ya kuweka mtumiaji mpya, mtu huyo anahitaji kupitia mchakato wa usanidi.\n\nMtumiaji yeyote anaweza kukubali ruhusa zilizosasishwa za programu kwa niaba ya watumiaji wengine wote." "Sandi mtumiaji sasa?" "Hakikisha kuwa mtu wa kuchukua kompyuta ndogo na kusanidi nafasi yake yupo" "Ungependa kuweka wasifu sasa?" @@ -1869,6 +1887,9 @@ "Mpangilio huu unaathiri watumiaji wote kwenye simu hii." "Badilisha lugha" "Badilisha ukubwa wa fonti" + "Vikwazo" + "Ondoa vikwazo" + "Badilisha PIN" "Onyesha arifa" "Usaidizi" "Akaunti ya maudhui" diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml index 1374efdcbcd..4f4a221876b 100755 --- a/res/values-sw600dp/dimens.xml +++ b/res/values-sw600dp/dimens.xml @@ -24,7 +24,7 @@ 16dip 26dip 120sp - 60sp + 60dp 20% 10% 0dip diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml index 9f02164506d..6862690ac5a 100644 --- a/res/values-sw600dp/styles.xml +++ b/res/values-sw600dp/styles.xml @@ -44,6 +44,13 @@ 18sp + + + diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml new file mode 100644 index 00000000000..05914dfe0e3 --- /dev/null +++ b/res/values-sw720dp-land/dimens.xml @@ -0,0 +1,19 @@ + + + + + 150dp + diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index d6d91840eb7..9c6cc250b06 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -15,8 +15,9 @@ --> - @*android:dimen/preference_fragment_padding_side + 0dp 80dip 2 720dip + 32dp diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml index 324463daec2..1a68c7120a8 100644 --- a/res/values-th/arrays.xml +++ b/res/values-th/arrays.xml @@ -233,7 +233,8 @@ "ตำแหน่งที่ตั้ง" "ส่วนตัว" "การรับส่งข้อความ" - "อุปกรณ์" + "สื่อ" + "อุปกรณ์"
    "ตำแหน่งคร่าวๆ" @@ -267,6 +268,17 @@ "เล่นเสียง" "อ่านคลิปบอร์ด" "แก้ไขคลิปบอร์ด" + "ปุ่มสื่อ" + "โฟกัสอัตโนมัติ" + "ระดับเสียงหลัก" + "ระดับเสียงสนทนา" + "ระดับเสียงเรียกเข้า" + "ระดับเสียงของสื่อ" + "ระดับเสียงปลุก" + "ระดับเสียงการแจ้งเตือน" + "ระดับเสียงบลูทูธ" + "ทำงานตลอดเวลา" + "ตำแหน่งจอภาพ" "ตำแหน่ง" @@ -300,12 +312,33 @@ "เล่นเสียง" "อ่านคลิปบอร์ด" "แก้ไขคลิปบอร์ด" + "ปุ่มสื่อ" + "โฟกัสอัตโนมัติ" + "ระดับเสียงหลัก" + "ระดับเสียงสนทนา" + "ระดับเสียงเรียกเข้า" + "ระดับเสียงของสื่อ" + "ระดับเสียงปลุก" + "ระดับเสียงของการแจ้งเตือน" + "ระดับบลูทูธ" + "ทำงานตลอดเวลา" + "ตำแหน่ง" "สั้น" "ปานกลาง" "ยาว" + + "Dalvik" + "ART" + "ART (ดีบัก)" + + + "ใช้ Dalvik" + "ใช้ ART" + "ใช้บิวด์ดีบัก ART" + "ไม่ต้องตรวจสอบ" "ตรวจสอบเนื้อหา DRM เท่านั้น" @@ -367,6 +400,11 @@ "เป็นเส้นบนหน้าจอ" "ใน adb shell dumpsys gfxinfo" + + "ปิด" + "แสดงพื้นที่การวาดทับ" + "แสดงตัวนับการวาดทับ" + "ขีดจำกัดมาตรฐาน" "ไม่มีกระบวนการพื้นหลัง" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 719ee1042a9..844c428eea6 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -275,8 +275,8 @@ "การเชื่อมต่อข้อมูลของคุณหายไปเนื่องจากคุณออกจากเครือข่ายที่บ้านโดยปิดการโรมมิ่งข้อมูลไว้" "เปิด" "การอนุญาตการโรมมิ่งข้อมูล อาจทำให้คุณเสียค่าใช้จ่ายมาก!" - "เมื่อคุณอนุญาตการโรมมิ่งข้อมูล อาจมีการเรียกเก็บค่าใช้จ่ายเพิ่มเติมจำนวนมากในการโรมมิ่ง!"\n\n"การตั้งค่านี้ส่งผลต่อผู้ใช้แท็บเล็ตนี้ทุกราย" - "เมื่อคุณอนุญาตการโรมมิ่งข้อมูล อาจมีการเรียกเก็บค่าใช้จ่ายเพิ่มเติมจำนวนมากในการโรมมิ่ง!"\n\n"การตั้งค่านี้ส่งผลต่อผู้ใช้โทรศัพท์นี้ทุกราย" + "เมื่อคุณอนุญาตการโรมมิ่งข้อมูล อาจมีการเรียกเก็บค่าใช้จ่ายเพิ่มเติมจำนวนมากในการโรมมิ่ง!\n\nการตั้งค่านี้ส่งผลต่อผู้ใช้แท็บเล็ตนี้ทุกราย" + "เมื่อคุณอนุญาตการโรมมิ่งข้อมูล อาจมีการเรียกเก็บค่าใช้จ่ายเพิ่มเติมจำนวนมากในการโรมมิ่ง!\n\nการตั้งค่านี้ส่งผลต่อผู้ใช้โทรศัพท์นี้ทุกราย" "อนุญาตการโรมมิ่งข้อมูลหรือไม่" "การเลือกผู้ให้บริการ" "เลือกผู้ให้บริการเครือข่าย" @@ -322,8 +322,8 @@ "จำเป็นต้องใช้ PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสแท็บเล็ตของคุณทุกครั้งที่คุณเปิดเครื่อง" "จำเป็นต้องใช้ PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสโทรศัพท์ของคุณทุกครั้งที่คุณเปิดเครื่อง" "ที่เข้ารหัส" - "คุณสามารถเข้ารหัสบัญชี การตั้งค่า แอปพลิเคชันที่ดาวน์โหลดมาและข้อมูล สื่อ และไฟล์อื่นๆ ของแอปพลิเคชันนั้นได้ เมื่อคุณเข้ารหัสแท็บเล็ตแล้ว คุณจะต้องพิมพ์รหัส PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสในแต่ละครั้งที่คุณเปิดเครื่อง คุณไม่สามารถถอดรหัสแท็บเล็ตได้เว้นแต่จะทำการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น ซึ่งจะเป็นการลบข้อมูลทั้งหมด"\n\n"การเข้ารหัสใช้เวลาอย่างน้อยหนึ่งชั่วโมง คุณต้องเริ่มต้นด้วยการใช้แบตเตอรี่ที่ชาร์จไฟแล้วและเสียบปลั๊กแท็บเล็ตไว้จนกว่าการเข้ารหัสจะเสร็จสมบูรณ์ หากมีการขัดจังหวะกระบวนการเข้ารหัส คุณจะสูญเสียข้อมูลบางส่วนหรือทั้งหมดไป" - "คุณสามารถเข้ารหัสบัญชี การตั้งค่า แอปพลิเคชันที่ดาวน์โหลดมาและข้อมูล สื่อ และไฟล์อื่นๆ ของแอปพลิเคชันนั้นได้ เมื่อคุณเข้ารหัสโทรศัพท์แล้ว คุณจะต้องพิมพ์รหัส PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสในแต่ละครั้งที่คุณเปิดเครื่อง คุณไม่สามารถถอดรหัสโทรศัพท์ได้เว้นแต่จะรีเซ็ตข้อมูลเป็นค่าเริ่มต้น ซึ่งจะเป็นการลบข้อมูลทั้งหมด"\n\n"การเข้ารหัสใช้เวลาอย่างน้อยหนึ่งชั่วโมง คุณต้องเริ่มต้นด้วยการใช้แบตเตอรี่ที่ชาร์จไฟแล้วและเสียบปลั๊กโทรศัพท์ไว้จนกว่าการเข้ารหัสจะเสร็จสมบูรณ์ หากมีการขัดจังหวะกระบวนการเข้ารหัส คุณจะสูญเสียข้อมูลบางส่วนหรือทั้งหมดไป" + "คุณสามารถเข้ารหัสบัญชี การตั้งค่า แอปพลิเคชันที่ดาวน์โหลดมาและข้อมูล สื่อ และไฟล์อื่นๆ ของแอปพลิเคชันนั้นได้ เมื่อคุณเข้ารหัสแท็บเล็ตแล้ว คุณจะต้องพิมพ์รหัส PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสในแต่ละครั้งที่คุณเปิดเครื่อง คุณไม่สามารถถอดรหัสแท็บเล็ตได้เว้นแต่จะทำการรีเซ็ตข้อมูลเป็นค่าเริ่มต้น ซึ่งจะเป็นการลบข้อมูลทั้งหมด\n\nการเข้ารหัสใช้เวลาอย่างน้อยหนึ่งชั่วโมง คุณต้องเริ่มต้นด้วยการใช้แบตเตอรี่ที่ชาร์จไฟแล้วและเสียบปลั๊กแท็บเล็ตไว้จนกว่าการเข้ารหัสจะเสร็จสมบูรณ์ หากมีการขัดจังหวะกระบวนการเข้ารหัส คุณจะสูญเสียข้อมูลบางส่วนหรือทั้งหมดไป" + "คุณสามารถเข้ารหัสบัญชี การตั้งค่า แอปพลิเคชันที่ดาวน์โหลดมาและข้อมูล สื่อ และไฟล์อื่นๆ ของแอปพลิเคชันนั้นได้ เมื่อคุณเข้ารหัสโทรศัพท์แล้ว คุณจะต้องพิมพ์รหัส PIN หรือรหัสผ่านที่เป็นตัวเลขเพื่อถอดรหัสในแต่ละครั้งที่คุณเปิดเครื่อง คุณไม่สามารถถอดรหัสโทรศัพท์ได้เว้นแต่จะรีเซ็ตข้อมูลเป็นค่าเริ่มต้น ซึ่งจะเป็นการลบข้อมูลทั้งหมด\n\nการเข้ารหัสใช้เวลาอย่างน้อยหนึ่งชั่วโมง คุณต้องเริ่มต้นด้วยการใช้แบตเตอรี่ที่ชาร์จไฟแล้วและเสียบปลั๊กโทรศัพท์ไว้จนกว่าการเข้ารหัสจะเสร็จสมบูรณ์ หากมีการขัดจังหวะกระบวนการเข้ารหัส คุณจะสูญเสียข้อมูลบางส่วนหรือทั้งหมดไป" "เข้ารหัสแท็บเล็ต" "เข้ารหัสโทรศัพท์" "ชาร์จแบตเตอรี่และลองอีกครั้ง" @@ -339,8 +339,8 @@ "ลองใหม่อีกครั้งใน ^1 วินาที" "พิมพ์รหัสผ่านของคุณ" "การเข้ารหัสไม่สำเร็จ" - "การเข้ารหัสถูกขัดจังหวะและไม่สามารถดำเนินการให้เสร็จสิ้น คุณจึงไม่สามารถเข้าถึงข้อมูลในแท็บเล็ตได้อีกต่อไป"\n\n"ในการใช้งานแท็บเล็ตต่อ คุณต้องรีเซ็ตข้อมูลเป็นค่าเริ่มต้น เมื่อคุณตั้งค่าแท็บเล็ตหลังจากรีเซ็ตแล้ว คุณจะสามารถกู้คืนข้อมูลทั้งหมดที่มีการสำรองไว้ในบัญชี Google ของคุณได้" - "การเข้ารหัสถูกขัดจังหวะและไม่สามารถดำเนินการให้เสร็จสิ้น คุณจึงไม่สามารถเข้าถึงข้อมูลในโทรศัพท์ได้อีกต่อไป"\n\n"ในการใช้งานโทรศัพท์ต่อ คุณต้องรีเซ็ตข้อมูลเป็นค่าเริ่มต้น เมื่อคุณตั้งค่าโทรศัพท์หลังจากรีเซ็ตแล้ว คุณจะสามารถกู้คืนข้อมูลทั้งหมดที่มีการสำรองไว้ในบัญชี Google ของคุณได้" + "การเข้ารหัสถูกขัดจังหวะและไม่สามารถดำเนินการให้เสร็จสิ้น คุณจึงไม่สามารถเข้าถึงข้อมูลในแท็บเล็ตได้อีกต่อไป\n\nในการใช้งานแท็บเล็ตต่อ คุณต้องรีเซ็ตข้อมูลเป็นค่าเริ่มต้น เมื่อคุณตั้งค่าแท็บเล็ตหลังจากรีเซ็ตแล้ว คุณจะสามารถกู้คืนข้อมูลทั้งหมดที่มีการสำรองไว้ในบัญชี Google ของคุณได้" + "การเข้ารหัสถูกขัดจังหวะและไม่สามารถดำเนินการให้เสร็จสิ้น คุณจึงไม่สามารถเข้าถึงข้อมูลในโทรศัพท์ได้อีกต่อไป\n\nในการใช้งานโทรศัพท์ต่อ คุณต้องรีเซ็ตข้อมูลเป็นค่าเริ่มต้น เมื่อคุณตั้งค่าโทรศัพท์หลังจากรีเซ็ตแล้ว คุณจะสามารถกู้คืนข้อมูลทั้งหมดที่มีการสำรองไว้ในบัญชี Google ของคุณได้" "สลับวิธีการป้อนข้อมูล" "เลือกการล็อกหน้าจอ" "เลือกการล็อกข้อมูลสำรอง" @@ -514,6 +514,7 @@ "กำลังเชื่อมต่อ" "เชื่อมต่อแล้ว" "มีอยู่" + "กำลังใช้งาน" "การตั้งค่าการแสดงผล" "หากต้องการตัดการเชื่อมต่อ" "การทำเช่นนี้จะยุติการเชื่อมต่อของคุณกับ :<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "ปิด" "ใช้งานไม่ได้เนื่องจากปิด NFC อยู่" "Android Beam" - "เมื่อคุณลักษณะนี้เปิดอยู่ คุณสามารถส่งคลื่นสัญญาณของเนื้อหาของแอปพลิเคชันไปยังอุปกรณ์ที่สามารถใช้ NFC อีกอุปกรณ์หนึ่งได้โดยถืออุปกรณ์ไว้ใกล้กัน ตัวอย่างเช่น คุณสามารถส่งคลื่นสัญญาณของหน้าเบราว์เซอร์, วิดีโอ YouTube, ที่อยู่ติดต่อใน People และอื่นๆ"\n\n"เพียงแค่นำอุปกรณ์มาไว้ใกล้กัน (โดยปกติจะให้ด้านหลังชนกัน) จากนั้นแตะที่หน้าจอ แอปพลิเคชันจะตัดสินใจว่าจะรับคลื่นสัญญาณสำหรับสิ่งใด" + "เมื่อคุณลักษณะนี้เปิดอยู่ คุณสามารถส่งคลื่นสัญญาณของเนื้อหาของแอปพลิเคชันไปยังอุปกรณ์ที่สามารถใช้ NFC อีกอุปกรณ์หนึ่งได้โดยถืออุปกรณ์ไว้ใกล้กัน ตัวอย่างเช่น คุณสามารถส่งคลื่นสัญญาณของหน้าเบราว์เซอร์, วิดีโอ YouTube, ที่อยู่ติดต่อใน People และอื่นๆ\n\nเพียงแค่นำอุปกรณ์มาไว้ใกล้กัน (โดยปกติจะให้ด้านหลังชนกัน) จากนั้นแตะที่หน้าจอ แอปพลิเคชันจะตัดสินใจว่าจะรับคลื่นสัญญาณสำหรับสิ่งใด" "การค้นหาบริการเครือข่าย" "อนุญาตให้แอปพลิเคชันบนอุปกรณ์อื่นๆ สามารถค้นหาแอปพลิเคชันบนอุปกรณ์นี้ได้" "WiFi" @@ -620,7 +621,7 @@ "ป้องกันด้วย %1$s" " ป้องกันด้วย %1$s" "ไม่มี" - "เพื่อปรับปรุงความแม่นยำของตำแหน่ง และเพื่อวัตถุประสงค์อื่น ๆ %1$s ต้องการเปิดการสแกนเครือข่าย แม้ในขณะที่ไม่มี WiFi "\n" "\n" อนุญาตให้ดำเนินการนี้สำหรับแอปทั้งหมดที่ต้องการสแกนหรือไม่" + "เพื่อปรับปรุงความแม่นยำของตำแหน่ง และเพื่อวัตถุประสงค์อื่น ๆ %1$s ต้องการเปิดการสแกนเครือข่าย แม้ในขณะที่ไม่มี WiFi \n \n อนุญาตให้ดำเนินการนี้สำหรับแอปทั้งหมดที่ต้องการสแกนหรือไม่" "อนุญาต" "ปฏิเสธ" "เชื่อมต่อ" @@ -632,8 +633,8 @@ "ยกเลิก" "ข้ามไปเลย" "ไม่ข้าม" - "คำเตือน: การดำเนินการของคุณอาจมีค่าบริการเพิ่มเติมจากการใช้ข้อมูลของผู้ให้บริการ"\n\n"การตั้งค่าแท็บเล็ตอาจต้องใช้กิจกรรมเครือข่ายที่ใช้ปริมาณข้อมูลสูง" - "คำเตือน: การดำเนินการของคุณอาจมีค่าบริการเพิ่มเติมจากการใช้ข้อมูลของผู้ให้บริการ"\n\n"การตั้งค่าโทรศัพท์อาจต้องใช้กิจกรรมเครือข่ายที่ใ้ช้ปริมาณข้อมูลสูง" + "คำเตือน: การดำเนินการของคุณอาจมีค่าบริการเพิ่มเติมจากการใช้ข้อมูลของผู้ให้บริการ\n\nการตั้งค่าแท็บเล็ตอาจต้องใช้กิจกรรมเครือข่ายที่ใช้ปริมาณข้อมูลสูง" + "คำเตือน: การดำเนินการของคุณอาจมีค่าบริการเพิ่มเติมจากการใช้ข้อมูลของผู้ให้บริการ\n\nการตั้งค่าโทรศัพท์อาจต้องใช้กิจกรรมเครือข่ายที่ใ้ช้ปริมาณข้อมูลสูง" "คำเตือน: แท็บเล็ตจะไม่สามารถยืนยันได้ว่าซอฟต์แวร์ของคุณล่าสุดหรือไม่จนกว่าคุณจะมีการเชื่อมต่ออินเทอร์เน็ต" "คำเตือน: โทรศัพท์จะไม่สามารถยืนยันได้ว่าซอฟต์แวร์ของคุณล่าสุดหรือไม่จนกว่าคุณจะมีการเชื่อมต่ออินเทอร์เน็ต" "แท็บเล็ตไม่สามารถเชื่อมต่อกับเครือข่าย WiFi นี้" @@ -773,9 +774,9 @@ "PIN ของซิม" "PIN ไม่ถูกต้อง" "PIN ไม่ตรงกัน" - "ไม่สามารถเปลี่ยน PIN"\n"PIN อาจไม่ถูกต้อง" + "ไม่สามารถเปลี่ยน PIN\nPIN อาจไม่ถูกต้อง" "เปลี่ยนซิม PIN สำเร็จแล้ว" - "เปลี่ยนสถานะการล็อกซิมการ์ดไม่ได้"\n"PIN อาจไม่ถูกต้อง" + "เปลี่ยนสถานะการล็อกซิมการ์ดไม่ได้\nPIN อาจไม่ถูกต้อง" "ตกลง" "ยกเลิก" "สถานะแท็บเล็ต" @@ -918,9 +919,9 @@ "รีเซ็ตข้อมูลเป็นค่าเริ่มต้น" "ลบข้อมูลทั้งหมดบนแท็บเล็ต" "ลบข้อมูลทั้งหมดบนโทรศัพท์" - "การดำเนินการนี้จะลบข้อมูลทั้งหมดออกจาก""ที่จัดเก็บข้อมูลภายใน""ของแท็บเล็ตของคุณ ซึ่งประกอบด้วย"\n\n
  • "บัญชี Google ของคุณ"
  • \n
  • "ข้อมูลและการตั้งค่าของระบบและแอปพลิเคชัน"
  • \n
  • "แอปพลิเคชันที่ดาวน์โหลด"
  • - "การดำเนินการนี้จะลบข้อมูลทั้งหมดออกจาก""ที่จัดเก็บข้อมูลภายใน""ของโทรศัพท์ของคุณ ซึ่งประกอบด้วย"\n\n
  • "บัญชี Google ของคุณ"
  • \n
  • "ข้อมูลและการตั้งค่าของระบบและแอปพลิเคชัน"
  • \n
  • "แอปพลิเคชันที่ดาวน์โหลด"
  • - \n\n"ขณะนี้คุณได้ลงชื่อเข้าใช้บัญชีต่อไปนี้แล้ว:"\n + "การดำเนินการนี้จะลบข้อมูลทั้งหมดออกจาก""ที่จัดเก็บข้อมูลภายใน""ของแท็บเล็ตของคุณ ซึ่งประกอบด้วย\n\n"
  • "บัญชี Google ของคุณ"
  • \n
  • "ข้อมูลและการตั้งค่าของระบบและแอปพลิเคชัน"
  • \n
  • "แอปพลิเคชันที่ดาวน์โหลด"
  • + "การดำเนินการนี้จะลบข้อมูลทั้งหมดออกจาก""ที่จัดเก็บข้อมูลภายใน""ของโทรศัพท์ของคุณ ซึ่งประกอบด้วย\n\n"
  • "บัญชี Google ของคุณ"
  • \n
  • "ข้อมูลและการตั้งค่าของระบบและแอปพลิเคชัน"
  • \n
  • "แอปพลิเคชันที่ดาวน์โหลด"
  • + \n\n"ขณะนี้คุณได้ลงชื่อเข้าใช้บัญชีต่อไปนี้แล้ว:\n"
  • "เพลง"
  • \n
  • "รูปภาพ"
  • \n
  • "ข้อมูลผู้ใช้อื่นๆ"
  • \n\n"หากต้องการล้างข้อมูลเพลง รูปภาพ และข้อมูลผู้ใช้อื่นๆ จะต้องลบ""ที่จัดเก็บข้อมูล USB" \n\n"หากต้องการล้างข้อมูลเพลง รูปภาพ และข้อมูลผู้ใช้อื่นๆ คุณต้องลบ""การ์ด SD" @@ -1105,7 +1106,7 @@ "แสดงกระบวนการที่เก็บแคชไว้" "รีเซ็ตค่ากำหนดแอปพลิเคชัน" "รีเซ็ตค่ากำหนดแอปหรือไม่" - "คำสั่งนี้จะรีเซ็ตค่ากำหนดทั้งหมดของ:"\n\n
  • "แอปพลิเคชันที่ปิดใช้งาน"
  • \n
  • "การแจ้งเตือนของแอปพลิเคชันที่ปิดใช้งาน"
  • \n
  • "แอปพลิเคชันเริ่มต้นที่จะใช้งาน"
  • \n
  • "ข้อจำกัดของข้อมูลแบ็กกราวด์เกี่ยวกับการใช้แอปพลิเคชัน"
  • \n\n"ข้อมูลแอปพลิเคชันทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    + "คำสั่งนี้จะรีเซ็ตค่ากำหนดทั้งหมดของ:\n\n"
  • "แอปพลิเคชันที่ปิดใช้งาน"
  • \n
  • "การแจ้งเตือนของแอปพลิเคชันที่ปิดใช้งาน"
  • \n
  • "แอปพลิเคชันเริ่มต้นที่จะใช้งาน"
  • \n
  • "ข้อจำกัดของข้อมูลแบ็กกราวด์เกี่ยวกับการใช้แอปพลิเคชัน"
  • \n\n"ข้อมูลแอปพลิเคชันทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"
    "รีเซ็ตแอปพลิเคชัน" "จัดการพื้นที่" "ตัวกรอง" @@ -1240,9 +1241,7 @@ "หากต้องการสลับ กด Control-Spacebar" "ค่าเริ่มต้น" "รูปแบบแป้นพิมพ์" - "พจนานุกรมของผู้ใช้" - "พจนานุกรมส่วนบุคคล" - "พจนานุกรมส่วนบุคคล" + "พจนานุกรมส่วนตัว" "เพิ่ม" "เพิ่มลงในพจนานุกรม" @@ -1303,6 +1302,11 @@ "เพิ่มตัวเลือกในเมนูเปิดปิดสำหรับการใช้รายงานบั๊ก" "เปิดหน้าจอค้าง" "หน้าจอจะไม่เข้าสู่โหมดสลีปขณะชาร์จ" + "เปิดใช้งานบันทึกสอดแนมบลูทูธ HCI" + "บันทึกแพ็คเก็ตบลูทูธ HCI ทั้งหมดในไฟล์" + "เลือกรันไทม์" + "เลือกรันไทม์" + "รีบูตเพื่อเปลี่ยนรันไทม์จาก %1$s เป็น %2$s ไหม" "อนุญาตให้จำลองตำแหน่ง" "อนุญาตให้จำลองตำแหน่ง" "อนุญาตให้แก้ไขข้อบกพร่อง USB หรือไม่" @@ -1315,11 +1319,13 @@ "ปกป้องที่จัดเก็บข้อมูล USB" "แอปพลิเคชันต้องขออนุญาตในการอ่านที่จัดเก็บข้อมูล USB" "ปกป้อง USB หรือไม่" - "เมื่อที่จัดเก็บข้อมูล USB ได้รับการปกป้อง แอปพลิเคชันจะต้องขออนุญาตในการอ่านข้อมูลจากที่จัดเก็บข้อมูลภายนอก"\n\n"แอปพลิเคชันบางรายการอาจไม่ทำงานจนกว่าจะได้รับการอัปเดตโดยนักพัฒนาซอฟต์แวร์ของแอปพลิเคชันนั้นๆ" + "เมื่อที่จัดเก็บข้อมูล USB ได้รับการปกป้อง แอปพลิเคชันจะต้องขออนุญาตในการอ่านข้อมูลจากที่จัดเก็บข้อมูลภายนอก\n\nแอปพลิเคชันบางรายการอาจไม่ทำงานจนกว่าจะได้รับการอัปเดตโดยนักพัฒนาซอฟต์แวร์ของแอปพลิเคชันนั้นๆ" "ปกป้องการ์ด SD" "แอปพลิเคชันต้องขออนุญาตในการอ่านการ์ด SD" "ปกป้องการ์ด SD หรือไม่" - "เมื่อการ์ด SD ได้รับการปกป้อง แอปพลิเคชันจะต้องขออนุญาตในการอ่านข้อมูลจากที่จัดเก็บข้อมูลภายนอก"\n\n"แอปพลิเคชันบางรายการอาจไม่ทำงานจนกว่าจะได้รับการอัปเดตโดยนักพัฒนาซอฟต์แวร์ของแอปพลิเคชันนั้นๆ" + "เมื่อการ์ด SD ได้รับการปกป้อง แอปพลิเคชันจะต้องขออนุญาตในการอ่านข้อมูลจากที่จัดเก็บข้อมูลภายนอก\n\nแอปพลิเคชันบางรายการอาจไม่ทำงานจนกว่าจะได้รับการอัปเดตโดยนักพัฒนาซอฟต์แวร์ของแอปพลิเคชันนั้นๆ" + "เทอร์มินัลในตัวเครื่อง" + "เปิดใช้งานแอปเทอร์มินัลที่ให้การเข้าถึงเชลล์ในตัวเครื่อง" "เลือกแกดเจ็ต" "เลือกวิดเจ็ต" "สร้างวิดเจ็ตและอนุญาตการเข้าถึงหรือไม่" @@ -1340,11 +1346,11 @@ "บริการ" "ระบบ" "ท่าทางสัมผัสการขยาย" - "เมื่อเปิดคุณลักษณะนี้ คุณสามารถย่อและขยายด้วยการแตะสามครั้งบนหน้าจอ"\n\n"ขณะที่ขยายอยู่ คุณสามารถ:"\n
    • "แพน: ใช้อย่างน้อยสองนิ้วลากผ่านหน้าจอ"
    • \n
    • "ปรับระดับการย่อ/ขยาย: บีบหรือแยกอย่างน้อยสองนิ้วเพื่อปรับระดับ"
    \n\n"คุณยังสามารถขยายสิ่งที่นิ้วคุณแตะอยู่ชั่วคราวได้ด้วยการแตะสามครั้งค้างไว้ เมื่อขยายแล้ว คุณสามารถใช้นิ้วลากเพื่อดูส่วนต่างๆ ของหน้าจอได้ด้วย ยกนิ้วขึ้นเพื่อกลับไปยังสถานะก่อนหน้า"\n\n"หมายเหตุ: การแตะสามครั้งเพื่อขยายใช้ได้กับทุกส่วนยกเว้นแป้นพิมพ์และแถบนำทาง"
    + "เมื่อเปิดคุณลักษณะนี้ คุณสามารถย่อและขยายด้วยการแตะสามครั้งบนหน้าจอ\n\nขณะที่ขยายอยู่ คุณสามารถ:\n"
    • "แพน: ใช้อย่างน้อยสองนิ้วลากผ่านหน้าจอ"
    • \n
    • "ปรับระดับการย่อ/ขยาย: บีบหรือแยกอย่างน้อยสองนิ้วเพื่อปรับระดับ"
    \n\n"คุณยังสามารถขยายสิ่งที่นิ้วคุณแตะอยู่ชั่วคราวได้ด้วยการแตะสามครั้งค้างไว้ เมื่อขยายแล้ว คุณสามารถใช้นิ้วลากเพื่อดูส่วนต่างๆ ของหน้าจอได้ด้วย ยกนิ้วขึ้นเพื่อกลับไปยังสถานะก่อนหน้า\n\nหมายเหตุ: การแตะสามครั้งเพื่อขยายใช้ได้กับทุกส่วนยกเว้นแป้นพิมพ์และแถบนำทาง"
    "ทางลัดสำหรับการเข้าถึง" "เปิด" "ปิด" - "เมื่อเปิดคุณลักษณะนี้ไว้ คุณจะสามารถเปิดใช้งานคุณลักษณะการเข้าถึงได้อย่างรวดเร็วในสองขั้นตอน:"\n\n"ขั้นตอนที่ 1: กดปุ่มเปิด/ปิดค้างไว้จนกว่าจะได้ยินเสียงหรือรู้สึกว่าอุปกรณ์สั่น"\n\n"ขั้นตอนที่ 2: ใช้สองนิ้วแตะค้างไว้จนกว่าจะได้ยินเสียงยืนยัน"\n\n"หากมีผู้ใช้อุปกรณ์หลายคน การใช้ทางลัดนี้ในหน้าจอล็อกจะเป็นการเปิดใช้งานการเข้าถึงชั่วคราวจนกว่าจะปลดล็อกอุปกรณ์" + "เมื่อเปิดคุณลักษณะนี้ไว้ คุณจะสามารถเปิดใช้งานคุณลักษณะการเข้าถึงได้อย่างรวดเร็วในสองขั้นตอน:\n\nขั้นตอนที่ 1: กดปุ่มเปิด/ปิดค้างไว้จนกว่าจะได้ยินเสียงหรือรู้สึกว่าอุปกรณ์สั่น\n\nขั้นตอนที่ 2: ใช้สองนิ้วแตะค้างไว้จนกว่าจะได้ยินเสียงยืนยัน\n\nหากมีผู้ใช้อุปกรณ์หลายคน การใช้ทางลัดนี้ในหน้าจอล็อกจะเป็นการเปิดใช้งานการเข้าถึงชั่วคราวจนกว่าจะปลดล็อกอุปกรณ์" "ข้อความขนาดใหญ่" "การขยายหน้าจอ" "อัปเดตการขยายหน้าจอโดยอัตโนมัติ" @@ -1366,6 +1372,16 @@ "TalkBack มีการตอบสนองด้วยเสียงเพื่อช่วยเหลือผู้พิการทางสายตาและผู้มีปัญหาทางสายตา คุณต้องการติดตั้งแอปพลิเคชันฟรีนี้จาก Android Market หรือไม่" "ไม่มีคำอธิบาย" "การตั้งค่า" + "การพิมพ์" + "การตั้งค่าการพิมพ์" + "บริการ" + "ใช้ %1$s หรือไม่" + "%1$s สามารถรับเอกสารที่คุณพิมพ์ เอกสารดังกล่าวอาจมีข้อมูลละเอียดอ่อน" + "ไม่ได้ติดตั้งบริการใดไว้" + "การตั้งค่า" + "เพิ่มเครื่องพิมพ์" + "เปิด" + "ปิด" "แบตเตอรี่" "อะไรที่ใช้งานแบตเตอรี่อยู่" "ไม่มีข้อมูลการใช้แบตเตอรี่" @@ -1405,8 +1421,10 @@ "การใช้งาน WiFi" "แท็บเล็ต" "โทรศัพท์" - "ส่งข้อมูลแล้ว" - "ข้อมูลที่ได้รับ" + "ข้อมูลมือถือที่ส่ง" + "ข้อมูลมือถือที่ได้รับ" + "ข้อมูล WiFi ที่ส่ง" + "ข้อมูล WiFi ที่ได้รับ" "เสียง" "วิดีโอ" "เมื่อเวลา" @@ -1460,6 +1478,7 @@ "ความสูง-ต่ำของเสียง" "มีผลต่อโทนเสียงของข้อความที่พูด" "ภาษา" + "ไม่ได้เลือกภาษา" "ตั้งค่าเสียงในภาษาที่ระบุสำหรับข้อความที่ได้ยิน" "ฟังตัวอย่าง" "เล่นการสาธิตสั้นๆ เกี่ยวกับการสังเคราะห์เสียง" @@ -1594,7 +1613,7 @@ "ไม่สนับสนุน EAP" "คุณไม่สามารถกำหนดค่าการเชื่อมต่อ EAP WiFi ในขณะตั้งค่าได้ หลังจากการตั้งค่า คุณสามารถกำหนดค่าการเชื่อมต่อนี้ได้ในการตั้งค่า > ระบบไร้สายและเครือข่าย" "การเชื่อมต่ออาจใช้เวลาสักครู่..." - "แตะ ""ถัดไป"" เพื่อตั้งค่าต่อไป"\n\n"แตะ ""ย้อนกลับ"" เพื่อเชื่อมต่อกับเครือข่าย WiFi อื่น" + "แตะ ""ถัดไป"" เพื่อตั้งค่าต่อไป\n\nแตะ ""ย้อนกลับ"" เพื่อเชื่อมต่อกับเครือข่าย WiFi อื่น" "เปิดใช้งานการซิงค์แล้ว" "ปิดใช้งานการซิงค์แล้ว" "ข้อผิดพลาดในการซิงค์" @@ -1676,8 +1695,7 @@ "แฟลชมุมมองภายในหน้าต่างเมื่อวาดด้วย GPU" "แสดงอัปเดตเลเยอร์ฮาร์ดแวร์" "เลเยอร์ฮาร์ดแวร์กะพริบเป็นสีเขียวเมื่อมีการอัปเดต" - "แสดงการใช้ GPU มากเกินไป" - "จากดีที่สุดไปหาแย่ที่สุด: ฟ้า เขียว แดงอ่อน แดง" + "ดีบักการวาดทับ GPU" "ปิดใช้งานการวางซ้อน HW" "ใช้ GPU ในการจัดวางองค์ประกอบหน้าจอเสมอ" "เปิดใช้ร่องรอยใน OpenGL" @@ -1738,11 +1756,11 @@ "ปิดใช้งานข้อมูลแบ็กกราวด์บนเครือข่ายมือถือ จะใช้เครือข่ายอื่นหากมี" "ในการจำกัดข้อมูลแบ็กกราวด์ในแอปฯ ให้ตั้งขีดจำกัดข้อมูลมือถือก่อน" "ต้องการจำกัดข้อมูลแบ็กกราวด์หรือไม่" - "คุณลักษณะนี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยข้อมูลแบ็กกราวด์หยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้"\n\n"คุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" + "คุณลักษณะนี้อาจทำให้แอปพลิเคชันที่ต้องอาศัยข้อมูลแบ็กกราวด์หยุดทำงานเมื่อมีแต่เครือข่ายมือถือเท่านั้นที่ใช้งานได้\n\nคุณสามารถดูการควบคุมการใช้งานข้อมูลที่เหมาะสมกว่านี้ได้ในการตั้งค่าที่มีอยู่ภายในแอปพลิเคชัน" "การจำกัดข้อมูลแบ็กกราวด์ทำได้เมื่อคุณได้ตั้งค่าขีดจำกัดข้อมูลมือถือไว้เท่านั้น" "เปิดซิงค์ข้อมูลอัตโนมัติหรือไม่" - "การเปลี่ยนแปลงใดๆ ที่คุณทำกับบัญชีของคุณบนเว็บจะถูกคัดลอกไปยังแท็บเล็ตของคุณโดยอัตโนมัติ"\n\n"บางบัญชีอาจคัดลอกการเปลี่ยนแปลงทั้งหมดที่คุณดำเนินการบนแท็บเล็ตไปยังเว็บโดยอัตโนมัติ บัญชี Google ทำงานเช่นนี้"\n\n"หากต้องการเลือกว่าจะซิงค์ข้อมูลชนิดใดภายในแต่ละบัญชี ให้ไปที่การตั้งค่า > บัญชี" - "การเปลี่ยนแปลงใดๆ ที่คุณทำกับบัญชีของคุณบนเว็บจะถูกคัดลอกไปยังโทรศัพท์ของคุณโดยอัตโนมัติ"\n\n"บางบัญชีอาจคัดลอกการเปลี่ยนแปลงทั้งหมดที่คุณดำเนินการบนโทรศัพท์ไปยังเว็บโดยอัตโนมัติ บัญชี Google ทำงานเช่นนี้"\n\n"หากต้องการเลือกว่าจะซิงค์ข้อมูลชนิดใดภายในแต่ละบัญชี ให้ไปที่การตั้งค่า > บัญชี" + "การเปลี่ยนแปลงใดๆ ที่คุณทำกับบัญชีของคุณบนเว็บจะถูกคัดลอกไปยังแท็บเล็ตของคุณโดยอัตโนมัติ\n\nบางบัญชีอาจคัดลอกการเปลี่ยนแปลงทั้งหมดที่คุณดำเนินการบนแท็บเล็ตไปยังเว็บโดยอัตโนมัติ บัญชี Google ทำงานเช่นนี้\n\nหากต้องการเลือกว่าจะซิงค์ข้อมูลชนิดใดภายในแต่ละบัญชี ให้ไปที่การตั้งค่า > บัญชี" + "การเปลี่ยนแปลงใดๆ ที่คุณทำกับบัญชีของคุณบนเว็บจะถูกคัดลอกไปยังโทรศัพท์ของคุณโดยอัตโนมัติ\n\nบางบัญชีอาจคัดลอกการเปลี่ยนแปลงทั้งหมดที่คุณดำเนินการบนโทรศัพท์ไปยังเว็บโดยอัตโนมัติ บัญชี Google ทำงานเช่นนี้\n\nหากต้องการเลือกว่าจะซิงค์ข้อมูลชนิดใดภายในแต่ละบัญชี ให้ไปที่การตั้งค่า > บัญชี" "ปิดซิงค์ข้อมูลอัตโนมัติหรือไม่" "การกระทำดังกล่าวจะเป็นการประหยัดการใช้ข้อมูลและแบตเตอรี่ แต่คุณจะต้องซิงค์แต่ละบัญชีด้วยตนเองเพื่อรวบรวมข้อมูลล่าสุด และคุณจะไม่ได้รับการแจ้งเตือนเมื่อมีการอัปเดต" "วันที่รีเซ็ตรอบการใช้" @@ -1751,12 +1769,12 @@ "ตั้งค่าเตือนการใช้ข้อมูล" "ตั้งค่าขีดจำกัดการใช้ข้อมูล" "การจำกัดการใช้ข้อมูล" - "การเชื่อมต่อข้อมูลผ่านมือถือของคุณจะถูกปิดใช้งานเมื่อครบจำนวนจำกัดที่ระบุไว้"\n\n"เนื่องจากการใช้งานข้อมูลถูกวัดปริมาณด้วยแท็บเล็ตของคุณ และผู้ให้บริการของคุณอาจมีการบันทึกปริมาณการใช้งานที่แตกต่างออกไป ดังนั้น โปรดเลือกวิธีที่ปลอดภัย" - "การเชื่อมต่อข้อมูลผ่านมือถือของคุณจะถูกปิดใช้งานเมื่อครบจำนวนจำกัดที่ระบุไว้"\n\n"เนื่องจากการใช้งานข้อมูลถูกวัดปริมาณด้วยโทรศัพท์ของคุณ และผู้ให้บริการของคุณอาจมีการบันทึกปริมาณการใช้งานที่แตกต่างออกไป ดังนั้น โปรดเลือกวิธีที่ปลอดภัย" + "การเชื่อมต่อข้อมูลผ่านมือถือของคุณจะถูกปิดใช้งานเมื่อครบจำนวนจำกัดที่ระบุไว้\n\nเนื่องจากการใช้งานข้อมูลถูกวัดปริมาณด้วยแท็บเล็ตของคุณ และผู้ให้บริการของคุณอาจมีการบันทึกปริมาณการใช้งานที่แตกต่างออกไป ดังนั้น โปรดเลือกวิธีที่ปลอดภัย" + "การเชื่อมต่อข้อมูลผ่านมือถือของคุณจะถูกปิดใช้งานเมื่อครบจำนวนจำกัดที่ระบุไว้\n\nเนื่องจากการใช้งานข้อมูลถูกวัดปริมาณด้วยโทรศัพท์ของคุณ และผู้ให้บริการของคุณอาจมีการบันทึกปริมาณการใช้งานที่แตกต่างออกไป ดังนั้น โปรดเลือกวิธีที่ปลอดภัย" "ต้องการจำกัดข้อมูลแบ็กกราวด์หรือไม่" "หากคุณจำกัดข้อมูลแบ็กกราวด์บนมือถือ แอปพลิเคชันและบริการบางอย่างจะไม่ทำงานจนกว่าคุณจะเชื่อมต่อกับเครือข่าย WiFi" - "หากคุณจำกัดข้อมูลพื้นหลังของมือถือ แอปพลิเคชันและบริการบางอย่างจะไม่ทำงานเว้นแต่คุณจะเชื่อมต่อกับเครือข่าย WiFi"\n\n"การตั้งค่านี้ส่งผลต่อผู้ใช้แท็บเล็ตนี้ทุกราย" - "หากคุณจำกัดข้อมูลพื้นหลังของมือถือ แอปพลิเคชันและบริการบางอย่างจะไม่ทำงานเว้นแต่คุณจะเชื่อมต่อกับเครือข่าย WiFi"\n\n"การตั้งค่านี้ส่งผลต่อผู้ใช้โทรศัพท์นี้ทุกราย" + "หากคุณจำกัดข้อมูลพื้นหลังของมือถือ แอปพลิเคชันและบริการบางอย่างจะไม่ทำงานเว้นแต่คุณจะเชื่อมต่อกับเครือข่าย WiFi\n\nการตั้งค่านี้ส่งผลต่อผู้ใช้แท็บเล็ตนี้ทุกราย" + "หากคุณจำกัดข้อมูลพื้นหลังของมือถือ แอปพลิเคชันและบริการบางอย่างจะไม่ทำงานเว้นแต่คุณจะเชื่อมต่อกับเครือข่าย WiFi\n\nการตั้งค่านี้ส่งผลต่อผู้ใช้โทรศัพท์นี้ทุกราย" "^1""^2"\n"คำเตือน" "^1"" ""^2"\n"ขีดจำกัด" "แอปพลิเคชันที่นำออก" @@ -1843,8 +1861,8 @@ "ผู้ใช้" "โปรไฟล์ที่ถูกจำกัด" "เพิ่มผู้ใช้ใหม่" - "คุณสามารถใช้อุปกรณ์นี้ร่วมกับคนอื่นๆ ได้ด้วยการสร้างผู้ใช้เพิ่มเติม ผู้ใช้แต่ละคนมีพื้นที่ของตัวเอง ซึ่งพวกเขาสามารถกำหนดค่าด้วยแอปพลิเคชัน วอลเปเปอร์ของตนเอง และอื่นๆ นอกจากนี้ ผู้ใช้ยังสามารถปรับการตั้งค่าแท็บเล็ต เช่น WiFi ซึ่งจะส่งผลกระทบต่อทุกคน"\n\n"หลังจากที่คุณสร้างผู้ใช้ใหม่แล้ว ผู้ใช้รายนั้นๆ ต้องทำตามขั้นตอนในการตั้งค่า"\n\n"ผู้ใช้ทั้งหมดสามารถยอมรับการอนุญาตแอปพลิเคชันที่มีการอัปเดตในนามของผู้ใช้รายอื่นๆ ได้" - "หลังจากที่คุณสร้างผู้ใช้ใหม่แล้ว ผู้ใช้รายนั้นๆ ต้องทำตามขั้นตอนในการตั้งค่า"\n\n"ผู้ใช้ทั้งหมดสามารถยอมรับการอนุญาตแอปพลิเคชันที่มีการอัปเดตในนามของผู้ใช้รายอื่นๆ ได้" + "คุณสามารถใช้อุปกรณ์นี้ร่วมกับคนอื่นๆ ได้ด้วยการสร้างผู้ใช้เพิ่มเติม ผู้ใช้แต่ละคนมีพื้นที่ของตัวเอง ซึ่งพวกเขาสามารถกำหนดค่าด้วยแอปพลิเคชัน วอลเปเปอร์ของตนเอง และอื่นๆ นอกจากนี้ ผู้ใช้ยังสามารถปรับการตั้งค่าแท็บเล็ต เช่น WiFi ซึ่งจะส่งผลกระทบต่อทุกคน\n\nหลังจากที่คุณสร้างผู้ใช้ใหม่แล้ว ผู้ใช้รายนั้นๆ ต้องทำตามขั้นตอนในการตั้งค่า\n\nผู้ใช้ทั้งหมดสามารถยอมรับการอนุญาตแอปพลิเคชันที่มีการอัปเดตในนามของผู้ใช้รายอื่นๆ ได้" + "หลังจากที่คุณสร้างผู้ใช้ใหม่แล้ว ผู้ใช้รายนั้นๆ ต้องทำตามขั้นตอนในการตั้งค่า\n\nผู้ใช้ทั้งหมดสามารถยอมรับการอนุญาตแอปพลิเคชันที่มีการอัปเดตในนามของผู้ใช้รายอื่นๆ ได้" "ตั้งค่าผู้ใช้ในขณะนี้หรือไม่" "ตรวจสอบให้แน่ใจว่าบุคคลดังกล่าวจะสามารถนำแท็บเล็ตไปและตั้งค่าพื้นที่ของตน" "หากต้องการตั้งค่าโปรไฟล์ทันที" @@ -1875,6 +1893,9 @@ "การตั้งค่านี้ส่งผลต่อผู้ใช้โทรศัพท์นี้ทุกราย" "เปลี่ยนภาษา" "เปลี่ยนขนาดแบบอักษร" + "ข้อจำกัด" + "ลบข้อจำกัด" + "เปลี่ยน PIN" "แสดงการแจ้งเตือน" "ความช่วยเหลือ" "บัญชีสำหรับเนื้อหา" diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml index bf7da47e656..80985ae4e5c 100644 --- a/res/values-tl/arrays.xml +++ b/res/values-tl/arrays.xml @@ -233,7 +233,8 @@ "Lokasyon" "Personal" "Pagmemensahe" - "Device" + "Media" + "Device"
    "tinatayang lokasyon" @@ -267,6 +268,17 @@ "i-play ang audio" "basahin ang clipboard" "baguhin ang clipboard" + "mga button ng media" + "focus ng audio" + "master na volume" + "volume ng boses" + "volume ng ring" + "volume ng media" + "volume ng alarma" + "volume ng notification" + "volume ng bluetooth" + "panatilihing bukas" + "subaybayan ang lokasyon" "Lokasyon" @@ -300,12 +312,33 @@ "I-play ang audio" "Basahin ang clipboard" "Baguhin ang clipboard" + "Mga media button" + "Focus ng audio" + "Master volume" + "Volume ng boses" + "Volume ng pag-ring" + "Volume ng media" + "Volume ng alarm" + "Volume ng notification" + "Volume ng Bluetooth" + "Panatilihing bukas" + "Lokasyon" "Maikli" "Katamtaman" "Mahaba" + + "Dalvik" + "ART" + "ART (debug)" + + + "Gamitin ang Dalvik" + "Gamitin ang ART" + "Gamitin ang build sa pag-debug ng ART" + "Huwag kailanman suriin" "Suriin lang para sa nilalamang DRM" @@ -367,6 +400,11 @@ "Sa screen bilang mga linya" "Sa adb shell dumpsys gfxinfo" + + "I-off" + "Tingnan ang mga overdraw na bahagi" + "Ipakita ang overdraw na counter" + "Karaniwang limitasyon" "Walang mga proseso sa background" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 43541fdcff3..30f8865dfcf 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -275,8 +275,8 @@ "Nawala ang koneksyon ng data dahil iniwan mo ang iyong home network na naka-off ang roaming ng data." "I-on ito" "Kapag pinayagan mo ang roaming ng data, maaari kang magkamit ng makabuluhang mga pagsingil sa roaming!" - "Kapag papayagan mo ang roaming ng data, maaari kang magkaroon ng malalaking singilin sa roaming!"\n\n"Nakakaapekto ang setting na ito sa lahat ng user sa tablet na ito." - "Kapag papayagan mo ang roaming ng data, maaari kang magkaroon ng malalaking singilin sa roaming!"\n\n"Nakakaapekto ang setting na ito sa lahat ng user sa teleponong ito." + "Kapag papayagan mo ang roaming ng data, maaari kang magkaroon ng malalaking singilin sa roaming!\n\nNakakaapekto ang setting na ito sa lahat ng user sa tablet na ito." + "Kapag papayagan mo ang roaming ng data, maaari kang magkaroon ng malalaking singilin sa roaming!\n\nNakakaapekto ang setting na ito sa lahat ng user sa teleponong ito." "Payagan ang roaming ng data?" "Pagpipilian ng operator" "Pumili ng isang tagapagpatakbo ng network" @@ -322,8 +322,8 @@ "Humiling ng numerong PIN o password upang i-decrypt ang iyong tablet sa bawat oras na i-on mo ito" "Humiling ng numerong PIN o password upang i-decrypt ang iyong telepono sa bawat oras na i-on mo ito" "Na-encrypt" - "Maaari mong i-encrypt ang iyong mga account, setting, na-download na apps at data ng mga ito, media, at iba pang mga file. Sa sandaling ma-encrypt mo ang iyong tablet, kailangan mong mag-type ng numeric na PIN o password upang i-decrypt ito sa tuwing i-o-on mo ito. Hindi mo maaaring i-decrypt ang iyong tablet maliban sa pamamagitan ng pagsasagawa ng pag-reset ng factory data, na bubura sa lahat ng iyong data."\n\n"Tumatagal nang isang oras o higit pa ang pag-encrypt. Dapat kang magsimula nang may naka-charge na baterya at panatilihing naka-plug in ang iyong tablet hanggang sa makumpleto ang pag-encrypt. Kung aantalahin mo ang proseso ng pag-encrypt, mawawala mo ang ilan o lahat ng iyong data." - "Maaari mong i-encrypt ang iyong mga account, setting, na-download na apps at data ng mga ito, media, at iba pang mga file. Sa sandaling ma-encrypt mo ang iyong telepono, kailangan mong mag-type ng numeric na PIN o password upang i-decrypt ito sa tuwing i-o-on mo ito. Hindi mo maaaring i-decrypt ang iyong telepono maliban sa pamamagitan ng pagsasagawa ng pag-reset ng factory data, na bubura sa lahat ng iyong data."\n\n"Tumatagal nang isang oras o higit pa ang pag-encrypt. Dapat kang magsimula nang may naka-charge na baterya at panatilihing naka-plug in ang iyong telepono hanggang sa makumpleto ang pag-encrypt. Kung aantalahin mo ang proseso ng pag-encrypt, mawawala mo ang ilan sa o lahat ng iyong data." + "Maaari mong i-encrypt ang iyong mga account, setting, na-download na apps at data ng mga ito, media, at iba pang mga file. Sa sandaling ma-encrypt mo ang iyong tablet, kailangan mong mag-type ng numeric na PIN o password upang i-decrypt ito sa tuwing i-o-on mo ito. Hindi mo maaaring i-decrypt ang iyong tablet maliban sa pamamagitan ng pagsasagawa ng pag-reset ng factory data, na bubura sa lahat ng iyong data.\n\nTumatagal nang isang oras o higit pa ang pag-encrypt. Dapat kang magsimula nang may naka-charge na baterya at panatilihing naka-plug in ang iyong tablet hanggang sa makumpleto ang pag-encrypt. Kung aantalahin mo ang proseso ng pag-encrypt, mawawala mo ang ilan o lahat ng iyong data." + "Maaari mong i-encrypt ang iyong mga account, setting, na-download na apps at data ng mga ito, media, at iba pang mga file. Sa sandaling ma-encrypt mo ang iyong telepono, kailangan mong mag-type ng numeric na PIN o password upang i-decrypt ito sa tuwing i-o-on mo ito. Hindi mo maaaring i-decrypt ang iyong telepono maliban sa pamamagitan ng pagsasagawa ng pag-reset ng factory data, na bubura sa lahat ng iyong data.\n\nTumatagal nang isang oras o higit pa ang pag-encrypt. Dapat kang magsimula nang may naka-charge na baterya at panatilihing naka-plug in ang iyong telepono hanggang sa makumpleto ang pag-encrypt. Kung aantalahin mo ang proseso ng pag-encrypt, mawawala mo ang ilan sa o lahat ng iyong data." "I-encrypt ang tablet" "I-encrypt ang telepono" "I-charge ang iyong baterya at subukang muli." @@ -339,8 +339,8 @@ "Subukang muli sa loob ng ^1 (na) segundo." "I-type ang iyong password" "Hindi matagumpay ang pag-encrypt" - "Nagambala at hindi makumpleto ang pag-encrypt. Bilang resulta, hindi na maa-access ang data sa iyong telepono. "\n\n"Upang patuloy na magamit ang iyong tablet, kailangan mong magsagawa ng factory reset. Kapag na-set up mo ang iyong tablet pagkatapos ng pag-reset, magkakaroon ka ng pagkakataong magbalik ng anumang data na na-back up sa iyong Google Account." - "Nagambala at hindi makumpleto ang pag-encrypt. Bilang resulta, hindi na maa-access ang data sa iyong telepono. "\n\n"Upang patuloy na magamit ang iyong telepono, kailangan mong magsagawa ng factory reset. Kapag na-set up mo ang iyong telepono pagkatapos ng pag-reset, magkakaraoon ka ng pagkakataong magbalik ng anumang data na na-back up sa iyong Google Account." + "Nagambala at hindi makumpleto ang pag-encrypt. Bilang resulta, hindi na maa-access ang data sa iyong telepono. \n\nUpang patuloy na magamit ang iyong tablet, kailangan mong magsagawa ng factory reset. Kapag na-set up mo ang iyong tablet pagkatapos ng pag-reset, magkakaroon ka ng pagkakataong magbalik ng anumang data na na-back up sa iyong Google Account." + "Nagambala at hindi makumpleto ang pag-encrypt. Bilang resulta, hindi na maa-access ang data sa iyong telepono. \n\nUpang patuloy na magamit ang iyong telepono, kailangan mong magsagawa ng factory reset. Kapag na-set up mo ang iyong telepono pagkatapos ng pag-reset, magkakaraoon ka ng pagkakataong magbalik ng anumang data na na-back up sa iyong Google Account." "Magpalit ng pamamaraan ng pag-input" "Pumili ng screen lock" "Pumili ng backup na lock" @@ -514,6 +514,7 @@ "Kumokonekta" "Nakakonekta" "Available" + "Ginagamit" "Mga setting ng display" "Magdiskonekta?" "Tatapusin nito ang iyong koneksyon sa:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "I-off" "Hindi available dahil naka-off ang NFC" "Android Beam" - "Kapag in-on ang tampok na ito, maaari mong i-beam ang nilalaman ng app sa isa pang device na may kakayahan sa NFC sa pamamagitan ng paghawak sa mga device nang magkalapit. Halimbawa, maaari mong i-beam ang mga pahina sa Browser, video sa YouTube, contact sa People, at higit pa."\n\n"Paglapitin lamang ang mga device (karaniwang magkatalikuran) at pagkatapos ay pindutin ang iyong screen. Tinutukoy ng app kung ano ang nabi-beam." + "Kapag in-on ang tampok na ito, maaari mong i-beam ang nilalaman ng app sa isa pang device na may kakayahan sa NFC sa pamamagitan ng paghawak sa mga device nang magkalapit. Halimbawa, maaari mong i-beam ang mga pahina sa Browser, video sa YouTube, contact sa People, at higit pa.\n\nPaglapitin lamang ang mga device (karaniwang magkatalikuran) at pagkatapos ay pindutin ang iyong screen. Tinutukoy ng app kung ano ang nabi-beam." "Pagtuklas sa serbisyo ng network" "Payagan ang apps sa iba pang mga device na tumuklas ng apps sa device na ito" "Wi‑Fi" @@ -620,7 +621,7 @@ "Naka-secure gamit ang %1$s" ", naka-secure gamit ang %1$s" "Wala" - "Upang mapahusay ang katumpakan ng lokasyon at para sa iba pang mga layunin, gustong i-on ng %1$s ang pag-scan ng network, kahit na naka-off ang Wi-Fi."\n\n"Payagan ito para sa lahat ng apps na gustong mag-scan?" + "Upang mapahusay ang katumpakan ng lokasyon at para sa iba pang mga layunin, gustong i-on ng %1$s ang pag-scan ng network, kahit na naka-off ang Wi-Fi.\n\nPayagan ito para sa lahat ng apps na gustong mag-scan?" "Payagan" "Tanggihan" "Kumonekta" @@ -632,8 +633,8 @@ "Kanselahin" "Laktawan pa rin" "Huwag laktawan" - "BABALA: Maaari kang makaipon ng karagdagang mga singil sa data ng carrier."\n\n"Maaaring mangailangan ng malaking aktibidad ng network ang pag-setup ng tablet." - "BABALA: Maaari kang makaipon ng karagdagang mga singil sa data ng carrier."\n\n"Maaaring mangailangan ng malaking aktibidad ng network ang pag-setup ng telepono." + "BABALA: Maaari kang makaipon ng karagdagang mga singil sa data ng carrier.\n\nMaaaring mangailangan ng malaking aktibidad ng network ang pag-setup ng tablet." + "BABALA: Maaari kang makaipon ng karagdagang mga singil sa data ng carrier.\n\nMaaaring mangailangan ng malaking aktibidad ng network ang pag-setup ng telepono." "BABALA: Hangga\'t wala ka pang koneksyon sa internet, hindi mabe-verify ng tablet na napapanahon ang iyong software." "BABALA: Hangga\'t wala ka pang koneksyon sa internet, hindi mabe-verify ng telepono na napapanahon ang iyong software." "Hindi nakakonekta sa Wi-Fi network na ito ang tablet." @@ -773,9 +774,9 @@ "SIM PIN" "Maling PIN" "Hindi tugma ang mga PIN" - "Hindi mapalitan ang PIN."\n"Posibleng maling PIN." + "Hindi mapalitan ang PIN.\nPosibleng maling PIN." "Matagumpay na binago ang PIN ng SIM" - "Hindi mabago ang katayuan ng lock ng SIM card."\n"Posibleng maling PIN." + "Hindi mabago ang katayuan ng lock ng SIM card.\nPosibleng maling PIN." "OK" "Kanselahin" "Katayuan ng tablet" @@ -918,9 +919,9 @@ "I-reset ang data ng factory" "Binubura ang lahat ng data sa tablet" "Binubura ang lahat ng data sa telepono" - "Buburahin nito ang lahat ng data mula sa ""panloob na storage"" ng iyong tablet, kabilang ang:"\n\n
  • "Iyong Google account"
  • \n
  • "System at data ng app at mga setting"
  • \n
  • "Na-download na apps"
  • - "Buburahin nito ang lahat ng data mula sa ""panloob na storage"" ng iyong telepono, kabilang ang:"\n\n
  • "Iyong Google account"
  • \n
  • "System at data ng app at mga setting"
  • \n
  • "Na-download na apps"
  • - \n\n"Kasalukuyan kang naka-sign in sa mga sumusunod na account:"\n + "Buburahin nito ang lahat ng data mula sa ""panloob na storage"" ng iyong tablet, kabilang ang:\n\n"
  • "Iyong Google account"
  • \n
  • "System at data ng app at mga setting"
  • \n
  • "Na-download na apps"
  • + "Buburahin nito ang lahat ng data mula sa ""panloob na storage"" ng iyong telepono, kabilang ang:\n\n"
  • "Iyong Google account"
  • \n
  • "System at data ng app at mga setting"
  • \n
  • "Na-download na apps"
  • + \n\n"Kasalukuyan kang naka-sign in sa mga sumusunod na account:\n"
  • "Musika"
  • \n
  • "Mga Larawan"
  • \n
  • "Ibang data ng user"
  • \n\n"Upang i-clear ang musika, mga larawan, at iba pang data ng user, kailangang mabura ang ""USB storage""." \n\n"Upang i-clear ang musika, mga larawan, at ibang data ng user, kailangang mabura ang ""SD card""." @@ -1105,7 +1106,7 @@ "Ipakita na-cache proseso" "I-reset kagustuhan sa app" "I-reset ang gusto sa app?" - "Ire-reset nito ang lahat ng kagustuhan para sa:"\n\n" "
  • "Hindi pinapaganang apps"
  • \n" "
  • "Mga notification ng hindi pinapaganang app"
  • \n" "
  • "Mga default na application para sa mga pagkilos"
  • \n" "
  • "Paghihigpit sa data sa background para sa apps"
  • \n\n" Hindi ka mawawalan ng anumang data ng app."
    + "Ire-reset nito ang lahat ng kagustuhan para sa:\n\n "
  • "Hindi pinapaganang apps"
  • \n" "
  • "Mga notification ng hindi pinapaganang app"
  • \n" "
  • "Mga default na application para sa mga pagkilos"
  • \n" "
  • "Paghihigpit sa data sa background para sa apps"
  • \n\n" Hindi ka mawawalan ng anumang data ng app."
    "I-reset ang apps" "Pamahalaan ang espasyo" "I-filter" @@ -1240,9 +1241,7 @@ "Para palit, pindot Control-Spacebar" "Default" "Mga layout ng keyboard" - "Diksyunaryo ng user" - "Personal na diksyunaryo" - "Personal na mga diksyunaryo" + "Personal na diksyunaryo" "Magdagdag" "Idagdag sa diksyunaryo" @@ -1303,6 +1302,11 @@ "Isama ang pagpipilian sa menu ng power para sa pagkuha ng ulat sa bug" "Manatiling gumagana" "Hindi kailanman hihinto ang screen kapag kinakargahan" + "I-enable ang Bluetooth HCI snoop log" + "I-capture ang lahat ng bluetooth HCI packet sa isang file" + "Piliin ang runtime" + "Piliin ang runtime" + "I-reboot upang baguhin ang runtime mula sa %1$s patungo sa %2$s?" "Payagan ang mga kunwaring lokasyon" "Payagan ang mga kunwaring lokasyon" "Payagan ang pag-debug ng USB?" @@ -1315,11 +1319,13 @@ "Protektahan ang USB storage" "Dapat humiling ng pahintulot ang apps na basahin ang USB storage" "Protektahan ang USB storage?" - "Kapag pinoprotektahan ang USB storage, dapat na humiling ng pahintulot ang apps na magbasa ng data mula sa panlabas na storage."\n\n"Maaaring hindi gumana ang ilang apps hanggang sa ma-update ng mga developer ng mga ito." + "Kapag pinoprotektahan ang USB storage, dapat na humiling ng pahintulot ang apps na magbasa ng data mula sa panlabas na storage.\n\nMaaaring hindi gumana ang ilang apps hanggang sa ma-update ng mga developer ng mga ito." "Protektahan ang SD card" "Dapat na humiling ng pahintulot ang apps na basahin ang SD card" "Protektahan ang SD card?" - "Kapag pinoprotektahan ang SD card, dapat na humiling ng pahintulot ang apps na magbasa ng data mula sa panlabas na storage."\n\n"Maaaring hindi gumana ang ilang apps hanggang sa ma-update ng mga developer ng mga ito." + "Kapag pinoprotektahan ang SD card, dapat na humiling ng pahintulot ang apps na magbasa ng data mula sa panlabas na storage.\n\nMaaaring hindi gumana ang ilang apps hanggang sa ma-update ng mga developer ng mga ito." + "Lokal na terminal" + "Paganahin ang terminal app na nag-aalok ng lokal na shell access" "Pumili ng gadget" "Pumili ng widget" "Likhain ang widget at payagan ang access?" @@ -1340,11 +1346,11 @@ "Mga Serbisyo" "System" "Mga galaw sa pag-magnify" - "Kapag naka-on ang tampok na ito, maaari kang mag-zoom in at out sa pamamagitan ng pag-tap sa screen nang tatlong beses."\n\n"Habang naka-zoom in, maaari kang:"\n
    • "Mag-pan: I-drag ang dalawa o higit pang mga daliri sa screen."
    • \n
    • "Ayusin ang antas ng pag-zoom: I-pinch ang dalawa o higit pang daliri o paghiwalayin ang mga ito."
    \n\n"Maaari mo ring pansamantalang i-magnify kung ano ang nasa ilalim ng iyong mga daliri sa pamamagitan ng pag-tap nang tatlong beses at pagpindot nang matagal. Sa antas na naka-magnify, maaari mong i-drag ang iyong daliri upang maggalugad sa iba\'t ibang mga bahagi ng screen. Angatin ang iyong daliri upang bumalik sa iyong nakaraang katayuan."\n\n"Tandaan: Gumagana saanman ang pag-tap nang tatlong beses para sa pag-magnify maliban sa keyboard at navigation bar."
    + "Kapag naka-on ang tampok na ito, maaari kang mag-zoom in at out sa pamamagitan ng pag-tap sa screen nang tatlong beses.\n\nHabang naka-zoom in, maaari kang:\n"
    • "Mag-pan: I-drag ang dalawa o higit pang mga daliri sa screen."
    • \n
    • "Ayusin ang antas ng pag-zoom: I-pinch ang dalawa o higit pang daliri o paghiwalayin ang mga ito."
    \n\n"Maaari mo ring pansamantalang i-magnify kung ano ang nasa ilalim ng iyong mga daliri sa pamamagitan ng pag-tap nang tatlong beses at pagpindot nang matagal. Sa antas na naka-magnify, maaari mong i-drag ang iyong daliri upang maggalugad sa iba\'t ibang mga bahagi ng screen. Angatin ang iyong daliri upang bumalik sa iyong nakaraang katayuan.\n\nTandaan: Gumagana saanman ang pag-tap nang tatlong beses para sa pag-magnify maliban sa keyboard at navigation bar."
    "Shortcut sa pagiging naa-access" "I-on" "I-off" - "Kapag naka-on ang tampok na ito, mabilis mong mapapagana ang mga tampok ng accessibility sa dalawang hakbang:"\n\n"Hakbang 1: Pindutin nang matagal ang power button hanggang sa may marinig kang tunog o maramdamang vibration."\n\n"Hakbang 2: Pindutin nang matagal gamit ang dalawang daliri hanggang sa makarinig ka ng kumpirmasyong audio."\n\n"Kung marami ang user ng device, pansamantalang pinapagana ng paggamit sa shortcut na ito sa lock screen ang accessibility hanggang sa ma-unlock ang device." + "Kapag naka-on ang tampok na ito, mabilis mong mapapagana ang mga tampok ng accessibility sa dalawang hakbang:\n\nHakbang 1: Pindutin nang matagal ang power button hanggang sa may marinig kang tunog o maramdamang vibration.\n\nHakbang 2: Pindutin nang matagal gamit ang dalawang daliri hanggang sa makarinig ka ng kumpirmasyong audio.\n\nKung marami ang user ng device, pansamantalang pinapagana ng paggamit sa shortcut na ito sa lock screen ang accessibility hanggang sa ma-unlock ang device." "Malaking teksto" "Pag-magnify ng screen" "I-auto update pag-magnify ng screen" @@ -1366,6 +1372,16 @@ "Nagbibigay ang TalkBack ng pasalitang feedback upang matulungan ang mga user na bulag at may mahinang paningin. Nais mo ba itong i-install nang libre mula sa Android Market?" "Walang ibinigay na paglalarawan." "Mga Setting" + "Pag-print" + "Mga setting ng pag-print" + "Mga Serbisyo" + "Gumamit ng %1$s?" + "Makakatanggap ang %1$s ng mga dokumentong pini-print mo. Maaaring maglaman ang mga naturang dokumento ng sensitibong data." + "Walang mga naka-install na serbisyo" + "Mga Setting" + "Magdagdag ng mga printer" + "Naka-on" + "Naka-off" "Baterya" "Ano ang gumagamit ng baterya" "Di avail data ng gmit baterya." @@ -1405,8 +1421,10 @@ "Tumatakbo ang Wi-Fi" "Tablet" "Telepono" - "Ipinadala ang data" - "Natanggap na data" + "Naipadala ang data sa mobile" + "Natanggap ang data sa mobile" + "Naipadala ang data ng Wi‑Fi" + "Natanggap ang data ng Wi‑Fi" "Audio" "Video" "Naka-on ang oras" @@ -1460,6 +1478,7 @@ "Pitch" "Naaapektuhan ang tono ng tekstong sinasabi" "Wika" + "Walang napiling wika" "Itinatakda ang boses na partikular sa wika para sa sinasambit na teksto" "Makinig sa isang halimbawa" "Mag-play ng maikling pagpapakita ng speech synthesis" @@ -1594,7 +1613,7 @@ "Hindi sinusuportahan ang EAP." "Hindi ka makakapag-configure ng koneksyong EAP Wi-Fi sa panahon ng pag-setup. Pagkatapos ng pag-setup, magagawa mo iyon sa Mga Setting > Wireless at mga network." "Maaaring tumagal nang ilang minuto ang pagkonekta…" - "Pindutin ang ""Susunod"" upang magpatuloy sa pag-setup."\n\n"Pindutin ang ""Bumalik"" upang kumonekta sa ibang Wi-Fi network." + "Pindutin ang ""Susunod"" upang magpatuloy sa pag-setup.\n\nPindutin ang ""Bumalik"" upang kumonekta sa ibang Wi-Fi network." "Pinapagana ang sync" "Hindi pinapagana ang pag-sync" "Error sa pag-sync." @@ -1622,7 +1641,7 @@ "Gmail" "Kalendaryo" "Mga Contact" - "Maligayang pagdating sa Google sync!"" "\n"Isang paraan ng Google sa pag-sync ng data upang payagan ang access sa iyong mga contact, appointment, at higit pa nasaan ka man." + "Maligayang pagdating sa Google sync!"" \nIsang paraan ng Google sa pag-sync ng data upang payagan ang access sa iyong mga contact, appointment, at higit pa nasaan ka man." "Mga setting ng pag-sync ng app" "Data at pag-synchronize" "Palitan ang password" @@ -1676,8 +1695,7 @@ "I-flash ang view sa windows kapag ginuhit sa GPU" "Pakita upd hardware layer" "I-flash berde hardware layer pag nag-update ito" - "Ipakita overdraw ng GPU" - "Maganda-di maganda: asul, berde, light red, pula" + "I-debug ang GPU overdraw" "Wag paganahin HW overlay" "Laging gamitin ang GPU para sa screen compositing" "Paganahin trace ng OpenGL" @@ -1738,11 +1756,11 @@ "Wg pgnhin bckgrnd data mble ntwrk. Ggmit non-mble ntwrk kng mrn." "Upang paghigpitan ang data ng background para sa app na ito, magtakda muna ng isang limitasyon sa mobile data." "Paghigpitan ang data ng background?" - "Ang tampok na ito ay maaaring maging sanhi ng pagtigil ng app na nakadepende sa data ng background kapag mga mobile network lang ang available."\n\n"Maaari kang makahanap ng higit pang naaangkop na mga kontrol sa paggamit ng data sa mga setting na available sa loob ng app." + "Ang tampok na ito ay maaaring maging sanhi ng pagtigil ng app na nakadepende sa data ng background kapag mga mobile network lang ang available.\n\nMaaari kang makahanap ng higit pang naaangkop na mga kontrol sa paggamit ng data sa mga setting na available sa loob ng app." "Posible lamang ang paghihigpit sa data ng background kapag nagtakda ka ng isang limitasyon sa mobile data." "I-on ang pag-auto-sync ng data?" - "Awtomatikong makokopya sa iyong tablet ang anumang pagbabagong ginawa mo sa iyong mga account sa web."\n\n"Awtomatiko ring kinokopya ng ilang account ang anumang pagbabagong ginawa mo sa tablet sa web. Gumagana sa ganitong paraan ang isang Google Account."\n\n"Upang piliin kung aling uri ng impormasyon ang isi-snyc sa loob ng bawat account, pumunta sa Mga Setting at Account." - "Awtomatikong makokopya sa iyong telepono ang anumang mga pagbabagong gagawin mo sa iyong mga account sa web."\n\n"Maaaring awtomatiko ring kopyahin ng ilang account ang anumang mga pagbabagong gagawin mo sa telepono sa web. Gumagana sa ganitong paraan ang isang Google Account."\n\n"Upang piliin kung aling mga uri ng impormasyon ang isi-snyc sa loob ng bawat account, pumunta sa Mga Setting at Account." + "Awtomatikong makokopya sa iyong tablet ang anumang pagbabagong ginawa mo sa iyong mga account sa web.\n\nAwtomatiko ring kinokopya ng ilang account ang anumang pagbabagong ginawa mo sa tablet sa web. Gumagana sa ganitong paraan ang isang Google Account.\n\nUpang piliin kung aling uri ng impormasyon ang isi-snyc sa loob ng bawat account, pumunta sa Mga Setting at Account." + "Awtomatikong makokopya sa iyong telepono ang anumang mga pagbabagong gagawin mo sa iyong mga account sa web.\n\nMaaaring awtomatiko ring kopyahin ng ilang account ang anumang mga pagbabagong gagawin mo sa telepono sa web. Gumagana sa ganitong paraan ang isang Google Account.\n\nUpang piliin kung aling mga uri ng impormasyon ang isi-snyc sa loob ng bawat account, pumunta sa Mga Setting at Account." "I-off ang pag-auto-sync ng data?" "Mababawasan nito ang paggamit ng data at baterya, ngunit kakailanganin mong manu-manong i-sync ang bawat account upang kumolekta ng kamakailang impormasyon. At hindi ka makakatanggap ng mga notification kapag naganap ang mga pag-update." "Petsa ng pag-reset ng cycle sa paggamit" @@ -1751,12 +1769,12 @@ "Itakda ang babala sa paggamit ng data" "Itakda ang limitasyon sa paggamit ng data" "Pag-limit sa paggamit ng data" - "Hindi pagaganahin ang koneksyon ng iyong data ng mobile kapag naabot na ang tinukoy na limitasyon."\n\n"Dahil sinusukat ng iyong tablet ang paggamit ng data, at maaaring kuwentahin ang iyong carrier para sa paggamit sa ibang paraan, isaalang-alang ang paggamit ng konserbatibong limitasyon." - "Hindi pagaganahin ang koneksyon ng iyong data ng mobile kapag naabot na ang tinukoy na limitasyon."\n\n"Dahil sinusukat ng iyong telepono ang paggamit ng data, at maaaring kuwentahin ang iyong carrier para sa paggamit sa ibang paraan, isaalang-alang ang paggamit ng konserbatibong limitasyon." + "Hindi pagaganahin ang koneksyon ng iyong data ng mobile kapag naabot na ang tinukoy na limitasyon.\n\nDahil sinusukat ng iyong tablet ang paggamit ng data, at maaaring kuwentahin ang iyong carrier para sa paggamit sa ibang paraan, isaalang-alang ang paggamit ng konserbatibong limitasyon." + "Hindi pagaganahin ang koneksyon ng iyong data ng mobile kapag naabot na ang tinukoy na limitasyon.\n\nDahil sinusukat ng iyong telepono ang paggamit ng data, at maaaring kuwentahin ang iyong carrier para sa paggamit sa ibang paraan, isaalang-alang ang paggamit ng konserbatibong limitasyon." "Paghigpitan ang data ng background?" "Kung paghihigpitan mo ang background na data sa mobile, hindi gagana ang ilang apps at serbisyo maliban kung nakakonekta ka sa isang Wi-Fi network." - "Kung paghihigpitan mo ang background na data sa mobile, hindi gagana ang ilang apps at serbisyo maliban kung nakakonekta ka sa isang Wi-Fi network."\n\n"Nakakaapekto ang setting na ito sa lahat ng user sa tablet na ito." - "Kung paghihigpitan mo ang background na data sa mobile, hindi gagana ang ilang apps at serbisyo maliban kung nakakonekta ka sa isang Wi-Fi network."\n\n"Nakakaapekto ang setting na ito sa lahat ng user sa teleponong ito." + "Kung paghihigpitan mo ang background na data sa mobile, hindi gagana ang ilang apps at serbisyo maliban kung nakakonekta ka sa isang Wi-Fi network.\n\nNakakaapekto ang setting na ito sa lahat ng user sa tablet na ito." + "Kung paghihigpitan mo ang background na data sa mobile, hindi gagana ang ilang apps at serbisyo maliban kung nakakonekta ka sa isang Wi-Fi network.\n\nNakakaapekto ang setting na ito sa lahat ng user sa teleponong ito." "^1"" ""^2"\n"babala" "^1"" ""^2"\n"limitasyon" "Mga inalis na app" @@ -1843,8 +1861,8 @@ "User" "Pinaghihigpitang profile" "Idagdag ang bagong user" - "Maibabahagi mo ang device na ito sa iba pang mga tao sa pamamagitan ng paglikha ng mga karagdagang user. May sariling espasyo ang bawat user, na mako-customize nila gamit ang kanilang sariling apps, wallpaper, at higit pa. Maisasaayos din ng mga user ang mga setting ng tablet tulad ng Wi-Fi na makakaapekto sa lahat."\n\n"Pagkatapos mong lumikha ng bagong user, kailangang sumailalim ng taong iyon sa proseso ng pag-setup."\n\n"Ang sinumang user ay maaaring tumanggap ng na-update na mga pagpapahintulot sa app sa ngalan ng lahat ng iba pang user." - "Pagkatapos mong lumikha ng bagong user, kailangang sumailalim ng taong iyon sa proseso ng pag-setup."\n\n"Ang sinumang user ay maaaring tumanggap ng na-update na mga pagpapahintulot sa app sa ngalan ng lahat ng iba pang user." + "Maibabahagi mo ang device na ito sa iba pang mga tao sa pamamagitan ng paglikha ng mga karagdagang user. May sariling espasyo ang bawat user, na mako-customize nila gamit ang kanilang sariling apps, wallpaper, at higit pa. Maisasaayos din ng mga user ang mga setting ng tablet tulad ng Wi-Fi na makakaapekto sa lahat.\n\nPagkatapos mong lumikha ng bagong user, kailangang sumailalim ng taong iyon sa proseso ng pag-setup.\n\nAng sinumang user ay maaaring tumanggap ng na-update na mga pagpapahintulot sa app sa ngalan ng lahat ng iba pang user." + "Pagkatapos mong lumikha ng bagong user, kailangang sumailalim ng taong iyon sa proseso ng pag-setup.\n\nAng sinumang user ay maaaring tumanggap ng na-update na mga pagpapahintulot sa app sa ngalan ng lahat ng iba pang user." "I-set up ang user ngayon?" "Tiyaking available ang tao na kunin ang tablet at i-set up ang kanyang espasyo" "Mag-set up ng profile ngayon?" @@ -1875,6 +1893,9 @@ "Nakakaapekto ang setting na ito sa lahat ng user sa teleponong ito." "Baguhin ang wika" "Baguhin ang laki ng font" + "Mga Paghihigpit" + "Alisin ang paghihigpit" + "Palitan ang PIN" "Ipakita notification" "Tulong" "Account para sa nilalaman" diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml index 31b15f0b51a..e052fd17ba1 100644 --- a/res/values-tr/arrays.xml +++ b/res/values-tr/arrays.xml @@ -233,7 +233,8 @@ "Konum" "Kişisel" "Mesajlaşma" - "Cihaz" + "Medya" + "Cihaz"
    "yaklaşık konum" @@ -267,6 +268,17 @@ "sesi çal" "panoyu oku" "panoyu değiştir" + "medya düğmeleri" + "ses odağı" + "ana ses düzeyi" + "konuşma sesi düzeyi" + "çalma sesi düzeyi" + "medya sesi düzeyi" + "alarm sesi düzeyi" + "bildirim sesi düzeyi" + "Bluetooth sesi düzeyi" + "uyanık tut" + "konumu izle" "Konum" @@ -300,12 +312,33 @@ "Sesi çal" "Panoyu oku" "Panoyu değiştir" + "Medya düğmeleri" + "Ses odağı" + "Ana ses düzeyi" + "Konuşma sesi düzeyi" + "Zil sesi düzeyi" + "Medya sesi düzeyi" + "Alarm sesi düzeyi" + "Bildirim sesi düzeyi" + "Bluetooth ses düzeyi" + "Uyanık tut" + "Konum" "Kısa" "Orta" "Uzun" + + "Dalvik" + "ART" + "ART (hata ayıklama)" + + + "Dalvik\'i kullan" + "ART\'yi kullan" + "ART hata ayıklama derlemesini kullan" + "Hiçbir zaman denetleme" "Yalnızca DRM içeriğini denetle" @@ -367,6 +400,11 @@ "Ekranda çizgi şeklinde" "adb shell dumpsys gfxinfo içinde" + + "Kapalı" + "Fazla çizilen alanları göster" + "Fazla çizim sayacını göster" + "Standart sınır" "Arka planda işlem yok" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 60dd0eacce1..216ca47f399 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -275,8 +275,8 @@ "Veri dolaşımı kapalıyken ana ağınızdan ayrıldığınız için veri bağlantısını kaybettiniz." "Açın" "Veri dolaşımına izin verdiğinizde, yüksek miktarda dolaşım ücretleri ödeyebilirsiniz!" - "Veri dolaşımına izin verirseniz, önemli düzeyde dolaşım ücretleriyle karşılaşabilirsiniz!"\n\n"Bu ayar bu tabletteki tüm kullanıcıları etkiler." - "Veri dolaşımına izin verirseniz, önemli düzeyde dolaşım ücretleriyle karşılaşabilirsiniz!"\n\n"Bu ayar bu telefondaki tüm kullanıcıları etkiler." + "Veri dolaşımına izin verirseniz, önemli düzeyde dolaşım ücretleriyle karşılaşabilirsiniz!\n\nBu ayar bu tabletteki tüm kullanıcıları etkiler." + "Veri dolaşımına izin verirseniz, önemli düzeyde dolaşım ücretleriyle karşılaşabilirsiniz!\n\nBu ayar bu telefondaki tüm kullanıcıları etkiler." "Veri dolaşımına izin verilsin mi?" "Operatör seçimi" "Bir ağ operatörü seçin" @@ -322,8 +322,8 @@ "Tabletinizin her açılışında şifresinin çözülmesi için sayısal bir PIN veya şifre istensin" "Telefonunuzun her açılışında şifresinin çözülmesi için sayısal bir PIN veya şifre istensin" "Şifreli" - "Hesaplarınızı, ayarlarınızı, indirilen uygulamalarınızı ve bunlara ait verileri, medyaları ve diğer dosyaları şifreleyebilirsiniz. Tabletinizi şifreledikten sonra, cihazı her açtığınızda şifresini çözmek için sayısal bir PIN veya şifre girmeniz gerekir. Tabletinizdeki tüm verileri silen fabrika verilerine sıfırlama işlemi yapmadan şifrelemeyi kaldıramazsınız."\n\n"Şifreleme işlemi bir saat kadar sürer. İşlemi, dolu bir pille başlatmalı ve şifreleme tamamlanana kadar tabletinizi fişe takılı tutmalısınız. Şifreleme işlemini yarıda keserseniz, verilerinizin bir kısmını veya tamamını kaybedersiniz." - "Hesaplarınızı, ayarlarınızı, indirilen uygulamalarınızı ve bunlara ait verileri, medyaları ve diğer dosyaları şifreleyebilirsiniz. Telefonunuzu şifreledikten sonra, cihazı her açtığınızda şifresini çözmek için sayısal bir PIN veya şifre girmeniz gerekir. Telefonunuzdaki tüm verileri silen fabrika verilerine sıfırlama işlemi yapmadan şifrelemeyi kaldıramazsınız."\n\n"Şifreleme işlemi bir saat kadar sürer. İşlemi, dolu bir pille başlatmalı ve şifreleme tamamlanana kadar telefonunuzu fişe takılı tutmalısınız. Şifreleme işlemini yarıda keserseniz, verilerinizin bir kısmını veya tamamını kaybedersiniz." + "Hesaplarınızı, ayarlarınızı, indirilen uygulamalarınızı ve bunlara ait verileri, medyaları ve diğer dosyaları şifreleyebilirsiniz. Tabletinizi şifreledikten sonra, cihazı her açtığınızda şifresini çözmek için sayısal bir PIN veya şifre girmeniz gerekir. Tabletinizdeki tüm verileri silen fabrika verilerine sıfırlama işlemi yapmadan şifrelemeyi kaldıramazsınız.\n\nŞifreleme işlemi bir saat kadar sürer. İşlemi, dolu bir pille başlatmalı ve şifreleme tamamlanana kadar tabletinizi fişe takılı tutmalısınız. Şifreleme işlemini yarıda keserseniz, verilerinizin bir kısmını veya tamamını kaybedersiniz." + "Hesaplarınızı, ayarlarınızı, indirilen uygulamalarınızı ve bunlara ait verileri, medyaları ve diğer dosyaları şifreleyebilirsiniz. Telefonunuzu şifreledikten sonra, cihazı her açtığınızda şifresini çözmek için sayısal bir PIN veya şifre girmeniz gerekir. Telefonunuzdaki tüm verileri silen fabrika verilerine sıfırlama işlemi yapmadan şifrelemeyi kaldıramazsınız.\n\nŞifreleme işlemi bir saat kadar sürer. İşlemi, dolu bir pille başlatmalı ve şifreleme tamamlanana kadar telefonunuzu fişe takılı tutmalısınız. Şifreleme işlemini yarıda keserseniz, verilerinizin bir kısmını veya tamamını kaybedersiniz." "Tableti şifrele" "Telefonu şifrele" "Pilinizi şarj edip tekrar deneyin." @@ -339,8 +339,8 @@ "^1 saniye içinde yeniden deneyin." "Şifrenizi yazın" "Şifreleme başarısız oldu" - "Şifreleme kesildi ve tamamlanamıyor. Bu durum nedeniyle tabletinizdeki verilere artık erişilemiyor."\n\n"Tabletinizi kullanmaya devam edebilmek için, fabrika ayarlarına sıfırlama işlemi gerçekleştirmeniz gerekir. Sıfırlama işleminden sonra tabletinizin kurulumunu yaptığınızda, Google Hesabınıza yedeklenen tüm verileri geri yükleme fırsatınız olacaktır." - "Şifreleme kesildi ve tamamlanamıyor. Bu durum nedeniyle telefonunuzdaki verilere artık erişilemiyor."\n\n"Telefonunuz kullanmaya devam edebilmek için, fabrika ayarlarına sıfırlama işlemi gerçekleştirmeniz gerekir. Sıfırlama işleminden sonra telefonunuzun kurulumunu yaptığınızda, Google Hesabınıza yedeklenen tüm verileri geri yükleme fırsatınız olacaktır." + "Şifreleme kesildi ve tamamlanamıyor. Bu durum nedeniyle tabletinizdeki verilere artık erişilemiyor.\n\nTabletinizi kullanmaya devam edebilmek için, fabrika ayarlarına sıfırlama işlemi gerçekleştirmeniz gerekir. Sıfırlama işleminden sonra tabletinizin kurulumunu yaptığınızda, Google Hesabınıza yedeklenen tüm verileri geri yükleme fırsatınız olacaktır." + "Şifreleme kesildi ve tamamlanamıyor. Bu durum nedeniyle telefonunuzdaki verilere artık erişilemiyor.\n\nTelefonunuz kullanmaya devam edebilmek için, fabrika ayarlarına sıfırlama işlemi gerçekleştirmeniz gerekir. Sıfırlama işleminden sonra telefonunuzun kurulumunu yaptığınızda, Google Hesabınıza yedeklenen tüm verileri geri yükleme fırsatınız olacaktır." "Giriş yöntemini değiştir" "Ekran kilidini seçin" "Yedek kilidi seçin" @@ -514,6 +514,7 @@ "Bağlanılıyor" "Bağlandı" "Kullanılabilir" + "Kullanımda" "Ekran ayarları" "Bağlantı kesilsin mi?" "Şu cihazla bağlantınız kesilecek:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Kapalı" "NFC kapalı olduğundan kullanılamıyor" "Android Beam" - "Bu özellik açık olduğunda, cihazları birbirine yakın tutarak uygulama içeriğini NFC özelliği olan başka bir cihaza ışınlayabilirsiniz. Örneğin, Tarayıcı sayfalarını, YouTube videolarını, Kayıtlı kişilerinizi ve diğer verileri ışınlayabilirsiniz."\n\n"Cihazları bir araya getirmeniz (genellikle sırt sırta) ve ekranınıza dokunmanız yeterli. Uygulama nelerin ışınlanacağını belirler." + "Bu özellik açık olduğunda, cihazları birbirine yakın tutarak uygulama içeriğini NFC özelliği olan başka bir cihaza ışınlayabilirsiniz. Örneğin, Tarayıcı sayfalarını, YouTube videolarını, Kayıtlı kişilerinizi ve diğer verileri ışınlayabilirsiniz.\n\nCihazları bir araya getirmeniz (genellikle sırt sırta) ve ekranınıza dokunmanız yeterli. Uygulama nelerin ışınlanacağını belirler." "Ağ hizmeti keşfi" "Diğer cihazlardaki uygulamaların bu cihazdaki uygulamaları keşfetmesine izin ver" "Kablosuz" @@ -620,7 +621,7 @@ "Güvenliği %1$s ile sağlanıyor" ", güvenliği %1$s ile sağlanıyor" "Yok" - "Konum bilgisinin doğruluğunu artırmak ve diğer amaçlar için, %1$s Kablosuz bağlantı kapalı olduğunda bile ağ tarama işlevini açmak istiyor."\n\n"Tarama yapmak isteyen tüm uygulamaların bu işlevi kullanmalarına izin veriyor musunuz?" + "Konum bilgisinin doğruluğunu artırmak ve diğer amaçlar için, %1$s Kablosuz bağlantı kapalı olduğunda bile ağ tarama işlevini açmak istiyor.\n\nTarama yapmak isteyen tüm uygulamaların bu işlevi kullanmalarına izin veriyor musunuz?" "İzin ver" "Reddet" "Bağlan" @@ -632,8 +633,8 @@ "İptal" "Yine de atla" "Atlama" - "UYARI: Ek operatör veri ücretleri alınabilir."\n\n"Tabletin kurulumu önemli miktarda ağ etkinliği gerektirebilir." - "UYARI: Ek operatör veri ücretleri alınabilir."\n\n"Telefonun kurulumu önemli miktarda ağ etkinliği gerektirebilir." + "UYARI: Ek operatör veri ücretleri alınabilir.\n\nTabletin kurulumu önemli miktarda ağ etkinliği gerektirebilir." + "UYARI: Ek operatör veri ücretleri alınabilir.\n\nTelefonun kurulumu önemli miktarda ağ etkinliği gerektirebilir." "UYARI: İnternet bağlantınız olmadan tabletiniz yazılımlarınızın güncel olup olmadığını doğrulayamaz." "UYARI: İnternet bağlantınız olmadan telefonunuz yazılımlarınızın güncel olup olmadığını doğrulayamaz." "Tablet bu Kablosuz ağa bağlanamadı." @@ -773,9 +774,9 @@ "SIM PIN kodu" "Yanlış PIN" "PIN\'ler eşleşmiyor" - "PIN değiştirilemiyor."\n"PIN yanlış olabilir." + "PIN değiştirilemiyor.\nPIN yanlış olabilir." "SIM PIN kodu başarıyla değiştirildi" - "SIM kartın kilit durumu değiştirilemiyor."\n"PIN yanlış olabilir." + "SIM kartın kilit durumu değiştirilemiyor.\nPIN yanlış olabilir." "Tamam" "İptal" "Tabletin durumu" @@ -918,9 +919,9 @@ "Fabrika verilerine sıfırla" "Tabletteki tüm verileri siler" "Telefondaki tüm verileri siler" - "Bu işlem tablet bilgisayarınızın ""dahili depolama alanından""şu verilerin tümünü siler:"\n\n
  • "Google hesabınız"
  • \n
  • "Sistem ve uygulama verileri ile ayarları"
  • \n
  • "İndirilen uygulamalar"
  • - "Bu işlem, telefonunuzun ""dahili depolama alanından"" şu verilerin tümünü siler:"\n\n
  • "Google hesabınız"
  • \n
  • "Sistem ve uygulama verileri ile ayarları"
  • \n
  • "İndirilen uygulamalar"
  • - \n\n"Şu anda aşağıdaki hesaplarda oturum açmış durumdasınız:"\n + "Bu işlem tablet bilgisayarınızın ""dahili depolama alanından""şu verilerin tümünü siler:\n\n"
  • "Google hesabınız"
  • \n
  • "Sistem ve uygulama verileri ile ayarları"
  • \n
  • "İndirilen uygulamalar"
  • + "Bu işlem, telefonunuzun ""dahili depolama alanından"" şu verilerin tümünü siler:\n\n"
  • "Google hesabınız"
  • \n
  • "Sistem ve uygulama verileri ile ayarları"
  • \n
  • "İndirilen uygulamalar"
  • + \n\n"Şu anda aşağıdaki hesaplarda oturum açmış durumdasınız:\n"
  • "Müzik"
  • \n
  • "Fotoğraflar"
  • \n
  • "Diğer kullanıcı verileri"
  • \n\n"Müzik, resimler ve diğer kullanıcı verilerinin temizlenmesi için ""USB belleğin"" silinmesi gerekir." \n\n"Müzik, resimler ve diğer kullanıcı verilerinin temizlenmesi için ""SD kartın"" silinmesi gerekir." @@ -1105,7 +1106,7 @@ "Önbllğe alınan işlm göstr" "Uygulama tercihlerini sıfırla" "Uygulama tercihleri sıfırlansın mı?" - "Bu işlem şunlar için tüm tercihleri sıfırlar:"\n\n" "
  • "Devre dışı uygulamalar"
  • \n" "
  • "Devre dışı uygulama bildirimleri"
  • \n" "
  • "İşlemler için varsayılan uygulamalar"
  • \n" "
  • "Uygulamalar için arka plan sınırlandırmaları"
  • \n\n" Hiçbir uygulama verisi kaybolmaz."
    + "Bu işlem şunlar için tüm tercihleri sıfırlar:\n\n "
  • "Devre dışı uygulamalar"
  • \n" "
  • "Devre dışı uygulama bildirimleri"
  • \n" "
  • "İşlemler için varsayılan uygulamalar"
  • \n" "
  • "Uygulamalar için arka plan sınırlandırmaları"
  • \n\n" Hiçbir uygulama verisi kaybolmaz."
    "Uygulamaları sıfırla" "Alanı yönet" "Filtre" @@ -1240,9 +1241,7 @@ "Değiştirmek için Ctrl-Ara Çubuğu\'na basın" "Varsayılan" "Klavye düzenleri" - "Kullanıcı sözlüğü" - "Kişisel sözlük" - "Kişisel sözlükler" + "Kişisel sözlük" "Ekle" "Sözlüğe ekle" @@ -1303,6 +1302,11 @@ "Güç menüsünde hata raporunu alma seçeneğini dahil et" "Uyanık kal" "Şarj edilirken ekran hiçbir zaman uykuya geçmez" + "Bluetooth HCI araştırma günlüğü özelliğini etkinleştir" + "Bir dosyadaki tüm Bluetooth HCI paketlerini yakala" + "Çalışma zamanını seçin" + "Çalışma zamanını seçin" + "Çalışma zamanını %1$s yerine %2$s olarak değiştirmek için yeniden başlatılsın mı?" "Sahte konumlara izin ver" "Sahte konumlara izin ver" "USB hata ayıklamasına izin verilsin mi?" @@ -1315,11 +1319,13 @@ "USB belleği koru" "Uygulamalar USB belleği okumak için izin istemelidir" "USB bellek korunsun mu?" - "USB bellek korumalı olduğunda, uygulamaların harici depolama biriminden veri okumak için izin istemeleri gerekir."\n\n"Bazı uygulamalar, geliştiricileri tarafından güncellenene kadar çalışmayabilir." + "USB bellek korumalı olduğunda, uygulamaların harici depolama biriminden veri okumak için izin istemeleri gerekir.\n\nBazı uygulamalar, geliştiricileri tarafından güncellenene kadar çalışmayabilir." "SD kartı koru" "Uygulamalar SD kartı okumak için izin istemelidir" "SD kart korunsun mu?" - "SD kart korumalı olduğunda, uygulamaların harici depolama biriminden veri okumak için izin istemeleri gerekir."\n\n"Bazı uygulamalar, geliştiricileri tarafından güncellenene kadar çalışmayabilir." + "SD kart korumalı olduğunda, uygulamaların harici depolama biriminden veri okumak için izin istemeleri gerekir.\n\nBazı uygulamalar, geliştiricileri tarafından güncellenene kadar çalışmayabilir." + "Yerel terminal" + "Yerel kabuk erişimi sunan terminal uygulamasını etkinleştir" "Gadget seç" "Widget seç" "Widget\'ı oluşturup erişime izin vermek istiyor musunuz?" @@ -1340,11 +1346,11 @@ "Hizmetler" "Sistem" "Büyüteç hareketleri" - "Bu özellik açıldığında ekrana üç kez hafifçe vurarak görüntüyü yakınlaştırabilir ve uzaklaştırabilirsiniz."\n\n"Yakınlaştırdığınızda şunları yapabilirsiniz"\n
    • "Kaydırma: İki veya daha fazla parmağınızı ekranda sürükleyin."
    • \n
    • "Yakınlaştırrma düzeyini ayarlama: İki veya daha fazla parmağınızı birbirine yaklaştırın veya uzaklaştırın."
    \n\n"Ayrıca, üç kez hafifçe vurup parmağınızı basılı tutarak parmağınızın altındakini geçici olarak büyütebilirsiniz. Önceki duruma dönmek için parmağınızı kaldırın."\n\n"Not: Üç kez hafifçe vurarak büyütme özelliği klavye ve gezinme çubuğu hariç her yerde kullanılabilir."
    + "Bu özellik açıldığında ekrana üç kez hafifçe vurarak görüntüyü yakınlaştırabilir ve uzaklaştırabilirsiniz.\n\nYakınlaştırdığınızda şunları yapabilirsiniz\n"
    • "Kaydırma: İki veya daha fazla parmağınızı ekranda sürükleyin."
    • \n
    • "Yakınlaştırrma düzeyini ayarlama: İki veya daha fazla parmağınızı birbirine yaklaştırın veya uzaklaştırın."
    \n\n"Ayrıca, üç kez hafifçe vurup parmağınızı basılı tutarak parmağınızın altındakini geçici olarak büyütebilirsiniz. Önceki duruma dönmek için parmağınızı kaldırın.\n\nNot: Üç kez hafifçe vurarak büyütme özelliği klavye ve gezinme çubuğu hariç her yerde kullanılabilir."
    "Erişilebilirlik kısayolu" "Açık" "Kapalı" - "Bu özellik açıldığında, erişilebilirlik özelliklerini iki adımda kolayca etkinleştirebilirsiniz:"\n\n"1. Adım: Bir ses duyana veya titreşim hissedene kadar güç düğmesini basılı tutun."\n\n"2. Adım: İki parmağınızla dokunup sesli bir onay duyana kadar parmaklarınızı basılı tutun."\n\n"Cihazda birden fazla kullanıcı varsa, kilit ekranında bu kısayol kullanıldığında erişilebilirlik özelliği cihazın kilidi açılana kadar geçici olarak etkinleştirilir." + "Bu özellik açıldığında, erişilebilirlik özelliklerini iki adımda kolayca etkinleştirebilirsiniz:\n\n1. Adım: Bir ses duyana veya titreşim hissedene kadar güç düğmesini basılı tutun.\n\n2. Adım: İki parmağınızla dokunup sesli bir onay duyana kadar parmaklarınızı basılı tutun.\n\nCihazda birden fazla kullanıcı varsa, kilit ekranında bu kısayol kullanıldığında erişilebilirlik özelliği cihazın kilidi açılana kadar geçici olarak etkinleştirilir." "Büyük metin" "Ekran büyütme" "Ekran büyütmeyi otomatik güncelle" @@ -1366,6 +1372,16 @@ "TalkBack, görme engelli veya az gören kullanıcılara yardımcı olmak için sesli geri bildirim sağlar. Bu uygulamayı Android Market\'ten ücretsiz olarak yüklemek ister misiniz?" "Hiçbir açıklama sağlanmadı." "Ayarlar" + "Yazdırma" + "Yazdırma ayarları" + "Hizmetler" + "%1$s kullanılsın mı?" + "%1$s yazdırdığınız dokümanları alabilir. Bu tür dokümanlar hassas veriler içerebilir." + "Hiçbir hizmet yüklenmedi" + "Ayarlar" + "Yazıcı ekle" + "Açık" + "Kapalı" "Pil" "Pili ne kullanıyor?" "Pil kullanım verisi yok." @@ -1405,8 +1421,10 @@ "Kablosuz çalışıyor" "Tablet" "Telefon" - "Gönderilen veriler" - "Alınan veriler" + "Mobil veri gönderildi" + "Mobil veri alındı" + "Kablosuz verisi gönderildi" + "Kablosuz verisi alındı" "Ses" "Video" "Açma zamanı" @@ -1460,6 +1478,7 @@ "Perde" "Konuşulan metnin sesini etkiler" "Dil" + "Dil seçilmedi" "Dil için tanımlı sesi, konuşulan metin için ayarlar" "Bir örnek dinleyin" "Konuşma sentezinin kısa bir sunumunu çal" @@ -1594,7 +1613,7 @@ "EAP desteklenmiyor." "Kurulum sırasında EAP Kablosuz bağlantısı yapılandıramazsınız. Kurulumdan sonra bunu, Ayarlar > Kablosuz ve ağlar bölümünde yapabilirsiniz." "Bağlanma birkaç dakika sürebilir..." - "Kuruluma devam etmek için ""İleri""\'ye dokunun."\n\n"Farklı bir Kablosuz ağa bağlanmak için ""Geri""\'ye dokunun." + "Kuruluma devam etmek için ""İleri""\'ye dokunun.\n\nFarklı bir Kablosuz ağa bağlanmak için ""Geri""\'ye dokunun." "Senkronizasyon etkinleştirildi" "Senkronizasyon devre dışı" "Senkronizasyon hatası" @@ -1676,8 +1695,7 @@ "GPU ile çizim yapılırken pencerelerdeki görünümleri çiz" "Donanım katmanı güncellemelerini göster" "Flash donanım katmanları güncellendiğinde yeşildir" - "GPU fazla çizimini göster" - "En iyiden en kötüye: mavi, yeşil, açık kırmızı, kırmızı" + "GPU fazla çizim hatasını ayıkla" "HW katmanlarını devre dışı bırak" "Ekran oluştururken her zaman GPU\'yu kullan" "OpenGL izlerini etkinleştir" @@ -1738,11 +1756,11 @@ "Mobil ağlarda arka plan verilerini devre dışı bırak. Varsa mobil olmayan ağlar kullanılır." "Bu uygulama için arka plan verilerini sınırlamak üzere önce bir mobil veri sınırı belirleyin." "Arka plan verileri kısıtlansın mı?" - "Bu özellik, arka plan verilere dayanan bir uygulamanın, yalnızca mobil ağlar mevcut olması durumunda çalışmayı durdurmasına neden olabilir."\n\n"Daha uygun veri kullanım denetimlerini uygulamanın içindeki ayarlarda bulabilirsiniz." + "Bu özellik, arka plan verilere dayanan bir uygulamanın, yalnızca mobil ağlar mevcut olması durumunda çalışmayı durdurmasına neden olabilir.\n\nDaha uygun veri kullanım denetimlerini uygulamanın içindeki ayarlarda bulabilirsiniz." "Arka plan verilerini sınırlama özelliği, yalnızca mobil ağ veri sınırı ayarladığınızda kullanılabilir." "Otomatik veri senk. açılsın mı?" - "Web üzerinden hesaplarınızda yaptığınız tüm değişiklikler tabletinize otomatik olarak kopyalanır"\n\n"Bazı hesaplar ayrıca tablette yaptığınız değişiklikleri de Web\'e otomatik olarak kopyalar. Google Hesapları bu şekilde çalışır. "\n\n"Her hesapla ne tür bilgileri senkronize edeceğinizi seçmek için Ayarlar > Hesaplar\'a gidin." - "Web üzerinden hesaplarınızda yaptığınız tüm değişiklikler telefonunuza otomatik olarak kopyalanır"\n\n"Bazı hesaplar telefonda yaptığınız değişiklikleri de Web\'e otomatik olarak kopyalar. Google Hesapları bu şekilde çalışır. "\n\n"Her hesapla ne tür bilgileri senkronize edeceğinizi seçmek için Ayarlar > Hesaplar\'a gidin." + "Web üzerinden hesaplarınızda yaptığınız tüm değişiklikler tabletinize otomatik olarak kopyalanır\n\nBazı hesaplar ayrıca tablette yaptığınız değişiklikleri de Web\'e otomatik olarak kopyalar. Google Hesapları bu şekilde çalışır. \n\nHer hesapla ne tür bilgileri senkronize edeceğinizi seçmek için Ayarlar > Hesaplar\'a gidin." + "Web üzerinden hesaplarınızda yaptığınız tüm değişiklikler telefonunuza otomatik olarak kopyalanır\n\nBazı hesaplar telefonda yaptığınız değişiklikleri de Web\'e otomatik olarak kopyalar. Google Hesapları bu şekilde çalışır. \n\nHer hesapla ne tür bilgileri senkronize edeceğinizi seçmek için Ayarlar > Hesaplar\'a gidin." "Otomatik veri senk. kapatılsın mı?" "Bu işlem veri ve pil kullanımını azaltır, ancak son bilgileri almak için her hesabı manuel olarak senkronize etmeniz gerekecektir. Ayrıca, güncelleme olduğunda da bildirim alamayacaksınız." "Kullanım dönemi sıfırlama tarihi" @@ -1751,12 +1769,12 @@ "Veri kullanım uyarısını ayarla" "Veri kullanım limitini ayarla" "Veri kullanımını sınırlama" - "Belirtilen limite ulaşıldığında mobil veri bağlantınız kesilecektir."\n\n"Veri kullanımı tabletiniz tarafından ölçüldüğünden operatörünüzün kullanım hesaplaması farklı olabilir. Bu nedenle, risk almadan güvenli bir limit belirleyin." - "Belirtilen limite ulaşıldığında mobil veri bağlantınız kesilecektir."\n\n"Veri kullanımı telefonunuz tarafından ölçüldüğünden operatörünüzün kullanım hesaplaması farklı olabilir. Bu nedenle, risk almadan güvenli bir limit belirleyin." + "Belirtilen limite ulaşıldığında mobil veri bağlantınız kesilecektir.\n\nVeri kullanımı tabletiniz tarafından ölçüldüğünden operatörünüzün kullanım hesaplaması farklı olabilir. Bu nedenle, risk almadan güvenli bir limit belirleyin." + "Belirtilen limite ulaşıldığında mobil veri bağlantınız kesilecektir.\n\nVeri kullanımı telefonunuz tarafından ölçüldüğünden operatörünüzün kullanım hesaplaması farklı olabilir. Bu nedenle, risk almadan güvenli bir limit belirleyin." "Arka plan verileri kısıtlansın mı?" "Arka planda mobil veri kullanımını kısıtlarsanız, Kablosuz bir ağa bağlanmadığınız sürece bazı uygulamalar ve hizmetler çalışmaz." - "Arka planda mobil veri kullanımını kısıtlarsanız, Kablosuz bir ağa bağlanmadığınız sürece bazı uygulamalar ve hizmetler çalışmaz."\n\n"Bu ayar, bu tabletteki tüm kullanıcıları etkiler." - "Arka planda mobil veri kullanımını kısıtlarsanız, Kablosuz bir ağa bağlanmadığınız sürece bazı uygulamalar ve hizmetler çalışmaz."\n\n"Bu ayar, bu telefondaki tüm kullanıcıları etkiler." + "Arka planda mobil veri kullanımını kısıtlarsanız, Kablosuz bir ağa bağlanmadığınız sürece bazı uygulamalar ve hizmetler çalışmaz.\n\nBu ayar, bu tabletteki tüm kullanıcıları etkiler." + "Arka planda mobil veri kullanımını kısıtlarsanız, Kablosuz bir ağa bağlanmadığınız sürece bazı uygulamalar ve hizmetler çalışmaz.\n\nBu ayar, bu telefondaki tüm kullanıcıları etkiler." "^1"" ""^2"\n"uyarı" "^1"" ""^2"\n"sınır" "Kaldırılan uygulamalar" @@ -1843,8 +1861,8 @@ "Kullanıcı" "Kısıtlı profil" "Yeni kullanıcı ekle" - "Ek kullanıcılar yaratarak bu cihazı başka kişilerle paylaşabilirsiniz. Her kullanıcının kendine ait alanı olur ve bu alanı kendi uygulamaları, duvar kâğıdı vb. ile özelleştirebilir. Kullanıcılar, Kablosuz bağlantı gibi herkesi etkileyebilecek tablet ayarlarını da yapabilirler."\n\n"Yeni bir kullanıcı oluşturduğunuzda, o kişinin bir kurulum işlemini tamamlaması gerekir."\n\n"Herhangi bir kullanıcı, güncellenen uygulama izinlerini diğer kullanıcıların adına kabul edebilir." - "Yeni bir kullanıcı oluşturduktan sonra, o kişinin bir kurulum işlemini tamamlaması gerekir."\n\n"Herhangi bir kullanıcı, güncellenen uygulama izinlerini diğer kullanıcıların adına kabul edebilir." + "Ek kullanıcılar yaratarak bu cihazı başka kişilerle paylaşabilirsiniz. Her kullanıcının kendine ait alanı olur ve bu alanı kendi uygulamaları, duvar kâğıdı vb. ile özelleştirebilir. Kullanıcılar, Kablosuz bağlantı gibi herkesi etkileyebilecek tablet ayarlarını da yapabilirler.\n\nYeni bir kullanıcı oluşturduğunuzda, o kişinin bir kurulum işlemini tamamlaması gerekir.\n\nHerhangi bir kullanıcı, güncellenen uygulama izinlerini diğer kullanıcıların adına kabul edebilir." + "Yeni bir kullanıcı oluşturduktan sonra, o kişinin bir kurulum işlemini tamamlaması gerekir.\n\nHerhangi bir kullanıcı, güncellenen uygulama izinlerini diğer kullanıcıların adına kabul edebilir." "Kullanıcı şimdi yapılandırılsın mı?" "İlgili kişinin tableti almak ve kendi alanının kurulumunu yapmak için müsait olduğundan emin olun" "Profil şimdi yapılandırılsın mı?" @@ -1875,6 +1893,9 @@ "Bu ayar bu telefondaki tüm kullanıcıları etkiler." "Dili değiştir" "Yazı tipi boyutunu değiştir" + "Kısıtlamalar" + "Kısıtlamaları kaldır" + "PIN\'i değiştir" "Bildirimleri göster" "Yardım" "İçerik için kullanılan hesap" diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml index 86ed51b77e8..664e6781629 100644 --- a/res/values-uk/arrays.xml +++ b/res/values-uk/arrays.xml @@ -233,7 +233,8 @@ "Місцезнаходження" "Особисті дані" "Повідомлення" - "Пристрій" + "Медіа-файли" + "Пристрій"
    "приблизне місцезнаходження" @@ -267,6 +268,17 @@ "відтворювати аудіо" "читати буфер обміну" "змінювати буфер обміну" + "кнопки медіа" + "активізація звуку" + "загальна гучність" + "гучність голосу" + "гучність дзвінка" + "гучність медіа" + "гучність сигналу" + "гучність сповіщення" + "гучність Bluetooth" + "залишати активним" + "відстежувати місцезнаходження" "Місцезнаходження" @@ -300,12 +312,33 @@ "Відтворювати аудіо" "Читати буфер обміну" "Змінювати буфер обміну" + "Кнопки медіа" + "Активізація звуку" + "Загальна гучність" + "Гучність голосу" + "Гучність дзвінка" + "Гучність медіа" + "Гучність сигналу" + "Гучність сповіщення" + "Гучність Bluetooth" + "Залишати активним" + "Місцезнаходження" "Коротка" "Середня" "Довга" + + "Dalvik" + "ART" + "ART (налагодження)" + + + "Використовувати Dalvik" + "Використовувати ART" + "Використовувати складання ART для налагодження" + "Ніколи не перевіряти" "Перевір. лише на вміст, захищ. DRM" @@ -367,6 +400,11 @@ "На екрані у вигляді ліній" "In adb shell dumpsys gfxinfo" + + "Вимк." + "Показувати області накладання" + "Показувати лічильник накладання" + "Стандартне обмеження" "Без фонових процесів" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index de4af9ea1a3..06ec899b4ae 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -275,8 +275,8 @@ "Доступ до даних утрачено, оскільки ви залишили домашню мережу з вимкненим роумінгом даних." "Увімкнути" "Якщо дозволити роумінг даних, може стягуватися значна плата за роумінг!" - "Якщо дозволити роумінг даних, з вас може стягуватися значна плата за роумінг."\n\n"Таке налаштування впливає на всіх користувачів цього планшетного ПК." - "Якщо дозволити роумінг даних, з вас може стягуватися значна плата за роумінг."\n\n"Таке налаштування впливає на всіх користувачів цього телефону." + "Якщо дозволити роумінг даних, з вас може стягуватися значна плата за роумінг.\n\nТаке налаштування впливає на всіх користувачів цього планшетного ПК." + "Якщо дозволити роумінг даних, з вас може стягуватися значна плата за роумінг.\n\nТаке налаштування впливає на всіх користувачів цього телефону." "Дозволити роумінг даних?" "Вибір оператора" "Виберіть оператора мережі" @@ -322,8 +322,8 @@ "Вимагає введення цифрового PIN-коду чи пароля для шифрування пристрою щоразу при його ввімкненні" "Вимагає введення цифрового PIN-коду чи пароля для шифрування телефону щоразу при його ввімкненні" "Зашифровано" - "Ви можете шифрувати свої облікові записи, налаштування, завантажені програми та їх дані, медіа-файли й інші файли. Щойно ви зашифруєте свій планшетний ПК, потрібно буде вводити цифровий PIN-код чи пароль для розшифрування планшетного ПК щоразу під час його ввімкнення. Ви зможете скасувати шифрування, лише відновивши заводські налаштування, що призведе до видалення всіх ваших даних."\n\n"Шифрування триває не менше години. Перш ніж розпочати процес шифрування, переконайтеся, що акумулятор заряджено. Планшетний ПК має перебувати в підключеному стані до завершення шифрування. Переривання процесу шифрування призведе до втрати частини чи всіх ваших даних." - "Ви можете шифрувати свої облікові записи, налаштування, завантажені програми та їх дані, медіа-файли й інші файли. Щойно ви зашифруєте свій телефон, потрібно буде вводити цифровий PIN-код чи пароль для розшифрування телефону щоразу під час його ввімкнення. Ви зможете скасувати шифрування, лише відновивши заводські налаштування, що призведе до видалення всіх ваших даних."\n\n"Шифрування триває не менше години. Перш ніж розпочати процес шифрування, переконайтеся, що акумулятор заряджено. Телефон має перебувати в підключеному стані до завершення шифрування. Переривання процесу шифрування призведе до втрати частини чи всіх ваших даних." + "Ви можете шифрувати свої облікові записи, налаштування, завантажені програми та їх дані, медіа-файли й інші файли. Щойно ви зашифруєте свій планшетний ПК, потрібно буде вводити цифровий PIN-код чи пароль для розшифрування планшетного ПК щоразу під час його ввімкнення. Ви зможете скасувати шифрування, лише відновивши заводські налаштування, що призведе до видалення всіх ваших даних.\n\nШифрування триває не менше години. Перш ніж розпочати процес шифрування, переконайтеся, що акумулятор заряджено. Планшетний ПК має перебувати в підключеному стані до завершення шифрування. Переривання процесу шифрування призведе до втрати частини чи всіх ваших даних." + "Ви можете шифрувати свої облікові записи, налаштування, завантажені програми та їх дані, медіа-файли й інші файли. Щойно ви зашифруєте свій телефон, потрібно буде вводити цифровий PIN-код чи пароль для розшифрування телефону щоразу під час його ввімкнення. Ви зможете скасувати шифрування, лише відновивши заводські налаштування, що призведе до видалення всіх ваших даних.\n\nШифрування триває не менше години. Перш ніж розпочати процес шифрування, переконайтеся, що акумулятор заряджено. Телефон має перебувати в підключеному стані до завершення шифрування. Переривання процесу шифрування призведе до втрати частини чи всіх ваших даних." "Шифрувати пристрій" "Шифрувати телефон" "Зарядіть акумулятор і повторіть спробу." @@ -339,8 +339,8 @@ "Спробуйте ще через ^1 сек." "Введіть пароль" "Шифрування не виконано" - "Шифрування перервано, його неможливо закінчити. Як наслідок, дані на планшетному ПК більше не доступні. "\n\n"Щоб знову користуватися планшетним ПК, потрібно відновити заводські налаштування. Налаштовуючи планшетний ПК після відновлення, ви матимете можливість відновити будь-які дані, резервні копії яких було збережено у вашому обліковому записі Google." - "Шифрування перервано, його неможливо закінчити. Як наслідок, дані на телефоні більше не доступні. "\n\n"Щоб знову користуватися телефоном, потрібно відновити заводські налаштування. Налаштовуючи телефон після відновлення, ви матимете можливість відновити будь-які дані, резервні копії яких було збережено у вашому обліковому записі Google." + "Шифрування перервано, його неможливо закінчити. Як наслідок, дані на планшетному ПК більше не доступні. \n\nЩоб знову користуватися планшетним ПК, потрібно відновити заводські налаштування. Налаштовуючи планшетний ПК після відновлення, ви матимете можливість відновити будь-які дані, резервні копії яких було збережено у вашому обліковому записі Google." + "Шифрування перервано, його неможливо закінчити. Як наслідок, дані на телефоні більше не доступні. \n\nЩоб знову користуватися телефоном, потрібно відновити заводські налаштування. Налаштовуючи телефон після відновлення, ви матимете можливість відновити будь-які дані, резервні копії яких було збережено у вашому обліковому записі Google." "Переключити метод введення" "Тип блокув. екрана" "Вибер. резерв. блокув." @@ -514,6 +514,7 @@ "Під’єднуються" "Під’єднані" "Доступні" + "Використовується" "Налаштування відображення" "Від’єднатися?" "Це призведе до роз’єднання з пристроєм:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Вимк." "Недоступно, оскільки NFC вимкнено" "Android Beam" - "Якщо цю функцію ввімкнено, можна передавати вміст програми на інший пристрій, що підтримує технологію NFC, розташувавши пристрої один біля одного. Наприклад, можна передавати сторінки веб-переглядача, відео YouTube, контакти з розділу \"Люди\" тощо."\n\n"Просто розташуйте пристрої один біля одного (зазвичай тильними сторонами) і торкніться свого екрана. Програма визначить, що потрібно передати." + "Якщо цю функцію ввімкнено, можна передавати вміст програми на інший пристрій, що підтримує технологію NFC, розташувавши пристрої один біля одного. Наприклад, можна передавати сторінки веб-переглядача, відео YouTube, контакти з розділу \"Люди\" тощо.\n\nПросто розташуйте пристрої один біля одного (зазвичай тильними сторонами) і торкніться свого екрана. Програма визначить, що потрібно передати." "Виявлення мережевої служби" "Дозволити програмам на інших пристроях виявляти програми на цьому пристрої" "Wi‑Fi" @@ -620,7 +621,7 @@ "Захищено: %1$s" ", захищено: %1$s" "Немає" - "Щоб покращити точність даних про місцезнаходження, а також для інших цілей, програма %1$s хоче вмикати сканування мережі, навіть коли Wi-Fi вимкнено."\n\n"Дозволити це для всіх програм, які потребують сканування?" + "Щоб покращити точність даних про місцезнаходження, а також для інших цілей, програма %1$s хоче вмикати сканування мережі, навіть коли Wi-Fi вимкнено.\n\nДозволити це для всіх програм, які потребують сканування?" "Дозволити" "Відхилити" "Підключ." @@ -632,8 +633,8 @@ "Скасувати" "Усе одно пропустити" "Не пропускати" - "ЗАСТЕРЕЖЕННЯ. Оператор може стягувати з вас додаткову плату."\n\n"Для налаштування планшетного ПК може знадобитися тривале користування мережею." - "ЗАСТЕРЕЖЕННЯ. Оператор може стягувати з вас додаткову плату."\n\n"Для налаштування телефону може знадобитися тривале користування мережею." + "ЗАСТЕРЕЖЕННЯ. Оператор може стягувати з вас додаткову плату.\n\nДля налаштування планшетного ПК може знадобитися тривале користування мережею." + "ЗАСТЕРЕЖЕННЯ. Оператор може стягувати з вас додаткову плату.\n\nДля налаштування телефону може знадобитися тривале користування мережею." "ЗАСТЕРЕЖЕННЯ. Якщо немає з’єднання з Інтернетом, планшетний ПК не зможе перевірити, чи оновлено ваше програмне забезпечення." "ЗАСТЕРЕЖЕННЯ. Якщо немає з’єднання з Інтернетом, телефон не зможе перевірити, чи оновлено ваше програмне забезпечення." "Планшетний ПК не зміг під’єднатися до цієї мережі Wi-Fi." @@ -773,9 +774,9 @@ "PIN SIM-карти" "Неправильний PIN-код" "PIN-коди не збігаються" - "Неможливо змінити PIN-код."\n"Можливо, неправильний PIN-код." + "Неможливо змінити PIN-код.\nМожливо, неправильний PIN-код." "PIN SIM-карти успішно змінено" - "Неможливо змінити стан блокування SIM-карти."\n"Можливо, неправильний PIN-код." + "Неможливо змінити стан блокування SIM-карти.\nМожливо, неправильний PIN-код." "OK" "Скасувати" "Стан пристрою" @@ -918,9 +919,9 @@ "Відновл. завод. налаштув." "Видаляє всі дані в пристрої" "Видаляє всі дані в телефоні" - "Це зітре всі дані з ""внутрішньої пам’яті"" вашого планшетного ПК, зокрема:"\n\n
  • "ваш обліковий запис Google"
  • \n
  • "дані й налаштування системи та програм"
  • \n
  • "завантажені програми"
  • "."
    - "Це видалить усі дані з ""внутрішньої пам’яті"" вашого телефону, зокрема:"\n\n
  • "ваш обліковий запис Google"
  • \n
  • "дані й налаштування системи та програм"
  • \n
  • "завантажені програми"
  • "."
    - \n\n"Наразі ви ввійшли в такі облікові записи:"\n + "Це зітре всі дані з ""внутрішньої пам’яті"" вашого планшетного ПК, зокрема:\n\n"
  • "ваш обліковий запис Google"
  • \n
  • "дані й налаштування системи та програм"
  • \n
  • "завантажені програми"
  • "."
    + "Це видалить усі дані з ""внутрішньої пам’яті"" вашого телефону, зокрема:\n\n"
  • "ваш обліковий запис Google"
  • \n
  • "дані й налаштування системи та програм"
  • \n
  • "завантажені програми"
  • "."
    + \n\n"Наразі ви ввійшли в такі облікові записи:\n"
  • "Музика"
  • \n
  • "Фото"
  • \n
  • "Інші дані користувача"
  • \n\n"Щоб видалити музику, зображення й інші дані користувача, треба стерти ""носій USB""." \n\n"Щоб видалити музику, зображення й інші дані користувача, треба стерти ""карту SD""." @@ -1105,7 +1106,7 @@ "Показати кешовані процеси" "Скинути налашт-ня програм" "Скинути налашт. програм?" - "Ця дія скине всі налаштування для:"\n\n" "
  • "вимкнених програм"
  • \n" "
  • "вимкнених сповіщень програм"
  • \n" "
  • "дій у програмах за умовчанням"
  • \n" "
  • "обмежень щодо фонових даних для програм"
  • \n\n" Жодні дані програм не буде втрачено."
    + "Ця дія скине всі налаштування для:\n\n "
  • "вимкнених програм"
  • \n" "
  • "вимкнених сповіщень програм"
  • \n" "
  • "дій у програмах за умовчанням"
  • \n" "
  • "обмежень щодо фонових даних для програм"
  • \n\n" Жодні дані програм не буде втрачено."
    "Скинути програми" "Кер. простором" "Фільтрув." @@ -1240,9 +1241,7 @@ "Щоб переключити, натис. Ctrl–Пробіл" "За умовчанням" "Розкладки клавіатури" - "Словник корист-ча" - "Особистий словник" - "Особисті словники" + "Особистий словник" "Додати" "Додати до словника" @@ -1303,6 +1302,11 @@ "Внести в меню \"Живлення\" опцію створення повідомлень про помилку" "Залишати активним" "Екран не засинатиме під час заряджання" + "Увімкнути журнал відстеження інтерфейсу Bluetooth" + "Робити знімки всіх пакетів інтерфейсу Bluetooth у файлі" + "Вибрати робочий цикл" + "Вибрати робочий цикл" + "Перезавантажити, щоб змінити робочий цикл із %1$s на %2$s?" "Фіктивні місцезнаходження" "Дозв. фіктивні місцезн." "Дозвол. налагодж. USB?" @@ -1315,11 +1319,13 @@ "Захистити носій USB" "Програми мають запитувати дозвіл на читання носія USB" "Захистити носій USB?" - "Якщо носій USB захищено, програми мають запитувати дозвіл на читання даних із зовнішньої пам’яті."\n\n"Деякі програми можуть не працювати до оновлення своїми розробниками." + "Якщо носій USB захищено, програми мають запитувати дозвіл на читання даних із зовнішньої пам’яті.\n\nДеякі програми можуть не працювати до оновлення своїми розробниками." "Захистити карту SD" "Програми мають запитувати дозвіл на читання карти SD" "Захистити карту SD?" - "Якщо карту SD захищено, програми мають запитувати дозвіл на читання даних із зовнішньої пам’яті."\n\n"Деякі програми можуть не працювати до оновлення своїми розробниками." + "Якщо карту SD захищено, програми мають запитувати дозвіл на читання даних із зовнішньої пам’яті.\n\nДеякі програми можуть не працювати до оновлення своїми розробниками." + "Локальний термінал" + "Увімк. програму-термінал, що надає локальний доступ до оболонки" "Вибрати віджет" "Вибрати віджет" "Створити віджет і дозволити доступ?" @@ -1340,11 +1346,11 @@ "Служби" "Система" "Жести збільшення" - "Якщо цю функцію ввімкнено, масштаб можна змінювати, тричі торкнувшись екрана."\n\n"У збільшеному масштабі можна:"\n
    • "панорамувати – проведіть принаймні двома пальцями по екрану;"
    • \n
    • "налаштовувати рівень масштабування – стисніть або розведіть принаймні два пальці."
    \n\n"Можна також тимчасово збільшувати вміст під пальцем – тричі торкніться й утримуйте. У такому збільшеному стані можна досліджувати різні частини екрана, пересуваючи палець. Підніміть палець, щоб повернутися до попереднього стану."\n\n"Примітка. Потрійний дотик для збільшення працює всюди, окрім клавіатури та панелі навігації."
    + "Якщо цю функцію ввімкнено, масштаб можна змінювати, тричі торкнувшись екрана.\n\nУ збільшеному масштабі можна:\n"
    • "панорамувати – проведіть принаймні двома пальцями по екрану;"
    • \n
    • "налаштовувати рівень масштабування – стисніть або розведіть принаймні два пальці."
    \n\n"Можна також тимчасово збільшувати вміст під пальцем – тричі торкніться й утримуйте. У такому збільшеному стані можна досліджувати різні частини екрана, пересуваючи палець. Підніміть палець, щоб повернутися до попереднього стану.\n\nПримітка. Потрійний дотик для збільшення працює всюди, окрім клавіатури та панелі навігації."
    "Ярлик доступності" "Увімкнути" "Вимк." - "Якщо цю функцію ввімкнено, функції доступності можна швидко ввімкнути двома способами."\n\n"Крок 1. Натисніть і утримуйте кнопку живлення, поки не спрацює звуковий сигнал або вібросигнал."\n\n"Крок 2. Натисніть і утримуйте двома пальцями, поки не пролунає звукове підтвердження."\n\n"Якщо пристроєм користується декілька осіб, цей ярлик на екрані блокування дозволяє тимчасово ввімкнути доступність, поки пристрій не буде розблоковано." + "Якщо цю функцію ввімкнено, функції доступності можна швидко ввімкнути двома способами.\n\nКрок 1. Натисніть і утримуйте кнопку живлення, поки не спрацює звуковий сигнал або вібросигнал.\n\nКрок 2. Натисніть і утримуйте двома пальцями, поки не пролунає звукове підтвердження.\n\nЯкщо пристроєм користується декілька осіб, цей ярлик на екрані блокування дозволяє тимчасово ввімкнути доступність, поки пристрій не буде розблоковано." "Великий текст" "Збільшення екрана" "Автоматично оновлювати збільшення" @@ -1366,6 +1372,16 @@ "Функція TalkBack забезпечує мовне голосове відтворення для користувачів із вадами зору. Хочете встановити її безкоштовно з Android Market?" "Немає опису." "Налаштування" + "Друк" + "Налаштування друку" + "Служби" + "Використовувати %1$s?" + "%1$s отримуватиме документи, які ви друкуєте. Такі документи можуть містити конфіденційну інформацію." + "Не встановлено жодну службу" + "Налаштування" + "Додати принтери" + "Увімк." + "Вимк." "Акумулятор" "На що споживається заряд акумулятора" "Дані використання акумулятора недоступні" @@ -1405,8 +1421,10 @@ "Wi-Fi працює" "Пристрій" "Телефон" - "Надісл. дані" - "Отримані дані" + "Мобільні дані надіслано" + "Мобільні дані отримано" + "Дані Wi‑Fi надіслано" + "Дані Wi‑Fi отримано" "Звук" "Відео" "Час роботи" @@ -1460,6 +1478,7 @@ "Вис. зв." "Впливає на тон відтворюваного тексту" "Мова" + "Мову не вибрано" "Устан. голос для відтворюваного тексту залежно від мови" "Прослухайте приклад" "Відтворити коротку демонстрацію синтезу мови" @@ -1594,7 +1613,7 @@ "EAP не підтримується." "Під час налаштування неможливо встановити параметри з’єднання Wi‑Fi через протокол EAP. Це можна зробити після налаштування в меню Налаштування > Бездротовий зв’язок і мережі." "Під’єднання може тривати кілька хвилин..." - "Торкніться опції ""Далі"", щоб продовжити налаштування."\n\n"Торкніться опції ""Назад"", щоб під’єднатися до іншої мережі Wi‑Fi." + "Торкніться опції ""Далі"", щоб продовжити налаштування.\n\nТоркніться опції ""Назад"", щоб під’єднатися до іншої мережі Wi‑Fi." "Синхронізацію ввімкнено" "Синхронізацію вимкнено" "Помилка синхронізації" @@ -1676,8 +1695,7 @@ "Підсвічув. область у вікні під час рисування з GPU" "Показ. апаратні оновлення" "Виділяти апаратні рівні зеленим під час оновлення" - "Показати накладання GPU" - "Від кращого до гіршого: синій, зелений, світло-червоний, червоний" + "Налагодити накладання GPU" "Вимк. апаратн. накладання" "Завжди використовувати GPU для компонування екрана" "Увімк. трасування OpenGL" @@ -1738,11 +1756,11 @@ "Вимикати фонові дані в мобільних мережах. Використов. не мобільні мережі, якщо доступно." "Щоб обмеж.фонові дані для прогр., споч. встанов.ліміт моб.даних." "Обмежити використання фонових даних?" - "Якщо доступні лише мобільні мережі, програми, що використовують фонові дані, можуть не працювати."\n\n"Відповідніші елементи керування використанням даних можна знайти в налаштуваннях цієї програми." + "Якщо доступні лише мобільні мережі, програми, що використовують фонові дані, можуть не працювати.\n\nВідповідніші елементи керування використанням даних можна знайти в налаштуваннях цієї програми." "Обмеження фонових даних можливе, лише якщо встановлено ліміт мобільних даних." "Увімк. автосинхронізацію даних?" - "Будь-які зміни до облікових записів, внесені в Інтернеті, автоматично копіюватимуться на ваш планшетний ПК."\n\n"Деякі облікові записи також можуть автоматично копіювати в Інтернет зміни, внесені на планшетному ПК. Так працює обліковий запис Google."\n\n"Щоб вибрати типи інформації, які потрібно синхронізувати з обліковими записами, перейдіть у Налаштування > Облікові записи." - "Будь-які зміни до облікових записів, внесені в Інтернеті, автоматично копіюватимуться на ваш телефон."\n\n"Деякі облікові записи також можуть автоматично копіювати в Інтернет зміни, внесені на телефоні. Так працює обліковий запис Google."\n\n"Щоб вибрати типи інформації, які потрібно синхронізувати з обліковими записами, перейдіть у Налаштування > Облікові записи." + "Будь-які зміни до облікових записів, внесені в Інтернеті, автоматично копіюватимуться на ваш планшетний ПК.\n\nДеякі облікові записи також можуть автоматично копіювати в Інтернет зміни, внесені на планшетному ПК. Так працює обліковий запис Google.\n\nЩоб вибрати типи інформації, які потрібно синхронізувати з обліковими записами, перейдіть у Налаштування > Облікові записи." + "Будь-які зміни до облікових записів, внесені в Інтернеті, автоматично копіюватимуться на ваш телефон.\n\nДеякі облікові записи також можуть автоматично копіювати в Інтернет зміни, внесені на телефоні. Так працює обліковий запис Google.\n\nЩоб вибрати типи інформації, які потрібно синхронізувати з обліковими записами, перейдіть у Налаштування > Облікові записи." "Вимк. автосинхронізацію даних?" "Це заощаджуватиме використання даних і заряду акумулятора. Проте вам доведеться вручну синхронізувати кожен обліковий запис, щоб зібрати останні відомості. Ви також не отримуватимете сповіщення про оновлення." "Дата скидання циклу використання даних" @@ -1751,12 +1769,12 @@ "Установити застереження про використання даних" "Установити ліміт використання даних" "Обмежити використання даних" - "Мобільне передавання даних буде вимкнено в разі досягнення вказаного ліміту."\n\n"Оскільки методи обліку використання даних планшетного ПК й оператора можуть відрізнятися, радимо використовувати занижений ліміт." - "Мобільне передавання даних буде вимкнено в разі досягнення вказаного ліміту."\n\n"Оскільки методи обліку використання даних телефону й оператора можуть відрізнятися, радимо використовувати занижений ліміт." + "Мобільне передавання даних буде вимкнено в разі досягнення вказаного ліміту.\n\nОскільки методи обліку використання даних планшетного ПК й оператора можуть відрізнятися, радимо використовувати занижений ліміт." + "Мобільне передавання даних буде вимкнено в разі досягнення вказаного ліміту.\n\nОскільки методи обліку використання даних телефону й оператора можуть відрізнятися, радимо використовувати занижений ліміт." "Обмежити використання фонових даних?" "Якщо обмежити мобільне передавання даних у фоновому режимі, деякі програми та служби працюватимуть лише під час з’єднання з мережею Wi-Fi." - "Якщо обмежити мобільне передавання даних у фоновому режимі, деякі програми та служби працюватимуть лише під час з’єднання з мережею Wi-Fi."\n\n"Таке налаштування впливає на всіх користувачів цього планшетного ПК." - "Якщо обмежити мобільне передавання даних у фоновому режимі, деякі програми та служби працюватимуть лише під час з’єднання з мережею Wi-Fi."\n\n"Таке налаштування впливає на всіх користувачів цього телефону." + "Якщо обмежити мобільне передавання даних у фоновому режимі, деякі програми та служби працюватимуть лише під час з’єднання з мережею Wi-Fi.\n\nТаке налаштування впливає на всіх користувачів цього планшетного ПК." + "Якщо обмежити мобільне передавання даних у фоновому режимі, деякі програми та служби працюватимуть лише під час з’єднання з мережею Wi-Fi.\n\nТаке налаштування впливає на всіх користувачів цього телефону." "^1"" ""^2"\n"застереження" "^1"" ""^2"\n"максимум" "Видалені програми" @@ -1843,8 +1861,8 @@ "Користувач" "Профіль з обмеженням" "Додати нового користувача" - "Щоб користуватися цим пристроєм спільно, потрібно створити додаткових користувачів. Кожен користувач має власну пам’ять, яку може використовувати для зберігання програм, фонових малюнків тощо. Користувачі також можуть налаштовувати певні параметри планшетного ПК, як-от Wi-Fi, які застосовуватимуться до решти користувачів."\n\n"Особа, для якої ви створили нового користувача, має здійснити процес налаштування."\n\n"Будь-який користувач може схвалювати дозволи на оновлення програм від імені інших користувачів." - "Особа, для якої ви створили нового користувача, має здійснити процес налаштування."\n\n"Будь-який користувач може схвалювати дозволи на оновлення програм від імені інших користувачів." + "Щоб користуватися цим пристроєм спільно, потрібно створити додаткових користувачів. Кожен користувач має власну пам’ять, яку може використовувати для зберігання програм, фонових малюнків тощо. Користувачі також можуть налаштовувати певні параметри планшетного ПК, як-от Wi-Fi, які застосовуватимуться до решти користувачів.\n\nОсоба, для якої ви створили нового користувача, має здійснити процес налаштування.\n\nБудь-який користувач може схвалювати дозволи на оновлення програм від імені інших користувачів." + "Особа, для якої ви створили нового користувача, має здійснити процес налаштування.\n\nБудь-який користувач може схвалювати дозволи на оновлення програм від імені інших користувачів." "Створити користувача зараз?" "Новий користувач має взяти планшетний ПК та налаштувати свій простір" "Налаштувати профіль зараз?" @@ -1875,6 +1893,9 @@ "Це налаштування впливає на всіх користувачів цього телефону." "Змінити мову" "Змінити розмір шрифту" + "Обмеження" + "Зняти обмеження" + "Змінити PIN-код" "Показати сповіщення" "Довідка" "Обліковий запис для вмісту" diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml index 82ff460aa3a..b44f15de2b4 100644 --- a/res/values-vi/arrays.xml +++ b/res/values-vi/arrays.xml @@ -233,7 +233,8 @@ "Vị trí" "Cá nhân" "Nhắn tin" - "Thiết bị" + "Truyền thông" + "Thiết bị"
    "vị trí tổng thể" @@ -267,6 +268,17 @@ "phát âm thanh" "đọc khay nhớ tạm" "sửa đổi khay nhớ tạm" + "các nút phương tiện truyền thông" + "tập trung âm thanh" + "âm lượng chính" + "âm lượng thoại" + "âm lượng chuông" + "âm lượng phương tiện truyền thông" + "âm lượng báo thức" + "âm lượng thông báo" + "âm lượng bluetooth" + "không khóa màn hình" + "giám sát vị trí" "Vị trí" @@ -300,12 +312,33 @@ "Phát âm thanh" "Đọc khay nhớ tạm" "Sửa đổi khay nhớ tạm" + "Các nút phương tiện" + "Tập trung âm thanh" + "Âm lượng chính" + "Âm lượng thoại" + "Âm lượng chuông" + "Âm lượng phương tiện" + "Âm lượng báo thức" + "Âm lượng thông báo" + "Âm lượng bluetooth" + "Không khóa màn hình" + "Vị trí" "Ngắn" "Trung bình" "Dài" + + "Dalvik" + "ART" + "ART (gỡ lỗi)" + + + "Sử dụng Dalvik" + "Sử dụng ART" + "Sử dụng bản dựng gỡ lỗi ART" + "Không bao giờ kiểm tra" "Chỉ kiểm tra nội dung DRM" @@ -367,6 +400,11 @@ "Trên màn hình dưới dạng đường" "Trong adb shell dumpsys gfxinfo" + + "Tắt" + "Hiển thị các vùng vẽ quá" + "Hiển thị bộ đo mức vẽ quá" + "Giới hạn tiêu chuẩn" "Không có quá trình nền" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 7a49a791a01..d851660e450 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -275,8 +275,8 @@ "Bạn đã mất kết nối dữ liệu vì bạn đã tắt chuyển vùng dữ liệu của mạng gia đình của mình." "Bật" "Khi cho phép chuyển vùng dữ liệu, bạn có thể bị tính phí chuyển vùng đáng kể!" - "Khi bạn cho phép chuyển vùng dữ liệu, bạn có thể phải trả khoản phí chuyển vùng đáng kể!"\n\n"Cài đặt này ảnh hưởng đến tất cả người dùng trên máy tính bảng này." - "Khi bạn cho phép chuyển vùng dữ liệu, bạn có thể phải trả khoản phí chuyển vùng đáng kể!"\n\n"Cài đặt này ảnh hưởng đến tất cả người dùng trên điện thoại này." + "Khi bạn cho phép chuyển vùng dữ liệu, bạn có thể phải trả khoản phí chuyển vùng đáng kể!\n\nCài đặt này ảnh hưởng đến tất cả người dùng trên máy tính bảng này." + "Khi bạn cho phép chuyển vùng dữ liệu, bạn có thể phải trả khoản phí chuyển vùng đáng kể!\n\nCài đặt này ảnh hưởng đến tất cả người dùng trên điện thoại này." "Cho phép chuyển vùng dữ liệu?" "Chọn nhà cung cấp dịch vụ" "Chọn nhà cung cấp dịch vụ mạng" @@ -322,8 +322,8 @@ "Yêu cầu PIN số hoặc mật khẩu để giải mã điện thoại của bạn mỗi lần bạn bật điện thoại" "Yêu cầu PIN số hoặc mật khẩu để giải mã điện thoại của bạn mỗi lần bạn bật điện thoại" "Đã mã hóa" - "Bạn có thể mã hóa tài khoản, cài đặt, ứng dụng đã tải xuống và dữ liệu, phương tiện của các ứng dụng đó cũng như các tệp khác của bạn. Sau khi mã hóa máy tính bảng, bạn cần nhập mã PIN số hoặc mật khẩu để giải mã mỗi lần bạn bật máy tính bảng: bạn không thể hủy mã hóa máy tính bảng trừ khi thiết lập lại dữ liệu ban đầu, xóa tất cả dữ liệu của bạn."\n\n"Quá trình mã hóa mất ít nhất một giờ. Bạn phải bắt đầu khi pin đã được sạc và vẫn cắm máy tính bảng cho tới khi quá trình mã hóa hoàn tất. Nếu làm gián đoạn quá trình mã hóa, bạn sẽ mất một số hoặc tất cả dữ liệu của bạn." - "Bạn có thể mã hóa tài khoản, cài đặt, ứng dụng đã tải xuống và dữ liệu, phương tiện của các ứng dụng đó cũng như các tệp khác của bạn. Sau khi mã hóa điện thoại, bạn cần nhập mã PIN số hoặc mật khẩu để giải mã mỗi lần bạn bật điện thoại. Bạn không thể hủy mã hóa điện thoại trừ khi thiết lập lại dữ liệu ban đầu, xóa tất cả dữ liệu của bạn."\n\n"Quá trình mã hóa mất ít nhất một giờ. Bạn phải bắt đầu khi pin đã được sạc và vẫn cắm điện thoại cho tới khi quá trình mã hóa hoàn tất. Nếu làm gián đoạn quá trình mã hóa, bạn sẽ mất một số hoặc tất cả dữ liệu của bạn." + "Bạn có thể mã hóa tài khoản, cài đặt, ứng dụng đã tải xuống và dữ liệu, phương tiện của các ứng dụng đó cũng như các tệp khác của bạn. Sau khi mã hóa máy tính bảng, bạn cần nhập mã PIN số hoặc mật khẩu để giải mã mỗi lần bạn bật máy tính bảng: bạn không thể hủy mã hóa máy tính bảng trừ khi thiết lập lại dữ liệu ban đầu, xóa tất cả dữ liệu của bạn.\n\nQuá trình mã hóa mất ít nhất một giờ. Bạn phải bắt đầu khi pin đã được sạc và vẫn cắm máy tính bảng cho tới khi quá trình mã hóa hoàn tất. Nếu làm gián đoạn quá trình mã hóa, bạn sẽ mất một số hoặc tất cả dữ liệu của bạn." + "Bạn có thể mã hóa tài khoản, cài đặt, ứng dụng đã tải xuống và dữ liệu, phương tiện của các ứng dụng đó cũng như các tệp khác của bạn. Sau khi mã hóa điện thoại, bạn cần nhập mã PIN số hoặc mật khẩu để giải mã mỗi lần bạn bật điện thoại. Bạn không thể hủy mã hóa điện thoại trừ khi thiết lập lại dữ liệu ban đầu, xóa tất cả dữ liệu của bạn.\n\nQuá trình mã hóa mất ít nhất một giờ. Bạn phải bắt đầu khi pin đã được sạc và vẫn cắm điện thoại cho tới khi quá trình mã hóa hoàn tất. Nếu làm gián đoạn quá trình mã hóa, bạn sẽ mất một số hoặc tất cả dữ liệu của bạn." "Mã hóa máy tính bảng" "Mã hóa điện thoại" "Vui lòng sạc pin và thử lại." @@ -339,8 +339,8 @@ "Hãy thử lại sau ^1 giây." "Nhập mật khẩu của bạn" "Mã hóa không thành công" - "Quá trình mã hóa đã bị gián đoạn và không thể hoàn tất. Do đó, dữ liệu trên máy tính bảng của bạn không còn có thể truy cập được. "\n\n" Để tiếp tục sử dụng máy tính bảng của mình, bạn cần đặt lại về cài đặt ban đầu. Khi bạn thiết lập máy tính bảng sau khi đặt lại, bạn sẽ có cơ hội khôi phục mọi dữ liệu được sao lưu vào Tài khoản Google của mình." - "Quá trình mã hóa bị gián đoạn và không thể hoàn tất. Do đó, dữ liệu trên điện thoại của bạn không còn có thể truy cập được. "\n\n"Để tiếp tục sử dụng điện thoại của mình, bạn cần đặt lại về cài đặt ban đầu. Khi bạn thiết lập điện thoại sau khi đặt lại, bạn sẽ có cơ hội khôi phục mọi dữ liệu được sao lưu vào Tài khoản Google của mình." + "Quá trình mã hóa đã bị gián đoạn và không thể hoàn tất. Do đó, dữ liệu trên máy tính bảng của bạn không còn có thể truy cập được. \n\n Để tiếp tục sử dụng máy tính bảng của mình, bạn cần đặt lại về cài đặt ban đầu. Khi bạn thiết lập máy tính bảng sau khi đặt lại, bạn sẽ có cơ hội khôi phục mọi dữ liệu được sao lưu vào Tài khoản Google của mình." + "Quá trình mã hóa bị gián đoạn và không thể hoàn tất. Do đó, dữ liệu trên điện thoại của bạn không còn có thể truy cập được. \n\nĐể tiếp tục sử dụng điện thoại của mình, bạn cần đặt lại về cài đặt ban đầu. Khi bạn thiết lập điện thoại sau khi đặt lại, bạn sẽ có cơ hội khôi phục mọi dữ liệu được sao lưu vào Tài khoản Google của mình." "Chuyển phương thức nhập" "Chọn khóa màn hình" "Chọn khóa dự phòng" @@ -514,6 +514,7 @@ "Đang kết nối" "Đã kết nối" "Khả dụng" + "Đang được sử dụng" "Cài đặt hiển thị" "Ngắt kết nối?" "Tác vụ này sẽ kết thúc kết nối của bạn với:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Tắt" "Không khả dụng vì NFC bị tắt" "Android Beam" - "Khi tính năng này được bật, bạn có thể truyền nội dung ứng dụng vào thiết bị có khả năng NFC khác bằng cách giữ các thiết bị gần nhau. Ví dụ: bạn có thể truyền các trang Trình duyệt, video trên YouTube, danh sách liên hệ Người và nhiều thứ khác."\n\n"Chỉ cần đưa thiết bị gần nhau (thường quay lưng lại với nhau) rồi chạm vào màn hình của bạn. Ứng dụng xác định nội dung nào được truyền." + "Khi tính năng này được bật, bạn có thể truyền nội dung ứng dụng vào thiết bị có khả năng NFC khác bằng cách giữ các thiết bị gần nhau. Ví dụ: bạn có thể truyền các trang Trình duyệt, video trên YouTube, danh sách liên hệ Người và nhiều thứ khác.\n\nChỉ cần đưa thiết bị gần nhau (thường quay lưng lại với nhau) rồi chạm vào màn hình của bạn. Ứng dụng xác định nội dung nào được truyền." "Khám phá dịch vụ mạng" "Cho phép ứng dụng trên các thiết bị khác khám phá ứng dụng trên thiết bị này" "Wi‑Fi" @@ -620,7 +621,7 @@ "Được bảo mật bằng %1$s" ", được bảo mật bằng %1$s" "Không" - "Để nâng cao độ chính xác vị trí và phục vụ các mục đích khác, %1$s muốn bật tính năng quét mạng ngay cả khi Wi-Fi đang tắt."\n\n"Cho phép cài đặt này đối với tất cả ứng dụng muốn quét?" + "Để nâng cao độ chính xác vị trí và phục vụ các mục đích khác, %1$s muốn bật tính năng quét mạng ngay cả khi Wi-Fi đang tắt.\n\nCho phép cài đặt này đối với tất cả ứng dụng muốn quét?" "Cho phép" "Từ chối" "Kết nối" @@ -632,8 +633,8 @@ "Hủy" "Vẫn bỏ qua" "Không bỏ qua" - "CẢNH BÁO: Bạn có thể phải trả thêm phí dữ liệu cho nhà cung cấp dịch vụ."\n\n"Thiết lập máy tính bảng có thể yêu cầu hoạt động mạng đáng kể." - "CẢNH BÁO: Bạn có thể phải trả thêm phí dữ liệu cho nhà cung cấp dịch vụ."\n\n"Thiết lập điện thoại có thể yêu cầu hoạt động mạng đáng kể." + "CẢNH BÁO: Bạn có thể phải trả thêm phí dữ liệu cho nhà cung cấp dịch vụ.\n\nThiết lập máy tính bảng có thể yêu cầu hoạt động mạng đáng kể." + "CẢNH BÁO: Bạn có thể phải trả thêm phí dữ liệu cho nhà cung cấp dịch vụ.\n\nThiết lập điện thoại có thể yêu cầu hoạt động mạng đáng kể." "CẢNH BÁO: Máy tính bảng sẽ không thể xác minh rằng phần mềm của bạn đã cập nhật cho đến khi bạn có kết nối internet." "CẢNH BÁO: Điện thoại sẽ không thể xác minh rằng phần mềm của bạn đã cập nhật cho đến khi bạn có kết nối internet." "Máy tính bảng không thể kết nối với mạng Wi‑Fi này." @@ -773,9 +774,9 @@ "Mã PIN của SIM" "Mã PIN không chính xác" "Các mã PIN không khớp" - "Không thể thay đổi mã PIN."\n"Có thể mã PIN không đúng." + "Không thể thay đổi mã PIN.\nCó thể mã PIN không đúng." "Mã PIN của SIM đã được thay đổi thành công" - "Không thể thay đổi trạng thái khóa thẻ SIM."\n"Có thể mã PIN không đúng." + "Không thể thay đổi trạng thái khóa thẻ SIM.\nCó thể mã PIN không đúng." "OK" "Hủy" "Trạng thái của máy tính bảng" @@ -918,9 +919,9 @@ "Đặt lại về dữ liệu gốc" "Xóa tất cả dữ liệu trên máy tính bảng" "Xóa tất cả dữ liệu trên điện thoại" - "Tác vụ này sẽ xóa tất cả dữ liệu từ ""bộ nhớ trong"" của máy tính bảng, bao gồm:"\n\n
  • "Tài khoản Google của bạn"
  • \n
  • "Dữ liệu và cài đặt hệ thống và ứng dụng"
  • \n
  • "Ứng dụng đã tải xuống"
  • - "Tác vụ này sẽ xóa tất cả dữ liệu từ ""bộ nhớ trong"" của điện thoại, bao gồm:"\n\n
  • "Tài khoản Google của bạn"
  • \n
  • "Dữ liệu và cài đặt hệ thống và ứng dụng"
  • \n
  • "Ứng dụng đã tải xuống"
  • - \n\n"Bạn hiện đã đăng nhập vào các tài khoản sau đây:"\n + "Tác vụ này sẽ xóa tất cả dữ liệu từ ""bộ nhớ trong"" của máy tính bảng, bao gồm:\n\n"
  • "Tài khoản Google của bạn"
  • \n
  • "Dữ liệu và cài đặt hệ thống và ứng dụng"
  • \n
  • "Ứng dụng đã tải xuống"
  • + "Tác vụ này sẽ xóa tất cả dữ liệu từ ""bộ nhớ trong"" của điện thoại, bao gồm:\n\n"
  • "Tài khoản Google của bạn"
  • \n
  • "Dữ liệu và cài đặt hệ thống và ứng dụng"
  • \n
  • "Ứng dụng đã tải xuống"
  • + \n\n"Bạn hiện đã đăng nhập vào các tài khoản sau đây:\n"
  • "Nhạc"
  • \n
  • "Ảnh"
  • \n
  • "Dữ liệu người dùng khác"
  • \n\n"Để xóa nhạc, hình ảnh và dữ liệu người dùng khác, cần xóa ""bộ lưu trữ USB""." \n\n"Đồng thời, để xóa nhạc, hình ảnh và dữ liệu người dùng khác, cần xóa ""thẻ""." @@ -1105,7 +1106,7 @@ "Hiển thị quá trình đã được lưu trong bộ nhớ cache" "Đặt lại tùy chọn ứng dụng" "Đặt lại tùy chọn ứng dụng?" - "Thao tác này sẽ đặt lại tất cả tùy chọn cho:"\n\n" "
  • "Ứng dụng đã tắt"
  • \n" "
  • "Thông báo ứng dụng đã tắt"
  • \n" "
  • "Ứng dụng mặc định cho tác vụ"
  • \n" "
  • "Hạn chế dữ liệu nền cho ứng dụng"
  • \n\n" Bạn sẽ mất mọi dữ liệu ứng dụng."
    + "Thao tác này sẽ đặt lại tất cả tùy chọn cho:\n\n "
  • "Ứng dụng đã tắt"
  • \n" "
  • "Thông báo ứng dụng đã tắt"
  • \n" "
  • "Ứng dụng mặc định cho tác vụ"
  • \n" "
  • "Hạn chế dữ liệu nền cho ứng dụng"
  • \n\n" Bạn sẽ mất mọi dữ liệu ứng dụng."
    "Đặt lại ứng dụng" "Quản lý dung lượng" "Bộ lọc" @@ -1240,9 +1241,7 @@ "Để chuyển, nhấn Control-Phím cách" "Mặc định" "Bố cục bàn phím" - "Từ điển người dùng" - "Từ điển cá nhân" - "Từ điển cá nhân" + "Từ điển cá nhân" "Thêm" "Thêm vào từ điển" @@ -1303,6 +1302,11 @@ "Bao gồm tùy chọn trong trình đơn nguồn để thêm báo cáo lỗi" "Không khóa màn hình" "Màn hình sẽ không bao giờ chuyển sang chế độ nghỉ khi sạc" + "Bật nhật ký theo dõi HCI Bluetooth" + "Giữ tất cả các gói HCI bluetooth trong một tệp" + "Chọn thời gian chạy" + "Chọn thời gian chạy" + "Khởi động lại để thay đổi thời gian chạy từ %1$s sang %2$s?" "Cho phép vị trí mô phỏng" "Cho phép vị trí mô phỏng" "Cho phép gỡ lỗi USB?" @@ -1315,11 +1319,13 @@ "Bảo vệ bộ lưu trữ USB" "Các ứng dụng phải yêu cầu quyền đọc bộ lưu trữ USB" "Bảo vệ bộ lưu trữ USB?" - "Khi bộ lưu trữ USB được bảo vệ, các ứng dụng phải yêu cầu quyền đọc dữ liệu từ bộ nhớ ngoài."\n\n"Một số ứng dụng có thể không hoạt động cho đến khi được nhà phát triển cập nhật." + "Khi bộ lưu trữ USB được bảo vệ, các ứng dụng phải yêu cầu quyền đọc dữ liệu từ bộ nhớ ngoài.\n\nMột số ứng dụng có thể không hoạt động cho đến khi được nhà phát triển cập nhật." "Bảo vệ thẻ SD" "Các ứng dụng phải yêu cầu quyền đọc thẻ SD" "Bảo vệ thẻ SD?" - "Khi thẻ SD được bảo vệ, các ứng dụng phải yêu cầu quyền đọc dữ liệu từ bộ nhớ ngoài."\n\n"Một số ứng dụng có thể không hoạt động cho đến khi được nhà phát triển cập nhật." + "Khi thẻ SD được bảo vệ, các ứng dụng phải yêu cầu quyền đọc dữ liệu từ bộ nhớ ngoài.\n\nMột số ứng dụng có thể không hoạt động cho đến khi được nhà phát triển cập nhật." + "Dòng lệnh cục bộ" + "Bật ứng dụng dòng lệnh cung cấp quyền truy cập vỏ cục bộ" "Chọn tiện ích" "Chọn tiện ích" "Tạo tiện ích và cho phép truy cập?" @@ -1340,11 +1346,11 @@ "Dịch vụ" "Hệ thống" "Thao tác thu phóng" - "Khi tính năng này được bật, bạn có thể phóng to và thu nhỏ bằng cách chạm ba lần vào màn hình."\n\n"Trong khi phóng to, bạn có thể:"\n
    • "Xoay: Kéo hai hoặc nhiều ngón tay qua màn hình."
    • \n
    • "Điều chỉnh mức thu phóng: Chụm hai hoặc nhiều ngón tay với nhau hoặc tách chúng ra."
    \n\n"Bạn cũng có thể tạm thời thu phóng các mục bên dưới ngón tay bạn bằng cách nhấn ba lần và giữ. Ở trạng thái thu phóng này, bạn có thể kéo ngón tay để khám phá các phần khác nhau của màn hình. Thả ngón tay để trở về trạng thái trước."\n\n"Lưu ý: Nhấn ba lần để thu phóng toàn bộ trừ bàn phím và thanh điều hướng."
    + "Khi tính năng này được bật, bạn có thể phóng to và thu nhỏ bằng cách chạm ba lần vào màn hình.\n\nTrong khi phóng to, bạn có thể:\n"
    • "Xoay: Kéo hai hoặc nhiều ngón tay qua màn hình."
    • \n
    • "Điều chỉnh mức thu phóng: Chụm hai hoặc nhiều ngón tay với nhau hoặc tách chúng ra."
    \n\n"Bạn cũng có thể tạm thời thu phóng các mục bên dưới ngón tay bạn bằng cách nhấn ba lần và giữ. Ở trạng thái thu phóng này, bạn có thể kéo ngón tay để khám phá các phần khác nhau của màn hình. Thả ngón tay để trở về trạng thái trước.\n\nLưu ý: Nhấn ba lần để thu phóng toàn bộ trừ bàn phím và thanh điều hướng."
    "Phím tắt trợ năng" "Bật" "Tắt" - "Khi tính năng này được bật, bạn có thể nhanh chóng bật các tính năng trợ năng trong hai bước:"\n\n"Bước 1: Bấm và giữ nút nguồn cho đến khi bạn nghe thấy một âm thanh hoặc cảm thấy rung."\n\n"Bước 2: Chạm và giữ hai ngón tay cho đến khi bạn nghe thấy xác nhận bằng âm thanh."\n\n"Nếu thiết bị có nhiều người dùng, việc sử dụng lối tắt này trên màn hình khóa tạm thời bật trợ năng cho đến khi thiết bị được mở khóa." + "Khi tính năng này được bật, bạn có thể nhanh chóng bật các tính năng trợ năng trong hai bước:\n\nBước 1: Bấm và giữ nút nguồn cho đến khi bạn nghe thấy một âm thanh hoặc cảm thấy rung.\n\nBước 2: Chạm và giữ hai ngón tay cho đến khi bạn nghe thấy xác nhận bằng âm thanh.\n\nNếu thiết bị có nhiều người dùng, việc sử dụng lối tắt này trên màn hình khóa tạm thời bật trợ năng cho đến khi thiết bị được mở khóa." "Chữ lớn" "Thu phóng màn hình" "Tự động cập nhật thu phóng màn hình" @@ -1366,6 +1372,16 @@ "TalkBack cung cấp phản hồi bằng giọng nói nhằm giúp người dùng bị mù và mắt kém. Bạn có muốn cài đặt ứng dụng này miễn phí từ Android Market không?" "Không có mô tả nào được cung cấp." "Cài đặt" + "In" + "Cài đặt in" + "Dịch vụ" + "Sử dụng %1$s?" + "%1$s có thể nhận tài liệu mà bạn in. Những tài liệu như vậy có thể chứa dữ liệu nhạy cảm." + "Chưa có dịch vụ nào được cài đặt" + "Cài đặt" + "Thêm máy in" + "Bật" + "Tắt" "Pin" "Cái gì đang sử dụng pin" "Không có dữ liệu sử dụng pin." @@ -1405,8 +1421,10 @@ "Đang chạy Wi-Fi" "Máy tính bảng" "Điện thoại" - "Dữ liệu đã gửi" - "Dữ liệu đã nhận được" + "Đã gửi dữ liệu di động" + "Đã nhận dữ liệu di động" + "Đã gửi dữ liệu Wi‑Fi" + "Đã nhận dữ liệu Wi‑Fi" "Âm thanh" "Video" "Thời gian bật" @@ -1460,6 +1478,7 @@ "Độ cao" "Ảnh hưởng đến âm của văn bản nói" "Ngôn ngữ" + "Không thể chọn ngôn ngữ" "Đặt giọng nói ngôn ngữ cụ thể cho văn bản nói" "Nghe ví dụ" "Phát minh hoạ ngắn về tổng hợp tiếng nói" @@ -1594,7 +1613,7 @@ "EAP không được hỗ trợ." "Bạn không thể định cấu hình kết nối EAP Wi‑Fi trong khi thiết lập. Sau khi thiết lập, bạn có thể thực hiện điều đó trong Cài đặt > Không dây và mạng." "Kết nối có thể mất vài phút..." - "Chạm ""Tiếp theo"" để tiếp tục thiết lập."\n\n"Chạm ""Quay lại"" để kết nối với mạng Wi‑Fi khác." + "Chạm ""Tiếp theo"" để tiếp tục thiết lập.\n\nChạm ""Quay lại"" để kết nối với mạng Wi‑Fi khác." "Đồng bộ hóa đã được bật" "Đồng bộ hóa đã bị tắt" "Lỗi đồng bộ hóa" @@ -1676,8 +1695,7 @@ "Chuyển nhanh chế độ xem trong cửa sổ khi được vẽ bằng GPU" "Hiện c.nhật lớp phần cứng" "Lớp phần cứng flash có màu xanh khi chúng cập nhật" - "Hiển thị số tiền rút vượt quá bằng GPU" - "Từ tốt nhất đến tồi nhất: lam, lục, đỏ tươi, đỏ" + "Hiển thị mức vẽ quá GPU" "Vô hiệu hóa các lớp phủ HW" "Luôn sử dụng GPU để tổng hợp màn hình" "Bật theo dõi OpenGL" @@ -1738,11 +1756,11 @@ "Tắt dữ liệu nền trên mạng di động. Sử dụng mạng không di động nếu cần." "Để giới hạn dữ liệu nền cho ứng dụng này, trước tiên hãy đặt giới hạn dữ liệu di động." "Giới hạn dữ liệu nền?" - "Tính năng này có thể khiến ứng dụng phụ thuộc vào dữ liệu nền ngừng hoạt động chỉ khi có mạng di động."\n\n"Bạn có thể tìm thấy biện pháp kiểm soát mức sử dụng dữ liệu thích hợp khác trong các cài đặt có trong ứng dụng." + "Tính năng này có thể khiến ứng dụng phụ thuộc vào dữ liệu nền ngừng hoạt động chỉ khi có mạng di động.\n\nBạn có thể tìm thấy biện pháp kiểm soát mức sử dụng dữ liệu thích hợp khác trong các cài đặt có trong ứng dụng." "Chỉ có thể giới hạn dữ liệu nền khi bạn đặt giới hạn dữ liệu di động." "Bật tính năng tự động đồng bộ hóa dữ liệu?" - "Mọi thay đổi bạn thực hiện cho các tài khoản của bạn trên web sẽ tự động được sao chép sang máy tính bảng của bạn."\n\n"Một số tài khoản cũng có thể tự động sao chép mọi thay đổi bạn thực hiện trên máy tính bảng lên web. Tài khoản Google hoạt động theo cách này."\n\n"Để chọn loại thông tin sẽ đồng bộ hóa với từng tài khoản, truy cập Cài đặt và tài khoản." - "Mọi thay đổi bạn thực hiện cho các tài khoản của bạn trên web sẽ được tự động sao chép sang điện thoại của bạn."\n\n"Một số tài khoản cũng có thể tự động đồng bộ hóa mọi thay đổi bạn thực hiện trên điện thoại với web. Tài khoản Google hoạt động theo cách này."\n\n"Để chọn loại thông tin sẽ đồng bộ hóa trong từng tài khoản, truy cập Cài đặt và tài khoản." + "Mọi thay đổi bạn thực hiện cho các tài khoản của bạn trên web sẽ tự động được sao chép sang máy tính bảng của bạn.\n\nMột số tài khoản cũng có thể tự động sao chép mọi thay đổi bạn thực hiện trên máy tính bảng lên web. Tài khoản Google hoạt động theo cách này.\n\nĐể chọn loại thông tin sẽ đồng bộ hóa với từng tài khoản, truy cập Cài đặt và tài khoản." + "Mọi thay đổi bạn thực hiện cho các tài khoản của bạn trên web sẽ được tự động sao chép sang điện thoại của bạn.\n\nMột số tài khoản cũng có thể tự động đồng bộ hóa mọi thay đổi bạn thực hiện trên điện thoại với web. Tài khoản Google hoạt động theo cách này.\n\nĐể chọn loại thông tin sẽ đồng bộ hóa trong từng tài khoản, truy cập Cài đặt và tài khoản." "Tắt tính năng tự động đồng bộ hóa dữ liệu?" "Việc này sẽ bảo toàn mức sử dụng dữ liệu và pin, tuy nhiên bạn sẽ cần phải đồng bộ hóa từng tài khoản theo cách thủ công để thu thập thông tin gần đây. Và bạn sẽ không nhận được thông báo khi có cập nhật." "Ngày đặt lại chu kỳ sử dụng" @@ -1751,12 +1769,12 @@ "Thiết lập cảnh báo sử dụng dữ liệu" "Thiết lập giới hạn sử dụng dữ liệu" "Giới hạn sử dụng dữ liệu" - "Kết nối dữ liệu di động của bạn sẽ bị vô hiệu hóa khi đạt đến giới hạn được chỉ định."\n\n"Vì việc sử dụng dữ liệu được máy tính bảng của bạn tính và nhà cung cấp dịch vụ của bạn có thể tính mức sử dụng khác nhau, hãy xem xét việc sử dụng giới hạn vừa phải." - "Kết nối dữ liệu di động của bạn sẽ bị vô hiệu hóa khi đạt đến giới hạn được chỉ định."\n\n"Vì việc sử dụng dữ liệu được điện thoại của bạn tính và nhà cung cấp dịch vụ của bạn có thể tính mức sử dụng khác nhau, hãy xem xét việc sử dụng giới hạn vừa phải." + "Kết nối dữ liệu di động của bạn sẽ bị vô hiệu hóa khi đạt đến giới hạn được chỉ định.\n\nVì việc sử dụng dữ liệu được máy tính bảng của bạn tính và nhà cung cấp dịch vụ của bạn có thể tính mức sử dụng khác nhau, hãy xem xét việc sử dụng giới hạn vừa phải." + "Kết nối dữ liệu di động của bạn sẽ bị vô hiệu hóa khi đạt đến giới hạn được chỉ định.\n\nVì việc sử dụng dữ liệu được điện thoại của bạn tính và nhà cung cấp dịch vụ của bạn có thể tính mức sử dụng khác nhau, hãy xem xét việc sử dụng giới hạn vừa phải." "Giới hạn dữ liệu nền?" "Nếu bạn hạn chế dữ liệu nền trên thiết bị di động, một số ứng dụng và dịch vụ sẽ không hoạt động trừ khi bạn kết nối với mạng Wi-Fi." - "Nếu bạn hạn chế dữ liệu nền trên thiết bị di động, một số ứng dụng và dịch vụ sẽ không hoạt động trừ khi bạn kết nối với mạng Wi-Fi."\n\n"Cài đặt này ảnh hưởng đến tất cả người dùng trên máy tính bảng này." - "Nếu bạn hạn chế dữ liệu nền trên thiết bị di động, một số ứng dụng và dịch vụ sẽ không hoạt động trừ khi bạn kết nối với mạng Wi-Fi."\n\n"Cài đặt này ảnh hưởng đến tất cả người dùng trên điện thoại này." + "Nếu bạn hạn chế dữ liệu nền trên thiết bị di động, một số ứng dụng và dịch vụ sẽ không hoạt động trừ khi bạn kết nối với mạng Wi-Fi.\n\nCài đặt này ảnh hưởng đến tất cả người dùng trên máy tính bảng này." + "Nếu bạn hạn chế dữ liệu nền trên thiết bị di động, một số ứng dụng và dịch vụ sẽ không hoạt động trừ khi bạn kết nối với mạng Wi-Fi.\n\nCài đặt này ảnh hưởng đến tất cả người dùng trên điện thoại này." "^1"" ""^2"\n"cảnh báo" "^1"" ""^2"\n"giới hạn" "Ứng dụng đã xóa" @@ -1843,8 +1861,8 @@ "Người dùng" "Tiểu sử bị hạn chế" "Thêm người dùng mới" - "Bạn có thể chia sẻ thiết bị này với những người khác bằng cách tạo thêm người dùng. Mỗi người dùng có không gian riêng mà họ có thể tùy chỉnh với các ứng dụng, hình nền riêng, v.v. Người dùng cũng có thể điều chỉnh các cài đặt máy tính bảng ảnh hưởng tới mọi người, chẳng hạn như Wi-Fi."\n\n"Sau khi bạn tạo người dùng mới, người đó cần thực hiện quy trình thiết lập."\n\n"Bất kỳ người dùng nào cũng có thể chấp nhận các quyền của ứng dụng được cập nhật thay mặt tất cả những người dùng khác." - "Sau khi bạn tạo người dùng mới, người đó cần thực hiện quy trình thiết lập."\n\n"Bất kỳ người dùng nào cũng có thể chấp nhận các quyền của ứng dụng được cập nhật thay mặt tất cả những người dùng khác." + "Bạn có thể chia sẻ thiết bị này với những người khác bằng cách tạo thêm người dùng. Mỗi người dùng có không gian riêng mà họ có thể tùy chỉnh với các ứng dụng, hình nền riêng, v.v. Người dùng cũng có thể điều chỉnh các cài đặt máy tính bảng ảnh hưởng tới mọi người, chẳng hạn như Wi-Fi.\n\nSau khi bạn tạo người dùng mới, người đó cần thực hiện quy trình thiết lập.\n\nBất kỳ người dùng nào cũng có thể chấp nhận các quyền của ứng dụng được cập nhật thay mặt tất cả những người dùng khác." + "Sau khi bạn tạo người dùng mới, người đó cần thực hiện quy trình thiết lập.\n\nBất kỳ người dùng nào cũng có thể chấp nhận các quyền của ứng dụng được cập nhật thay mặt tất cả những người dùng khác." "Thiết lập người dùng ngay bây giờ?" "Đảm bảo có người để nhận máy tính bảng và thiết lập bộ nhớ của họ" "Thiết lập tiểu sử ngay bây giờ?" @@ -1875,6 +1893,9 @@ "Cài đặt này ảnh hưởng đến tất cả người dùng trên điện thoại này." "Thay đổi ngôn ngữ" "Thay đổi cỡ chữ" + "Hạn chế" + "Xóa các hạn chế" + "Thay đổi PIN" "Hiển thị thông báo" "Trợ giúp" "Tài khoản dành cho nội dung" diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml index 723b979e219..6592f618a36 100644 --- a/res/values-zh-rCN/arrays.xml +++ b/res/values-zh-rCN/arrays.xml @@ -233,7 +233,8 @@ "位置" "个人" "短信" - "设备" + "媒体" + "设备"
    "粗略位置" @@ -246,7 +247,7 @@ "修改通话记录" "读取日历" "修改日历" - "Wi-Fi 扫描" + "WLAN 扫描" "通知" "手机网络扫描" "拨打电话" @@ -261,12 +262,23 @@ "写入 ICC 短信" "修改设置" "在顶部绘制" - "查看通知" + "访问通知" "相机" "录制音频" "播放音频" "读取剪贴板内容" "修改剪贴板内容" + "媒体按钮" + "音频焦点" + "主音量" + "语音音量" + "铃声音量" + "媒体音量" + "闹钟音量" + "通知音量" + "蓝牙音量" + "保持唤醒状态" + "监测位置" "位置" @@ -294,18 +306,39 @@ "发送短信/彩信" "修改设置" "在顶部绘制" - "查看通知" + "访问通知" "相机" "录制音频" "播放音频" "读取剪贴板内容" "修改剪贴板内容" + "媒体按钮" + "音频焦点" + "主音量" + "语音音量" + "铃声音量" + "媒体音量" + "闹钟音量" + "通知音量" + "蓝牙音量" + "保持唤醒状态" + "位置" "短" "中" "长" + + "Dalvik" + "ART" + "ART(调试)" + + + "使用 Dalvik" + "使用 ART" + "使用 ART 调试版本" + "永不检查" "仅检查 DRM 内容" @@ -367,6 +400,11 @@ "在屏幕上显示为线型图" "在 adb shell dumpsys gfxinfo 中" + + "关闭" + "显示过度绘制区域" + "显示过度绘制计数器" + "标准限制" "不允许后台进程" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 19ec2a67173..798052d011b 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -275,8 +275,8 @@ "移动数据网络连接已断开,因为您已离开本地网络并关闭了移动数据网络漫游功能。" "将其启用" "请注意,允许移动数据网络漫游可能会产生高额漫游费!" - "如果允许数据漫游,您可能需要支付高昂的漫游费用!"\n\n"此设置会影响这部平板电脑上的所有用户。" - "如果允许数据漫游,您可能需要支付高昂的漫游费用!"\n\n"此设置会影响这部手机上的所有用户。" + "如果允许数据漫游,您可能需要支付高昂的漫游费用!\n\n此设置会影响这部平板电脑上的所有用户。" + "如果允许数据漫游,您可能需要支付高昂的漫游费用!\n\n此设置会影响这部手机上的所有用户。" "允许移动数据网络漫游吗?" "运营商选择" "选择网络运营商" @@ -322,8 +322,8 @@ "您每次开机时都需要输入数字 PIN 或密码才能解密平板电脑" "您每次开机时都需要输入数字 PIN 或密码才能解密手机" "已加密" - "您可以加密自己的帐户、设置、已下载的应用及其数据、媒体和其他文件。加密平板电脑后,您每次开机时都需要输入数字 PIN 或密码才能解密。取消加密的唯一方法就是恢复出厂设置,但这会清除平板电脑上的所有数据。"\n\n"加密过程需要 1 小时或更长时间。在开始加密前,电池必须有电,并且在加密完成前必须一直连接电源。如果您中断加密过程,则会丢失部分或全部数据。" - "您可以加密自己的帐户、设置、已下载的应用及其数据、媒体和其他文件。加密手机后,您每次开机时都需要输入数字 PIN 或密码才能解密。取消加密的唯一方法就是恢复出厂设置,但这会清除手机上的所有数据。"\n\n"加密过程需要 1 小时或更长时间。在开始加密前,电池必须有电,并且在加密完成前必须一直连接电源。如果您中断加密过程,则会丢失部分或全部数据。" + "您可以加密自己的帐户、设置、已下载的应用及其数据、媒体和其他文件。加密平板电脑后,您每次开机时都需要输入数字 PIN 或密码才能解密。取消加密的唯一方法就是恢复出厂设置,但这会清除平板电脑上的所有数据。\n\n加密过程需要 1 小时或更长时间。在开始加密前,电池必须有电,并且在加密完成前必须一直连接电源。如果您中断加密过程,则会丢失部分或全部数据。" + "您可以加密自己的帐户、设置、已下载的应用及其数据、媒体和其他文件。加密手机后,您每次开机时都需要输入数字 PIN 或密码才能解密。取消加密的唯一方法就是恢复出厂设置,但这会清除手机上的所有数据。\n\n加密过程需要 1 小时或更长时间。在开始加密前,电池必须有电,并且在加密完成前必须一直连接电源。如果您中断加密过程,则会丢失部分或全部数据。" "加密平板电脑" "加密手机" "请为电池充电,然后重试。" @@ -339,8 +339,8 @@ "^1 秒后重试。" "键入密码" "加密失败" - "加密过程中断,无法完成。因此,您已无法再使用平板电脑上的数据。"\n\n"要继续使用您的平板电脑,您需要恢复出厂设置。恢复出厂设置后对平板电脑进行设置时,您可以将之前备份到 Google 帐户的所有数据恢复到平板电脑中。" - "加密过程中断,无法完成。因此,您已无法再使用手机上的数据。"\n\n"要继续使用您的手机,您需要恢复出厂设置。恢复出厂设置后对手机进行设置时,您可以将之前备份到 Google 帐户的所有数据恢复到手机中。" + "加密过程中断,无法完成。因此,您已无法再使用平板电脑上的数据。\n\n要继续使用您的平板电脑,您需要恢复出厂设置。恢复出厂设置后对平板电脑进行设置时,您可以将之前备份到 Google 帐户的所有数据恢复到平板电脑中。" + "加密过程中断,无法完成。因此,您已无法再使用手机上的数据。\n\n要继续使用您的手机,您需要恢复出厂设置。恢复出厂设置后对手机进行设置时,您可以将之前备份到 Google 帐户的所有数据恢复到手机中。" "切换输入法" "选择屏幕锁定方式" "选择备份锁" @@ -514,6 +514,7 @@ "正在连接" "已连接" "可用" + "正在使用中" "显示设备设置" "是否断开连接?" "此操作将会断开您与以下设备的连接:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "关闭" "无法使用,因为 NFC 已关闭" "Android Beam" - "打开此功能后,您只需将自己的设备与另一台支持 NFC 的设备靠在一起,即可将您设备上的应用内容同步分享给对方。例如,您可以发送网页、YouTube 视频、联系人等等。"\n\n"您只需将设备靠在一起(通常是背靠背)然后触摸屏幕即可,所分享的内容由相应的应用确定。" + "打开此功能后,您只需将自己的设备与另一台支持 NFC 的设备靠在一起,即可将您设备上的应用内容同步分享给对方。例如,您可以发送网页、YouTube 视频、联系人等等。\n\n您只需将设备靠在一起(通常是背靠背)然后触摸屏幕即可,所分享的内容由相应的应用确定。" "网络服务发现" "允许其他设备上的应用发现此设备上的应用" "WLAN" @@ -620,7 +621,7 @@ "通过 %1$s 进行保护" ",通过 %1$s 进行保护" "无" - "为了提高位置信息精确度以及其他目的,“%1$s”请求启用网络扫描功能(在关闭了 WLAN 时也可进行扫描)。"\n\n"是否对所有需要进行扫描的应用批准这项请求?" + "为了提高位置信息精确度以及其他目的,“%1$s”请求启用网络扫描功能(在关闭了 WLAN 时也可进行扫描)。\n\n是否对所有需要进行扫描的应用批准这项请求?" "允许" "拒绝" "连接" @@ -632,8 +633,8 @@ "取消" "还是跳过" "不要跳过" - "警告:您可能需要额外支付运营商数据费。"\n\n"平板电脑设置过程可能会消耗大量网络流量。" - "警告:您可能需要额外支付运营商数据费。"\n\n"手机设置过程可能会消耗大量网络流量。" + "警告:您可能需要额外支付运营商数据费。\n\n平板电脑设置过程可能会消耗大量网络流量。" + "警告:您可能需要额外支付运营商数据费。\n\n手机设置过程可能会消耗大量网络流量。" "警告:您必须连接到互联网,平板电脑才能验证您所使用的软件是否为最新版本。" "警告:您必须连接到互联网,手机才能验证您所使用的软件是否为最新版本。" "平板电脑无法连接到此 WLAN 网络。" @@ -773,9 +774,9 @@ "SIM 卡 PIN" "PIN 不正确" "PIN 不匹配" - "无法更改 PIN。"\n"PIN 可能不正确。" + "无法更改 PIN。\nPIN 可能不正确。" "已成功更改 SIM 卡 PIN" - "无法更改 SIM 卡锁定状态。"\n"PIN 可能不正确。" + "无法更改 SIM 卡锁定状态。\nPIN 可能不正确。" "确定" "取消" "平板电脑状态" @@ -918,9 +919,9 @@ "恢复出厂设置" "清除平板电脑上的所有数据" "清除手机上的所有数据" - "此操作会清除您平板电脑""内存设备""中的所有数据,包括:"\n\n
  • "您的 Google 帐户"
  • \n
  • "系统及应用数据和设置"
  • \n
  • "已下载的应用"
  • - "此操作会清除您手机""内存设备""中的所有数据,包括:"\n\n
  • "您的 Google 帐户"
  • \n
  • "系统及应用数据和设置"
  • \n
  • "已下载的应用"
  • - \n\n"目前,您已登录以下帐户:"\n + "此操作会清除您平板电脑""内存设备""中的所有数据,包括:\n\n"
  • "您的 Google 帐户"
  • \n
  • "系统及应用数据和设置"
  • \n
  • "已下载的应用"
  • + "此操作会清除您手机""内存设备""中的所有数据,包括:\n\n"
  • "您的 Google 帐户"
  • \n
  • "系统及应用数据和设置"
  • \n
  • "已下载的应用"
  • + \n\n"目前,您已登录以下帐户:\n"
  • "音乐"
  • \n
  • "照片"
  • \n
  • "其他的用户数据"
  • \n\n"要清除音乐、照片和其他用户数据,请清空该 ""USB 存储设备""。" \n\n"要清除音乐、图片和其他用户数据,您需要清空该 ""SD 卡""。" @@ -1105,7 +1106,7 @@ "显示缓存进程" "重置应用偏好设置" "要重置应用偏好设置吗?" - "此操作将会重置以下全部偏好设置:"\n\n
  • "停用的应用"
  • \n
  • "停用的应用通知"
  • \n
  • "执行操作的默认应用"
  • \n
  • "应用的后台数据限制"
  • \n\n"您将不会丢失任何应用数据。"
    + "此操作将会重置以下全部偏好设置:\n\n"
  • "停用的应用"
  • \n
  • "停用的应用通知"
  • \n
  • "执行操作的默认应用"
  • \n
  • "应用的后台数据限制"
  • \n\n"您将不会丢失任何应用数据。"
    "重置应用" "管理空间" "过滤" @@ -1240,9 +1241,7 @@ "要切换,请按 Ctrl+空格键" "默认" "键盘布局" - "用户词典" - "个人词典" - "个人词典" + "个人词典" "添加" "添加到词典" @@ -1303,6 +1302,11 @@ "在电源键菜单中添加提交错误报告的选项" "不锁定屏幕" "充电时屏幕不会休眠" + "启用蓝牙 HCI 信息收集日志" + "捕获单个文件中的所有蓝牙 HCI 包" + "选择运行环境" + "选择运行环境" + "要重新启动以将运行环境从“%1$s”改为“%2$s”吗?" "允许模拟位置" "允许模拟位置" "是否允许 USB 调试?" @@ -1315,11 +1319,13 @@ "对 USB 存储设备进行读写保护" "应用必须申请读取 USB 存储设备的权限" "要对 USB 存储设备进行读写保护吗?" - "如果 USB 存储设备受到读写保护,则应用必须申请相关权限才能读取外部存储设备中的数据。"\n\n"某些应用需要其开发者更新之后才能正常使用。" + "如果 USB 存储设备受到读写保护,则应用必须申请相关权限才能读取外部存储设备中的数据。\n\n某些应用需要其开发者更新之后才能正常使用。" "对 SD 卡进行读写保护" "应用必须申请读取 SD 卡的权限" "要对 SD 卡进行读写保护吗?" - "如果 SD 卡受到读写保护,则应用必须申请相关权限才能读取外部存储设备中的数据。"\n\n"某些应用需要其开发者更新之后才能正常使用。" + "如果 SD 卡受到读写保护,则应用必须申请相关权限才能读取外部存储设备中的数据。\n\n某些应用需要其开发者更新之后才能正常使用。" + "本地终端" + "启用终端应用,以便在本地访问 Shell" "选择小工具" "选择小部件" "是否允许该应用创建并访问小部件?" @@ -1340,11 +1346,11 @@ "服务" "系统" "放大手势" - "启用此功能后,您可以通过点按屏幕三次进行缩放。"\n\n"放大时,您可以:"\n
    • "平移:在屏幕上拖动两根或更多根手指。"
    • \n
    • "调整缩放级别:开合两根或更多根手指。"
    \n\n"同时,您还可以通过点按三次并按住的方法来暂时性地放大手指触摸到的内容。在此放大状态下,您可以拖动手指查看屏幕上的各个部分。松开手指即可返回之前的状态。"\n\n"请注意:点按屏幕三次进行放大的方法适用于除键盘和导航栏外的所有情况。"
    + "启用此功能后,您可以通过点按屏幕三次进行缩放。\n\n放大时,您可以:\n"
    • "平移:在屏幕上拖动两根或更多根手指。"
    • \n
    • "调整缩放级别:开合两根或更多根手指。"
    \n\n"同时,您还可以通过点按三次并按住的方法来暂时性地放大手指触摸到的内容。在此放大状态下,您可以拖动手指查看屏幕上的各个部分。松开手指即可返回之前的状态。\n\n请注意:点按屏幕三次进行放大的方法适用于除键盘和导航栏外的所有情况。"
    "辅助功能快捷方式" "启用" "已关闭" - "启用该功能后,您只需两步即可迅速启用辅助功能:"\n\n"步骤 1:持续按住电源按钮,直到您听到提示音或感觉到震动。"\n\n"步骤 2:用两根手指触摸屏幕并按住,直到您听到确认提示音。"\n\n"如果该设备有多个用户,在锁定屏幕上进行此快捷操作可暂时启用辅助功能,直到该设备解锁。" + "启用该功能后,您只需两步即可迅速启用辅助功能:\n\n步骤 1:持续按住电源按钮,直到您听到提示音或感觉到震动。\n\n步骤 2:用两根手指触摸屏幕并按住,直到您听到确认提示音。\n\n如果该设备有多个用户,在锁定屏幕上进行此快捷操作可暂时启用辅助功能,直到该设备解锁。" "大号字体" "屏幕放大" "自动更新屏幕放大状态" @@ -1366,6 +1372,16 @@ "“话语提示”可提供语音反馈以帮助盲人和有视力障碍的用户。您要通过 Play 商店免费安装该服务吗?" "没有提供说明。" "设置" + "打印" + "打印设置" + "服务" + "要使用%1$s吗?" + "%1$s可以接收您打印的文档。此类文档可能包含敏感数据。" + "未安装任何服务" + "设置" + "添加打印机" + "打开" + "关闭" "电池" "耗电情况" "无法获取电池使用数据。" @@ -1405,8 +1421,10 @@ "WLAN 正在运行" "平板电脑" "通话" - "数据已发送" - "数据已收到" + "发送的移动数据量" + "接收的移动数据量" + "发送的 WLAN 数据量" + "接收的 WLAN 数据量" "音频" "视频" "已运行时间" @@ -1460,6 +1478,7 @@ "音高" "更改所播放的文字的音调" "语言" + "未选择语言" "设置文字转语音功能要使用的语言" "收听示例" "播放简短的语音合成示例" @@ -1594,7 +1613,7 @@ "不支持 EAP。" "您无法在设置过程中配置 EAP WLAN 连接。设置完毕后,您可以在“设置”>“无线和网络”中进行配置。" "建立连接可能需要几分钟时间..." - "触摸""下一步""可继续进行设置。"\n\n"触摸""返回""可连接到其他 WLAN 网络。" + "触摸""下一步""可继续进行设置。\n\n触摸""返回""可连接到其他 WLAN 网络。" "同步功能已启用" "同步功能已停用" "同步错误。" @@ -1622,7 +1641,7 @@ "Gmail" "日历" "联系人" - "欢迎使用 Google Sync!"" "\n"这款数据同步工具可让您随时随地查看您的联系人、约会以及更多信息。" + "欢迎使用 Google Sync!"" \n这款数据同步工具可让您随时随地查看您的联系人、约会以及更多信息。" "应用同步设置" "数据与同步" "更改密码" @@ -1676,8 +1695,7 @@ "使用 GPU 进行绘图时闪烁显示窗口中的视图" "显示硬件层更新" "Flash 硬件层在进行更新时会显示为绿色" - "显示 GPU 过度绘制" - "从最优到最差:蓝、绿、淡红、红" + "调试 GPU 过度绘制" "停用 HW 叠加层" "始终使用 GPU 进行屏幕合成" "启用 OpenGL 跟踪" @@ -1738,11 +1756,11 @@ "使用移动网络时停用后台数据。系统会尽量使用非移动网络。" "要限制此应用使用后台数据,请先设置移动数据上限。" "限制后台数据?" - "只能连接到移动网络时,此功能可能会导致需要使用后台数据的应用停止运行。"\n\n"您可以在相关应用的设置中查找更合适的数据流量控制选项。" + "只能连接到移动网络时,此功能可能会导致需要使用后台数据的应用停止运行。\n\n您可以在相关应用的设置中查找更合适的数据流量控制选项。" "您只有在设置移动数据上限后才能限制后台数据。" "要打开自动同步数据功能吗?" - "您在网络上对您的帐户进行的所有更改都会自动同步到您的平板电脑。"\n\n"有些帐户还可以将您在平板电脑上进行的所有更改自动同步到网络上。这就是 Google 帐户的精彩之处。"\n\n"要选择每个帐户中要同步哪些类型的信息,请转到“设置 > 帐户”。" - "您在网络上对您的帐户进行的所有更改都会自动同步到您的手机。"\n\n"有些帐户还可以将您在手机上进行的所有更改自动同步到网络上。这就是 Google 帐户的精彩之处。"\n\n"要选择每个帐户中要同步哪些类型的信息,请转到“设置 > 帐户”。" + "您在网络上对您的帐户进行的所有更改都会自动同步到您的平板电脑。\n\n有些帐户还可以将您在平板电脑上进行的所有更改自动同步到网络上。这就是 Google 帐户的精彩之处。\n\n要选择每个帐户中要同步哪些类型的信息,请转到“设置 > 帐户”。" + "您在网络上对您的帐户进行的所有更改都会自动同步到您的手机。\n\n有些帐户还可以将您在手机上进行的所有更改自动同步到网络上。这就是 Google 帐户的精彩之处。\n\n要选择每个帐户中要同步哪些类型的信息,请转到“设置 > 帐户”。" "要关闭自动同步数据功能吗?" "这样可以节省数据流量和电池电量,但您需要手动同步每个帐户才能获得最新信息,并且在有更新时不会收到通知。" "使用情况周期重置日期" @@ -1751,12 +1769,12 @@ "设置流量使用量警告" "设置数据使用限制" "正在限制数据使用量" - "达到指定的数据流量上限时,系统会停用您的移动数据连接。"\n\n"由于数据流量是由您的平板电脑计算得出的,您的运营商对于流量的计算方法可能有所不同,因此请考虑设置一个较低的上限。" - "达到指定的数据流量上限时,系统会停用您的移动数据连接。"\n\n"由于数据流量是由您的手机计算得出的,您的运营商对于流量的计算方法可能有所不同,因此请考虑设置一个较低的上限。" + "达到指定的数据流量上限时,系统会停用您的移动数据连接。\n\n由于数据流量是由您的平板电脑计算得出的,您的运营商对于流量的计算方法可能有所不同,因此请考虑设置一个较低的上限。" + "达到指定的数据流量上限时,系统会停用您的移动数据连接。\n\n由于数据流量是由您的手机计算得出的,您的运营商对于流量的计算方法可能有所不同,因此请考虑设置一个较低的上限。" "限制后台数据?" "如果您限制在后台使用移动数据网络,则在未连接到 WLAN 网络时,部分应用和服务将会无法运行。" - "如果您限制在后台使用移动数据网络,则在未连接到 WLAN 网络时,部分应用和服务将会无法运行。"\n\n"此设置会影响这台平板电脑上的所有用户。" - "如果您限制在后台使用移动数据网络,则在未连接到 WLAN 网络时,部分应用和服务将会无法运行。"\n\n"此设置会影响这部手机上的所有用户。" + "如果您限制在后台使用移动数据网络,则在未连接到 WLAN 网络时,部分应用和服务将会无法运行。\n\n此设置会影响这台平板电脑上的所有用户。" + "如果您限制在后台使用移动数据网络,则在未连接到 WLAN 网络时,部分应用和服务将会无法运行。\n\n此设置会影响这部手机上的所有用户。" "^1"" ""^2"\n"警告" "^1"" ""^2"\n"限制" "已删除的应用" @@ -1843,8 +1861,8 @@ "用户" "受限个人资料" "添加新用户" - "您可以通过创建新用户来与其他人共享此设备。每个用户都会有自己的空间,其中可以容纳他们自己的应用、壁纸等内容。用户可以调整 WLAN 等会影响到所有用户的平板电脑设置。"\n\n"您创建新用户后,该用户必须完成设置流程。"\n\n"任何用户均可代表其他所有用户接受应用的新权限。" - "您创建新用户后,该用户必须完成设置流程。"\n\n"任何用户均可代表其他所有用户接受应用的新权限。" + "您可以通过创建新用户来与其他人共享此设备。每个用户都会有自己的空间,其中可以容纳他们自己的应用、壁纸等内容。用户可以调整 WLAN 等会影响到所有用户的平板电脑设置。\n\n您创建新用户后,该用户必须完成设置流程。\n\n任何用户均可代表其他所有用户接受应用的新权限。" + "您创建新用户后,该用户必须完成设置流程。\n\n任何用户均可代表其他所有用户接受应用的新权限。" "是否立即设置用户?" "请让这个人拿过平板电脑,让其设置自己的空间。" "要立即设置个人资料吗?" @@ -1875,6 +1893,9 @@ "此设置会影响这部手机上的所有用户。" "更改语言" "更改字体大小" + "限制" + "取消限制" + "更改 PIN 码" "显示通知" "帮助" "内容帐户" diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml index a7f70da527d..e03401290b8 100644 --- a/res/values-zh-rTW/arrays.xml +++ b/res/values-zh-rTW/arrays.xml @@ -233,7 +233,8 @@ "位置" "個人" "簡訊" - "裝置" + "媒體" + "裝置"
    "約略位置" @@ -267,6 +268,17 @@ "播放音訊" "讀取剪貼簿" "修改剪貼簿" + "媒體按鈕" + "音訊焦點" + "主音量" + "語音音量" + "鈴聲音量" + "媒體音量" + "鬧鐘音量" + "通知音量" + "藍牙音量" + "停用休眠" + "監控位置" "位置" @@ -300,12 +312,33 @@ "播放音訊" "讀取剪貼簿" "修改剪貼簿" + "媒體按鈕" + "音訊焦點" + "主音量" + "語音音量" + "鈴聲音量" + "媒體音量" + "鬧鐘音量" + "通知音量" + "藍牙音量" + "停用休眠" + "定位" "短" "中" "長" + + "Dalvik" + "ART" + "ART (偵錯)" + + + "使用 Dalvik" + "使用 ART" + "使用 ART 偵錯版本" + "不要檢查" "僅檢查 DRM 內容" @@ -367,6 +400,11 @@ "在螢幕上以行顯示" "在「In adb shell dumpsys gfxinfo」指令中" + + "關閉" + "顯示透支區域" + "顯示透支計數器" + "標準限制" "不執行背景處理程序" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 887bc6360b9..b8b31a79877 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -275,8 +275,8 @@ "由於您不在主要網路蓋涵範圍,且已關閉漫遊服務,資料連線已中斷。" "開啟" "允許漫遊服務時,您可能需要支付龐大的漫遊費用!" - "允許使用數據漫遊服務時,您可能需要支付龐大的漫遊費用!"\n\n"這項設定會影響這台平板電腦的所有使用者。" - "允許使用數據漫遊服務時,您可能需要支付龐大的漫遊費用!"\n\n"這項設定會影響這支手機的所有使用者。" + "允許使用數據漫遊服務時,您可能需要支付龐大的漫遊費用!\n\n這項設定會影響這台平板電腦的所有使用者。" + "允許使用數據漫遊服務時,您可能需要支付龐大的漫遊費用!\n\n這項設定會影響這支手機的所有使用者。" "允許漫遊服務?" "選取電信業者" "選擇網路業者" @@ -322,8 +322,8 @@ "每次平板電腦開機後,需輸入數字 PIN 或密碼才能對平板電腦解密。" "每次手機開機後,需輸入數字 PIN 或密碼才能對手機解密。" "已加密" - "您可以將帳戶、設定、已下載的應用程式及其資料、媒體和其他檔案加密。一旦您將平板電腦加密,就必須在每次開機時輸入數字 PIN 或密碼,如此才能解密。如要解除加密狀態,必須恢復原廠設定,但這樣會清除平板電腦上的所有資料。"\n\n"加密過程可能需要 1 個小時以上的時間。加密前必須先將電池充滿電,並且在過程中讓平板電腦持續連接電源,直到加密完成為止。如果加密過程中斷,您將失去部分或所有資料。" - "您可以將帳戶、設定、已下載的應用程式及其資料、媒體和其他檔案加密。一旦您將手機加密,就必須在每次開機時輸入數字 PIN 或密碼,如此才能解密。如要解除加密狀態,必須恢復原廠設定,但這樣會清除手機上所有的資料。"\n\n"加密過程可能需要 1 個小時以上的時間。加密前必須先將電池充滿電,並且在過程中讓手機持續連接電源,直到加密完成為止。如果加密過程中斷,您將失去部分或所有資料。" + "您可以將帳戶、設定、已下載的應用程式及其資料、媒體和其他檔案加密。一旦您將平板電腦加密,就必須在每次開機時輸入數字 PIN 或密碼,如此才能解密。如要解除加密狀態,必須恢復原廠設定,但這樣會清除平板電腦上的所有資料。\n\n加密過程可能需要 1 個小時以上的時間。加密前必須先將電池充滿電,並且在過程中讓平板電腦持續連接電源,直到加密完成為止。如果加密過程中斷,您將失去部分或所有資料。" + "您可以將帳戶、設定、已下載的應用程式及其資料、媒體和其他檔案加密。一旦您將手機加密,就必須在每次開機時輸入數字 PIN 或密碼,如此才能解密。如要解除加密狀態,必須恢復原廠設定,但這樣會清除手機上所有的資料。\n\n加密過程可能需要 1 個小時以上的時間。加密前必須先將電池充滿電,並且在過程中讓手機持續連接電源,直到加密完成為止。如果加密過程中斷,您將失去部分或所有資料。" "加密保護平板電腦" "對手機進行加密" "將電池充電,然後再試一次。" @@ -339,8 +339,8 @@ "^1 秒內再試一次。" "輸入密碼" "加密失敗" - "加密過程中斷,無法完成,因此您再也不能存取平板電腦上的資料。"\n\n"如要恢復使用平板電腦,請先將平板電腦重設回原廠設定。完成重設後,您可以在設定平板電腦時,將先前備份至「Google 帳戶」的資料全部還原。" - "加密過程中斷,無法完成,因此您再也不能存取手機上的資料。"\n\n"如要恢復使用手機,請先將手機重設回原廠設定。完成重設後,您可以在設定手機時,將先前備份至「Google 帳戶」的資料全部還原。" + "加密過程中斷,無法完成,因此您再也不能存取平板電腦上的資料。\n\n如要恢復使用平板電腦,請先將平板電腦重設回原廠設定。完成重設後,您可以在設定平板電腦時,將先前備份至「Google 帳戶」的資料全部還原。" + "加密過程中斷,無法完成,因此您再也不能存取手機上的資料。\n\n如要恢復使用手機,請先將手機重設回原廠設定。完成重設後,您可以在設定手機時,將先前備份至「Google 帳戶」的資料全部還原。" "切換輸入法" "選擇螢幕鎖定方式" "選擇備用解鎖方式" @@ -514,6 +514,7 @@ "連線中" "已連線" "可以使用" + "正在使用中" "顯示裝置設定" "中斷連線?" "這個動作會結束您與下列裝置的連線:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "關閉" "NFC 已關閉,因此無法使用" "Android Beam" - "這項功能啟用時,您只要將裝置靠在一起,即可讓應用程式內容傳輸至其他支援 NFC 的裝置。例如,您可以傳輸瀏覽器頁面、YouTube 影片、使用者聯絡人等內容。"\n\n"只要將裝置靠在一起 (一般都是背靠背),然後輕觸螢幕,接著應用程式會決定要傳輸哪些內容。" + "這項功能啟用時,您只要將裝置靠在一起,即可讓應用程式內容傳輸至其他支援 NFC 的裝置。例如,您可以傳輸瀏覽器頁面、YouTube 影片、使用者聯絡人等內容。\n\n只要將裝置靠在一起 (一般都是背靠背),然後輕觸螢幕,接著應用程式會決定要傳輸哪些內容。" "網路服務搜尋" "允許其他裝置上的應用程式搜尋這個裝置上的應用程式" "Wi‑Fi" @@ -620,7 +621,7 @@ "透過 %1$s 加密保護" ",透過 %1$s 加密保護" "無" - "%1$s 要求開啟網路掃描功能 (即使 Wi-Fi 已關閉),藉此提升定位精確度及用於其他用途。"\n\n"您要對所有需要執行掃描的應用程式允許這項要求嗎?" + "%1$s 要求開啟網路掃描功能 (即使 Wi-Fi 已關閉),藉此提升定位精確度及用於其他用途。\n\n您要對所有需要執行掃描的應用程式允許這項要求嗎?" "允許" "拒絕" "連線" @@ -632,8 +633,8 @@ "取消" "略過" "不要略過" - "警告:您可能需支付額外的數據傳輸費用。"\n\n"平板電腦設定程序可能需要佔用大量網路流量。" - "警告:您可能需支付額外的數據傳輸費用。"\n\n"手機設定程序可能需要佔用大量網路流量。" + "警告:您可能需支付額外的數據傳輸費用。\n\n平板電腦設定程序可能需要佔用大量網路流量。" + "警告:您可能需支付額外的數據傳輸費用。\n\n手機設定程序可能需要佔用大量網路流量。" "警告:連上網際網路後,平板電腦才能驗證您所使用的軟體是否為最新版本。" "警告:連上網際網路後,手機才能驗證您所使用的軟體是否為最新版本。" "您的平板電腦無法連線至這個 Wi-Fi 網路。" @@ -773,9 +774,9 @@ "SIM PIN" "PIN 不正確" "PIN 不符" - "無法變更 PIN。"\n"PIN 碼可能不正確。" + "無法變更 PIN。\nPIN 碼可能不正確。" "成功變更 SIM PIN" - "無法變更 SIM 卡鎖定狀態。"\n"可能輸入了不正確的 PIN。" + "無法變更 SIM 卡鎖定狀態。\n可能輸入了不正確的 PIN。" "確定" "取消" "平板電腦狀態" @@ -918,9 +919,9 @@ "恢復原廠設定" "清除平板電腦上的所有資料" "清除手機上所有資料" - "這會清除您平板電腦""內部儲存裝置""中的所有資料,包括:"\n\n
  • "您的 Google 帳戶"
  • \n
  • "系統和應用程式資料及設定"
  • \n
  • "已下載的應用程式"
  • - "這會清除您手機""內部儲存裝置""中的所有資料,包括:"\n\n
  • "您的 Google 帳戶"
  • \n
  • "系統和應用程式資料及設定"
  • \n
  • "已下載的應用程式"
  • - \n\n"您目前已登入下列帳戶:"\n + "這會清除您平板電腦""內部儲存裝置""中的所有資料,包括:\n\n"
  • "您的 Google 帳戶"
  • \n
  • "系統和應用程式資料及設定"
  • \n
  • "已下載的應用程式"
  • + "這會清除您手機""內部儲存裝置""中的所有資料,包括:\n\n"
  • "您的 Google 帳戶"
  • \n
  • "系統和應用程式資料及設定"
  • \n
  • "已下載的應用程式"
  • + \n\n"您目前已登入下列帳戶:\n"
  • "音樂"
  • \n
  • "相片"
  • \n
  • "其他使用者資料"
  • \n\n"如要一併清除音樂、圖片及其他用戶資料,則需清除 ""USB 儲存裝置""資料。" \n\n"如要清除音樂、圖片及其他使用者資料,必須先清除 ""SD 卡""。" @@ -1105,7 +1106,7 @@ "顯示快取處理程序" "重設應用程式偏好設定" "重設應用程式偏好設定?" - "這會將下列項目的所有偏好設定全部重設:"\n\n" "
  • "已停用的應用程式"
  • \n" "
  • "已停用的應用程式通知"
  • \n" "
  • "執行動作的預設應用程式"
  • \n" "
  • "應用程式背景資料限制"
  • \n\n" 請放心,您的所有應用程式資料都不會遭到移除。"
    + "這會將下列項目的所有偏好設定全部重設:\n\n "
  • "已停用的應用程式"
  • \n" "
  • "已停用的應用程式通知"
  • \n" "
  • "執行動作的預設應用程式"
  • \n" "
  • "應用程式背景資料限制"
  • \n\n" 請放心,您的所有應用程式資料都不會遭到移除。"
    "重設應用程式" "管理空間" "篩選" @@ -1240,9 +1241,7 @@ "如要切換,請按下 Ctrl+空白鍵。" "預設" "鍵盤配置" - "使用者字典" - "個人字典" - "個人字典" + "個人字典" "新增" "新增至字典" @@ -1303,6 +1302,11 @@ "在電源選單中納入取得錯誤報告的選項" "保持清醒" "充電時螢幕不會進入休眠" + "啟用藍牙 HCI 窺探紀錄" + "擷取單一檔案內的所有藍牙 HCI 封包" + "選取執行階段" + "選取執行階段" + "要重新啟動裝置,將執行階段從 %1$s 變更為 %2$s 嗎?" "允許模擬位置" "允許模擬位置" "允許 USB 偵錯嗎?" @@ -1315,11 +1319,13 @@ "保護 USB 儲存裝置" "應用程式必須取得權限,才能讀取 USB 儲存裝置" "保護 USB 儲存裝置?" - "USB 儲存裝置受到保護時,應用程式必須取得權限,才能從外部儲存裝置讀取資料。"\n\n"部分應用程式可能需由開發人員更新,才能正常運作。" + "USB 儲存裝置受到保護時,應用程式必須取得權限,才能從外部儲存裝置讀取資料。\n\n部分應用程式可能需由開發人員更新,才能正常運作。" "保護 SD 卡" "應用程式必須取得權限,才能讀取 SD 卡" "保護 SD 卡?" - "SD 卡受到保護時,應用程式必須取得權限,才能從外部儲存裝置讀取資料。"\n\n"部分應用程式可能需由開發人員更新,才能正常運作。" + "SD 卡受到保護時,應用程式必須取得權限,才能從外部儲存裝置讀取資料。\n\n部分應用程式可能需由開發人員更新,才能正常運作。" + "本機終端機" + "啟用可提供本機命令介面存取權的終端機應用程式" "選擇小工具" "選擇小工具" "是否要建立小工具並允許存取?" @@ -1340,11 +1346,11 @@ "服務" "系統" "放大手勢" - "啟用這項功能時,只要在螢幕上輕按三下即可縮放。"\n\n"放大時,您可以:"\n
    • "平移:使用兩指或多指在螢幕上拖曳。"
    • \n
    • "調整縮放等級:使用兩指或多指往內撥或往外撥。"
    \n\n"此外,您只要輕按三下並持續按住,即可暫時放大手指所觸畫面。在這種放大狀態下,您可以使用手指拖曳,藉此探索畫面的不同部分。手指離開後,畫面隨即恢復原先的狀態。"\n\n"注意:除了鍵盤與導覽列部分以外,其他地方均適用輕按三下以放大畫面的做法。"
    + "啟用這項功能時,只要在螢幕上輕按三下即可縮放。\n\n放大時,您可以:\n"
    • "平移:使用兩指或多指在螢幕上拖曳。"
    • \n
    • "調整縮放等級:使用兩指或多指往內撥或往外撥。"
    \n\n"此外,您只要輕按三下並持續按住,即可暫時放大手指所觸畫面。在這種放大狀態下,您可以使用手指拖曳,藉此探索畫面的不同部分。手指離開後,畫面隨即恢復原先的狀態。\n\n注意:除了鍵盤與導覽列部分以外,其他地方均適用輕按三下以放大畫面的做法。"
    "協助工具捷徑" "開啟" "關閉" - "開啟這項功能時,您可以透過兩個步驟快速啟用協助工具功能:"\n\n"步驟 1:持續按住電源按鈕,直到聽見音效或感到震動。"\n\n"步驟 2:使用兩指輕觸並按住,直到聽見確認音效。"\n\n"如有多位使用者共用裝置,在鎖定畫面上使用這個捷徑會暫時啟用協助工具,直到裝置遭到解鎖為止。" + "開啟這項功能時,您可以透過兩個步驟快速啟用協助工具功能:\n\n步驟 1:持續按住電源按鈕,直到聽見音效或感到震動。\n\n步驟 2:使用兩指輕觸並按住,直到聽見確認音效。\n\n如有多位使用者共用裝置,在鎖定畫面上使用這個捷徑會暫時啟用協助工具,直到裝置遭到解鎖為止。" "大字體" "螢幕放大" "自動更新螢幕放大設定" @@ -1366,6 +1372,16 @@ "TalkBack 提供語音回應功能協助視障或視力不佳的使用者。現在可以免費從 Android Market 安裝這項功能,您要安裝嗎?" "未提供說明。" "設定" + "列印" + "列印設定" + "服務" + "要使用「%1$s」嗎?" + "「%1$s」可接收您所列印的文件,這些文件可能含有機密資料。" + "未安裝任何服務" + "設定" + "新增印表機" + "開啟" + "關閉" "電池" "查看正在消耗電力的功能" "沒有電池用量資料。" @@ -1405,8 +1421,10 @@ "Wi-Fi 執行中" "平板電腦" "手機" - "已傳送資料" - "已接收資料" + "已傳送的行動數據量" + "已接收的行動數據量" + "已傳送的 Wi-Fi 數據量" + "已接收的 Wi-Fi 數據量" "音訊" "影片" "開啟時間" @@ -1460,6 +1478,7 @@ "音調" "影響文字轉語音功能的播放音調" "語言" + "未選取語言" "設定文字轉語音功能要用的語言" "聆聽範例" "播放簡短的語音合成範例" @@ -1598,7 +1617,7 @@ "EAP 不受支援。" "設定精靈執行期間無法調整 EAP Wi-Fi 連線設定。請在設定精靈完成後,前往 [設定] 的 [無線與網路] 調整相關設定。" "連線中,請稍候幾分鐘…" - "輕觸 [下一步]"" 即可繼續設定程序;"\n\n"輕觸 [返回]"" 則可連線至其他 Wi-Fi 網路。" + "輕觸 [下一步]"" 即可繼續設定程序;\n\n輕觸 [返回]"" 則可連線至其他 Wi-Fi 網路。" "同步處理已啟用" "同步處理已停用" "同步處理錯誤。" @@ -1680,8 +1699,7 @@ "使用 GPU 繪圖時在視窗中閃爍顯示畫面" "顯示硬體層更新" "在硬體層更新時閃綠燈" - "顯示 GPU 透支" - "從優到劣依序顯示:藍色、綠色、淺紅色、紅色" + "針對 GPU 透支情形進行偵錯" "停用硬體重疊圖層" "一律使用 GPU 進行畫面合成" "啟用 OpenGL 追蹤" @@ -1742,11 +1760,11 @@ "停用行動網路的背景資料。系統將使用非行動網路 (可連上時)。" "您必須設定行動數據限制,才能限制這個應用程式的背景資料。" "限制背景資料?" - "如果採用這項功能,當只有行動網路可供使用時,需要背景數據傳輸的應用程式可能會停止運作。"\n\n"您可以在應用程式的設定選單中,找出更多適當的數據用量的選項。" + "如果採用這項功能,當只有行動網路可供使用時,需要背景數據傳輸的應用程式可能會停止運作。\n\n您可以在應用程式的設定選單中,找出更多適當的數據用量的選項。" "您必須設定行動數據限制,才能限制背景資料。" "開啟資料自動同步功能?" - "您在網路上對帳戶進行的任何變更都會自動複製到您的平板電腦。"\n\n"部分帳戶也可能自動將您在平板電腦上進行的所有變更複製到網路上。Google 帳戶會按照這種方式運作。"\n\n"如要選擇每個帳戶要同步處理的資訊類型,請前往 [設定] > [帳戶]。" - "您在網路上對帳戶進行的任何變更都會自動複製到您的手機。"\n\n"部分帳戶也可能自動將您在手機上進行的所有變更複製到網路上。Google 帳戶會按照這種方式運作。"\n\n"如要選擇每個帳戶要同步處理的資訊類型,請前往 [設定] > [帳戶]。" + "您在網路上對帳戶進行的任何變更都會自動複製到您的平板電腦。\n\n部分帳戶也可能自動將您在平板電腦上進行的所有變更複製到網路上。Google 帳戶會按照這種方式運作。\n\n如要選擇每個帳戶要同步處理的資訊類型,請前往 [設定] > [帳戶]。" + "您在網路上對帳戶進行的任何變更都會自動複製到您的手機。\n\n部分帳戶也可能自動將您在手機上進行的所有變更複製到網路上。Google 帳戶會按照這種方式運作。\n\n如要選擇每個帳戶要同步處理的資訊類型,請前往 [設定] > [帳戶]。" "關閉資料自動同步功能?" "這樣可以節省資料用量和電池用量,但您必須手動同步處理每個帳戶才能收集最新資訊。此外,系統進行更新時不會通知您。" "用量週期重設日期" @@ -1755,12 +1773,12 @@ "設定數據用量警告" "設定數據用量上限" "限制資料用量" - "達到指定的流量上限時,系統會停用您的行動數據連線。"\n\n"由於資料用量需依您的平板電腦來計算,而您的行動通訊業者計費方式可能有所不同,請考慮採用保守估計的上限值。" - "達到指定的流量上限時,系統會停用您的行動數據連線。"\n\n"由於資料用量需依您的手機來計算,而您的行動通訊業者計費方式可能有所不同,請考慮採用保守估計的上限值。" + "達到指定的流量上限時,系統會停用您的行動數據連線。\n\n由於資料用量需依您的平板電腦來計算,而您的行動通訊業者計費方式可能有所不同,請考慮採用保守估計的上限值。" + "達到指定的流量上限時,系統會停用您的行動數據連線。\n\n由於資料用量需依您的手機來計算,而您的行動通訊業者計費方式可能有所不同,請考慮採用保守估計的上限值。" "限制背景資料?" "若限制背景行動數據傳輸量,必須連線至 Wi-Fi 網路,部分應用程式和服務才能運作。" - "若限制背景行動數據傳輸量,必須連線至 Wi-Fi 網路,部分應用程式和服務才能運作。"\n\n"這項設定會影響這台平板電腦的所有使用者。" - "若限制背景行動數據傳輸量,必須連線至 Wi-Fi 網路,部分應用程式和服務才能運作。"\n\n"這項設定會影響這支手機的所有使用者。" + "若限制背景行動數據傳輸量,必須連線至 Wi-Fi 網路,部分應用程式和服務才能運作。\n\n這項設定會影響這台平板電腦的所有使用者。" + "若限制背景行動數據傳輸量,必須連線至 Wi-Fi 網路,部分應用程式和服務才能運作。\n\n這項設定會影響這支手機的所有使用者。" "^1"" ""^2"\n"警告" "^1""^2"\n"限制" "移除的應用程式" @@ -1847,8 +1865,8 @@ "使用者" "設有限制的個人資料" "新增使用者" - "您可以建立更多使用者,與更多人共用此裝置。每位使用者都擁有個人空間,可使用並自訂個人的應用程式和桌布等等。此外,使用者可以調整平板電腦設定 (例如會影響所有人的 Wi-Fi 設定)。"\n\n"建立新的使用者之後,必須請新使用者完成設定程序。"\n\n"任何使用者都可以代表其他所有使用者接受更新的應用程式權限。" - "您建立新的使用者之後,對方必須完成設定程序。"\n\n"任何使用者都可以代表所有其他使用者接受更新的應用程式權限。" + "您可以建立更多使用者,與更多人共用此裝置。每位使用者都擁有個人空間,可使用並自訂個人的應用程式和桌布等等。此外,使用者可以調整平板電腦設定 (例如會影響所有人的 Wi-Fi 設定)。\n\n建立新的使用者之後,必須請新使用者完成設定程序。\n\n任何使用者都可以代表其他所有使用者接受更新的應用程式權限。" + "您建立新的使用者之後,對方必須完成設定程序。\n\n任何使用者都可以代表所有其他使用者接受更新的應用程式權限。" "立即設定使用者?" "請確保對方可以使用平板電腦並設定自己的空間" "立即建立個人資料?" @@ -1879,6 +1897,9 @@ "這項設定會影響這支手機的所有使用者。" "變更語言" "變更字型大小" + "限制" + "移除限制" + "變更 PIN 碼" "顯示通知" "說明" "內容帳戶" diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml index 605e32d5f80..6be38649edb 100644 --- a/res/values-zu/arrays.xml +++ b/res/values-zu/arrays.xml @@ -30,8 +30,8 @@ "Konke"
    - "amasekhondi angu-15" - "amasekhondi angu-30" + "15 amasekhondi" + "30 amasekhondi" "1 iminithi" "2 amaminithi" "amaminithii angu-5" @@ -50,9 +50,9 @@ "Ngokushesha" - "amasekhondi angu-5" - "amasekhondi angu-15" - "amasekhondi angu-30" + "5 amasekhondi" + "15 amasekhondi" + "30 amasekhondi" "1 iminithi" "2 amaminithi" "5 amaminithi" @@ -142,7 +142,7 @@ "2 amaminithi" "amaminithii angu-5" - "ihora elingu-1" + "1 ihora" "Ayiphelelwa isikhathi" @@ -233,7 +233,8 @@ "Indawo" "Okomuntu siqu" "Imilayezo" - "Idivayisi" + "Abezindaba" + "Idivayisi" "indawo emaholoholo" @@ -267,6 +268,17 @@ "dlala umsindo" "funda ibhodi lokunamathisela" "shintsha ibhodi lokunamathisela" + "izinkinobho zabezindaba" + "ukugxila komsindo" + "ivolumu kangqo" + "ivolumu yezwi" + "ivolumu yokukhala" + "ivolumu yabezindaba" + "ivolumu ye-alamu" + "ivolumu yesaziso" + "ivolumu ye-bluetooth" + "gcina kuphapheme" + "ngamela indawo" "Indawo" @@ -300,12 +312,33 @@ "Dlala umsindo" "Funda ibhodi lokunamathisela" "Shintsha ibhodi lokunamathisela" + "Izinkinobho zabezindaba" + "Ukugxila komsindo" + "Ivolumu kangqo" + "Ivolumu yezwi" + "Ivolumu yokukhala" + "Ivolumu yabezindaba" + "Ivolumu ye-alamu" + "Ivolumu yesaziso" + "Ivolumu ye-Bluetooth" + "Gcina kuphapheme" + "Indawo" "Kufushane" "Okulingene" "Kude" + + "I-Dalvik" + "UBUCIKO" + "UBUCIKO (ukulungisa iphutha)" + + + "Sebenzisa i-Dalvik" + "Sebenzisa UBUCIKO" + "Sebenzisa ukwakha kokulungisa iphutha LOBUCIKO" + "Akusoze kuhlole" "Hlola okuqukethwe kwe-DRM kuphela" @@ -367,6 +400,11 @@ "Kusikrini njengemigqa" "Ku-adb shell dumpsys gfxinfo" + + "Valiwe" + "Bonisa izindawo zokukhipha okungaphezulu" + "Bonisa ikhawunda yokukhipha okungaphezulu" + "Isilanganiso esivamile" "Azikho izinqubo zesizinda" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index 0611c7f7387..8b8f84926b0 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -275,8 +275,8 @@ "Ulahlekelwe uxhumano lwedatha ngoba ushiye inethiwekhi yakho yasekhaya inokuzulazula kwedatha kuvaliwe." "Yivule" "Uma uvumela ukuhamba kwedatha, ungathola amashaji yokuthola amancane!" - "Uma uvumela ukuzulazula kwedatha, ungahle ufake ebucayini amashaji okuzula amancane!"\n\n"Lesi silungiselelwa sithinta bonke abasebenzisi kule thebulethi." - "Uma uvumela ukuzulazula kwedatha, ungahle ufake ebucayini amashaji okuzula amancane!"\n\n"Lesi silungiselelwa sithinta bonke abasebenzisi kule foni." + "Uma uvumela ukuzulazula kwedatha, ungahle ufake ebucayini amashaji okuzula amancane!\n\nLesi silungiselelwa sithinta bonke abasebenzisi kule thebulethi." + "Uma uvumela ukuzulazula kwedatha, ungahle ufake ebucayini amashaji okuzula amancane!\n\nLesi silungiselelwa sithinta bonke abasebenzisi kule foni." "Vumela ukuhamba kwedatha?" "Inketho yo-opheretha" "Khetha inkamapani yenethiwekhi" @@ -322,8 +322,8 @@ "Dinga i-PIN yenombolo noma iphasiwedi ukubonisa umbhalo wemfihlo kwithebhulethi ngazo zonke izikhathi lapho uyivula" "Dinga i-PIN yenombolo noma iphasiwedi ukungabhali ngemfihlo ifoni yakho njalo lapho uyivula" "Betheliwe" - "Ungabethela ama-akhawunti wakho, izilungiselelo, ulande izinhlelo zokusebenza nedatha yazo, imidiya, namanye amafayela. Uma usubethele ikhompyutha yakho, udinga ukuthayipha i-PIN yenombolo noma iphasiwedi ukususa ukubhala ngekhodi ngaso isikathi ukhanyisa: awukwazi ukususa ukubhala ngakhodi ikhompyutha yakho ngaphandle kokwenza kabusha idatha yakho yenkampani, sula yonke idatha yakho."\n\n"Ukubhala ngekhodi kuthatha ihora noma ngaphezulu. Kufanele uqale ngebhtri elishajiwe futhi ugcine ikhompyutha yakho iplakiwe kuze kuphele ukubethela. Uma uphazamisa inqubo yokubethela, uzolahlekelwa enye noma yonke idatha yakho." - "Ungabhala ngakhodi ama-akhawunti wakho, izilungiselelo, ulande ama-apps nedatha yawo, imidiya namanye amafayela. Uma usubhale ngekhodi ucingo lakho, udinga ukuthayipha i-PIN yezinombolo noma iphasiwedi ukususa ukubhala ngakhodi ngaso sonke isikhathi uma uyikhanyisa: awukwazi ukususa ukubhala ngekhodi ucingo lakho ngaphandle kokwenza ukusetha kabusha idatha yenkampani, ususe yonke idatha yakho."\n\n"Ukubhala ngekhodi kuthatha ihora noma ngaphezulu. Kufanele uqale ngebhitri elishajiwe futhi ugcine ucingo lakho luplakiwe kuze ukubhala ngekhodi kuqedele. Uma uphazamisa inqubo yokubhala ngekhodi, uzolahlekelwa enye noma yonke idatha yakho." + "Ungabethela ama-akhawunti wakho, izilungiselelo, ulande izinhlelo zokusebenza nedatha yazo, imidiya, namanye amafayela. Uma usubethele ikhompyutha yakho, udinga ukuthayipha i-PIN yenombolo noma iphasiwedi ukususa ukubhala ngekhodi ngaso isikathi ukhanyisa: awukwazi ukususa ukubhala ngakhodi ikhompyutha yakho ngaphandle kokwenza kabusha idatha yakho yenkampani, sula yonke idatha yakho.\n\nUkubhala ngekhodi kuthatha ihora noma ngaphezulu. Kufanele uqale ngebhtri elishajiwe futhi ugcine ikhompyutha yakho iplakiwe kuze kuphele ukubethela. Uma uphazamisa inqubo yokubethela, uzolahlekelwa enye noma yonke idatha yakho." + "Ungabhala ngakhodi ama-akhawunti wakho, izilungiselelo, ulande ama-apps nedatha yawo, imidiya namanye amafayela. Uma usubhale ngekhodi ucingo lakho, udinga ukuthayipha i-PIN yezinombolo noma iphasiwedi ukususa ukubhala ngakhodi ngaso sonke isikhathi uma uyikhanyisa: awukwazi ukususa ukubhala ngekhodi ucingo lakho ngaphandle kokwenza ukusetha kabusha idatha yenkampani, ususe yonke idatha yakho.\n\nUkubhala ngekhodi kuthatha ihora noma ngaphezulu. Kufanele uqale ngebhitri elishajiwe futhi ugcine ucingo lakho luplakiwe kuze ukubhala ngekhodi kuqedele. Uma uphazamisa inqubo yokubhala ngekhodi, uzolahlekelwa enye noma yonke idatha yakho." "Bethela ithebhulethi" "Bethela ifoni" "Sicela ushaje ibhetri yakho bese uzama futhi." @@ -339,8 +339,8 @@ "Zama futhi emasekhondini angu-^1." "Thayipha iphasiwedi yakho" "Ubhala ngokufihlekileyo akuphumelelanga" - "Ukubethela kuphazamisekile futhi ngeke kusaphela. Ngenxa yalokho, akusafinyeleleki kwidatha ekuthebhulethi yakho. "\n\n"Ukuze uphinde usebenzise ithebhulethi yakho, kufanele isethwe kabusha. Uma ususetha ithebhulethi yakho emuva kokuba isethwe kabusha, uzothola ithuba lokubuyisa nanoma iyiphi idatha eyayilondolozwe kwi-akhawunti yakho yakwa-Google.." - "Ukubhelake bumfihlo kuphazamisekile futhi ngeke kusaphela. Ngenxa yalokho, akusafinyeleleki kwidatha esocingweni lwakho. "\n\n"Ukuze uphinde usebenzise ucingo lwakho, kufanele lusethwe kabusha endaweni yokukhanda. Uma ususetha ucingo lwakho emva kokuba lusethwe kabusha, uzothola ithuba lokubuyisa nanoma iyiphi idatha eyayilondolozwe kwi-akhawunti yakho yakwa-Google." + "Ukubethela kuphazamisekile futhi ngeke kusaphela. Ngenxa yalokho, akusafinyeleleki kwidatha ekuthebhulethi yakho. \n\nUkuze uphinde usebenzise ithebhulethi yakho, kufanele isethwe kabusha. Uma ususetha ithebhulethi yakho emuva kokuba isethwe kabusha, uzothola ithuba lokubuyisa nanoma iyiphi idatha eyayilondolozwe kwi-akhawunti yakho yakwa-Google.." + "Ukubhelake bumfihlo kuphazamisekile futhi ngeke kusaphela. Ngenxa yalokho, akusafinyeleleki kwidatha esocingweni lwakho. \n\nUkuze uphinde usebenzise ucingo lwakho, kufanele lusethwe kabusha endaweni yokukhanda. Uma ususetha ucingo lwakho emva kokuba lusethwe kabusha, uzothola ithuba lokubuyisa nanoma iyiphi idatha eyayilondolozwe kwi-akhawunti yakho yakwa-Google." "Shintsha indlela yokufaka" "Khetha isivali sesikrini" "Khetha ukukhiywa kokulondoloza" @@ -514,6 +514,7 @@ "Iyaxhuma" "Ixhunyiwe" "Kuyatholakala" + "Kuyasebenza" "Bonisa izilungiselelo" "Nqamula?" "Lokhu kuzophelisa uxhumano nge:<br><b>%1$s</b>" @@ -532,7 +533,7 @@ "Valiwe" "Ayitholakali ngoba i-NFC icishiwe" "i-Android Beam" - "Uma kuvulwe lesi sici, ungadlulisa okuqukethwe okusetshenziswayo kwenye ikhebuli ye-NFC ngokumisa amadivayisi enye eduze kwenye. Isibonelo ungahlanganisa amakhasi Esiphequluli, amavidiyo ka-YouTube, kwezokuxhumana nabantu, kanye nokunye."\n\n"Hlanganisa amadivayisi ndawonye (ngokujwayelekile enye ngemuva kwenye) bese uthinta isikrini sakho. Uhlelo lokusebenza luyathola ukuthi yini ezoba-beamed." + "Uma kuvulwe lesi sici, ungadlulisa okuqukethwe okusetshenziswayo kwenye ikhebuli ye-NFC ngokumisa amadivayisi enye eduze kwenye. Isibonelo ungahlanganisa amakhasi Esiphequluli, amavidiyo ka-YouTube, kwezokuxhumana nabantu, kanye nokunye.\n\nHlanganisa amadivayisi ndawonye (ngokujwayelekile enye ngemuva kwenye) bese uthinta isikrini sakho. Uhlelo lokusebenza luyathola ukuthi yini ezoba-beamed." "Ukutholwa kwesevisi yenethiwekhi" "Vumela izinhlelo zokusebenza kwamanye amadivayisi ukuthola izinhlelo zokusebenza kule divayisi" "I-Wi-Fi" @@ -620,7 +621,7 @@ "Ivikelwe nge-%1$s" ", ivikelwe nge-%1$s" "Lutho" - "Ukuze kuthuthukiswe ukufaneleka kwendawo nezinye izinjongo, i-%1$s ifuna ukuvula ukuskena kwenethiwekhi, noma ngabe i-Wi-Fi ivaliwe."\n\n"Vumela lokhu ngazo zonke izinhlelo zokusebenza ezifuna ukuskena?" + "Ukuze kuthuthukiswe ukufaneleka kwendawo nezinye izinjongo, i-%1$s ifuna ukuvula ukuskena kwenethiwekhi, noma ngabe i-Wi-Fi ivaliwe.\n\nVumela lokhu ngazo zonke izinhlelo zokusebenza ezifuna ukuskena?" "Vumela" "Phika" "Xhuma kwi-inthanethi" @@ -632,8 +633,8 @@ "Khansela" "Yeqa noma kunjalo" "Ungeqi" - "ISEXWAYISO: Ungahle uthole amashaji edatha enkampani yenethiwekhi angeziwe."\n\n"Ukusethwa kwethebulethi kungadinga umsebenzi wenethiwekhi omcane." - "ISEXWAYISO: Ungahle uthole amashaji edatha enkampani yenethiwekhi angeziwe."\n\n"Ukusethwa kwefoni kungadinga umsebenzi wenethiwekhi omcane." + "ISEXWAYISO: Ungahle uthole amashaji edatha enkampani yenethiwekhi angeziwe.\n\nUkusethwa kwethebulethi kungadinga umsebenzi wenethiwekhi omcane." + "ISEXWAYISO: Ungahle uthole amashaji edatha enkampani yenethiwekhi angeziwe.\n\nUkusethwa kwefoni kungadinga umsebenzi wenethiwekhi omcane." "ISEXWAYISO: Kuze ube nokuxhunywa kwe-intanethi, ithebulethi angeke ize ikwazi ukuqinisekisa ukuthi isofthiwe yakho isesikhathini samanje." "ISEXWAYISO: Kuze ube nokuxhunywa kwe-intanethi, ifoni angeke ize ikwazi ukuqinisekisa ukuthi isofthiwe yakho isesikhathini samanje." "Ithebhulethi ayikwazanga ukuxhuma kule nethiwekhi ye-Wi-Fi." @@ -773,9 +774,9 @@ "I-SIM PIN" "I-PIN Engalungile!" "Ama-PIN awafani" - "Ayikwazi ukushintsha i-PIN."\n"Mhlawumbe i-PIN engalungile" + "Ayikwazi ukushintsha i-PIN.\nMhlawumbe i-PIN engalungile" "I-PIN ye-SIM ishintshwe ngempumelelo" - "Ayikwazi ukushintsha isimo sokuvala ikhadi le-SIM."\n"Kungenzeka i-PIN engalungile." + "Ayikwazi ukushintsha isimo sokuvala ikhadi le-SIM.\nKungenzeka i-PIN engalungile." "KULUNGILE" "Khansela" "Isimo sethebhulethi" @@ -919,9 +920,9 @@ "Ukuhlela kabusha idatha yasembonini" "Isula yonke idatha kwithebhulethi" "Isula yonke idatha kwifoni" - "Lokhu kuzosusa yonke idatha ""ekwistoreji sangaphakathi kuthebhulethi yakho"", ehlanganisa:"\n\n
  • "I-akhawunti yakho ye-Google"
  • \n
  • "Uhlelo lokusebenza kanye nezilungiselelo"
  • \n
  • "Izinhlelo zokusebenza ezilayishiwe"
  • - "Lokhu kuzosusa yonke idatha ""ekwisitoreji sangaphakathi sefoni yakho"", ehlanganisa:"\n\n
  • "I-akhawunti yakho ye-Google"
  • \n
  • "Uhlelo lokusebenza kanye nezilungiselelo"
  • \n
  • "Izinhlelo zokusebenza ezilayishiwe"
  • - \n"Okwamanje ungene ngemvume kuma-akhawunti alandelayo:"\n\n + "Lokhu kuzosusa yonke idatha ""ekwistoreji sangaphakathi kuthebhulethi yakho"", ehlanganisa:\n\n"
  • "I-akhawunti yakho ye-Google"
  • \n
  • "Uhlelo lokusebenza kanye nezilungiselelo"
  • \n
  • "Izinhlelo zokusebenza ezilayishiwe"
  • + "Lokhu kuzosusa yonke idatha ""ekwisitoreji sangaphakathi sefoni yakho"", ehlanganisa:\n\n"
  • "I-akhawunti yakho ye-Google"
  • \n
  • "Uhlelo lokusebenza kanye nezilungiselelo"
  • \n
  • "Izinhlelo zokusebenza ezilayishiwe"
  • + \n"Okwamanje ungene ngemvume kuma-akhawunti alandelayo:\n\n"
  • "Umculo"
  • \n
  • "Izithombe"
  • \n
  • "Enye idatha yomsebenzisi"
  • \n\n"Ukusula futhi umculo, izithombe, nenye idatha yomsebenzisi, "" indawo yokugcina ye-USB""idinga ukusulwa." \n\n"Ukusula umculo, izithombe, nenye imininingo yomsebenzisi, ""ikhadi le-SD""kumele lisuswe." @@ -1106,7 +1107,7 @@ "Bonisa izinqubo zokulondoloza kwesikhashana" "Setha kabusha izintandokazi zezinhlelo zokusebenza" "Setha kabusha izintandokazi zohlelo lokusebenza?" - "Lokhu kuzosetha kabusha zonke izintandokazi ze:"\n\n" "
  • "Izinhlelo zokusebenza ezikhutshaziwe"
  • \n" "
  • "Izaziso zezinhlelo zokusebenza ezikhutshaziwe"
  • \n" "
  • "Izinhlelo zokusebenza zokuzenzakalelayo zezenzo"
  • \n" "
  • "Idatha yangokwasemuva yezinhlelo zokusebenza"
  • \n\n" Ngeke ulahlekelwe idatha yohlelo lokusebenza."
    + "Lokhu kuzosetha kabusha zonke izintandokazi ze:\n\n "
  • "Izinhlelo zokusebenza ezikhutshaziwe"
  • \n" "
  • "Izaziso zezinhlelo zokusebenza ezikhutshaziwe"
  • \n" "
  • "Izinhlelo zokusebenza zokuzenzakalelayo zezenzo"
  • \n" "
  • "Idatha yangokwasemuva yezinhlelo zokusebenza"
  • \n\n" Ngeke ulahlekelwe idatha yohlelo lokusebenza."
    "Setha kabusha izinhlelo zokusebenza" "Lawula isikhala" "Hlunga" @@ -1247,9 +1248,7 @@ "Ukuze ushintshe, cindezela u-Control-Spacebar" "Okuzenzakalelayo" "Izendlalelo zekhibhodi" - "Sebenzisa isichazamazwi" - "Isichazamazwi sakho" - "Izichazamazwi eziqondene nawe" + "Isichazamazwi somuntu siqu" "Engeza" "Faka kwisichazamazwi" @@ -1310,6 +1309,11 @@ "Faka phakathi inketho kumenyu yamandla yokuthatha umbiko wesiphazamiso" "Hlala uphapheme" "Isikrini asisoze salala ngenkathi sishaja" + "Nika amandla i-Bluetooth HCI yelogu lokuhlola" + "Shutha wonke amaphakethe we-bluetooth HCI kufayela" + "Khetha isikhathi sokusebenza" + "Khetha isikhathi sokusebenza" + "Qalisa kabusha ukuze ushintshe isikhathi sokusebenza kusukela ku-%1$s ngu-%2$s?" "Vumela izindawo mbumbulu" "Vumela izindawo mbumbulu" "Vumela ukulungisa iphutha le-USB?" @@ -1322,11 +1326,13 @@ "Vikela isilondolozi se-USB" "Izinhlelo zokusebenza kufanele zicele imvume yokufunda isilondolozi se-USB" "Vikela isilondolozi se-USB?" - "Uma isilondolozi se-USB sivikelekile, izinhlelo zokusebenza kufanele zicele imvume yokufunda idatha kusuka kwisilondolozi sangaphandle."\n\n"Ezinye izinhlelo zokusebenza zingahle zingasebenzi zize zibuyekezwe onjiniyela bazo." + "Uma isilondolozi se-USB sivikelekile, izinhlelo zokusebenza kufanele zicele imvume yokufunda idatha kusuka kwisilondolozi sangaphandle.\n\nEzinye izinhlelo zokusebenza zingahle zingasebenzi zize zibuyekezwe onjiniyela bazo." "Vikela ikhadi le-SD" "Izinhlelo zokusebenza kufanele zicele imvume yokufunda ikhadi le-SD" "Vikela ikhadi le-SD?" - "Uma ikhadi le-SD livikelekile, izinhlelo zokusebenza kufanele zicele imvume yokufunda idatha ngesilondolozi sangaphandle."\n\n"Ezinye izinhlelo zokusebenza zingahle zingasebenzi zize zibuyekezwe onjiniyela bazo." + "Uma ikhadi le-SD livikelekile, izinhlelo zokusebenza kufanele zicele imvume yokufunda idatha ngesilondolozi sangaphandle.\n\nEzinye izinhlelo zokusebenza zingahle zingasebenzi zize zibuyekezwe onjiniyela bazo." + "Itheminali yasendaweni" + "Nika amandla uhlelo lokusebenza letheminali olunikeza ukufinyelela kwasendaweni kwe-shell" "Khetha igajethi" "Khetha iwijethi" "Yenza iwijethi bese uvumela ukufinyeleleka?" @@ -1347,11 +1353,11 @@ "Amasevisi" "Isistimu" "Ukuthinta kokukhulisa" - "Uma lesi sici sivuliwe, ungasondeza futhi unciphise ngokucindezela kathathu isikrini."\n\n"Ngenkathi kusondeziwe, ungahle:"\n
    • "Uyise emaceleni: Hudula iminwe emibili noma eminingi esikrinini."
    • \n
    • "Lungisa ileveli zokusondeza: Cindezela iminwe emibili noma eminingi noma uyihlukanise."
    \n\n"Futhi ungahle ukhulise okwesikhashana okungaphandi komunwe wakho ngokucindezela kathathu futhi ubambe. Kuleli zinga lokukhulisa, ngahudula umunwe wakho ukuze uhlole izingxenye ezahlukahlukene zesikrini. Phakamisa umunwe wakho ukuze ubuyele esimeni sangaphambilini."\n\n"Qaphela: Ukucindezela kathathu kusebenza noma ikuphi ngaphandle kwekhibhodi nebha lokuzula."
    + "Uma lesi sici sivuliwe, ungasondeza futhi unciphise ngokucindezela kathathu isikrini.\n\nNgenkathi kusondeziwe, ungahle:\n"
    • "Uyise emaceleni: Hudula iminwe emibili noma eminingi esikrinini."
    • \n
    • "Lungisa ileveli zokusondeza: Cindezela iminwe emibili noma eminingi noma uyihlukanise."
    \n\n"Futhi ungahle ukhulise okwesikhashana okungaphandi komunwe wakho ngokucindezela kathathu futhi ubambe. Kuleli zinga lokukhulisa, ngahudula umunwe wakho ukuze uhlole izingxenye ezahlukahlukene zesikrini. Phakamisa umunwe wakho ukuze ubuyele esimeni sangaphambilini.\n\nQaphela: Ukucindezela kathathu kusebenza noma ikuphi ngaphandle kwekhibhodi nebha lokuzula."
    "Isinqamuleli sokufinyelela" "Vuliwe" "Valiwe" - "Uma lesi sici sivuliwe, unganika amandla ngokushesha izici zokufinyelela ngezinyathelo ezimbili:"\n\n"Isinyathelo 1: Cindezela futhi ubambe inkinobho vula/cisha uze uzwe umsindo noma uzwe ukudlidliza."\n\n"Isinyathelo 2: Cindezela futhi ubambe ngeminwe emibili uze uzwe ukuqinisekisa komsindo."\n\n"Uma idivayisi inabasebenzisi abaningi, ukusebenzisa isinqamuleli esikrinini sokukhiya kunika amandla okwesikhashana ukufinyelela kuze kuvuleke idivayisi." + "Uma lesi sici sivuliwe, unganika amandla ngokushesha izici zokufinyelela ngezinyathelo ezimbili:\n\nIsinyathelo 1: Cindezela futhi ubambe inkinobho vula/cisha uze uzwe umsindo noma uzwe ukudlidliza.\n\nIsinyathelo 2: Cindezela futhi ubambe ngeminwe emibili uze uzwe ukuqinisekisa komsindo.\n\nUma idivayisi inabasebenzisi abaningi, ukusebenzisa isinqamuleli esikrinini sokukhiya kunika amandla okwesikhashana ukufinyelela kuze kuvuleke idivayisi." "Umbhalo omkhulu" "Isisondezi-skrini" "Buyekeza ngokuzenzakalela isisondezi-skrini" @@ -1373,6 +1379,16 @@ "I-TalkBack inikeza usizo lokuphendula kwezi ukuze kusizakale abangaboni kanye nalabo ababona kancane. Ingabe uyafuna ukuyifaka mahhala uyithola Emaketheni ye-Android?" "Akukho ncazelo enikeziwe." "Izilungiselelo" + "Ukuphrinta" + "Izilungiselelo zokuphrinta" + "Amasevisi" + "Sebenzisa i-%1$s?" + "I-%1$s ingathola amadokhumenti owaphrintayo. Amadokhumenti anjalo angaqukatha idatha ebucayi." + "Awekho amasevisi afakiwe" + "Izilungiselelo" + "Engeza amaphrinta" + "Vuliwe" + "Valiwe" "Ibhetri" "Yini ekade isebenzisa ibhetri" "Idatha esebenzisa ibhethri ayitholakali." @@ -1412,8 +1428,10 @@ "I-Wi-Fi iyasebenza" "Ithebhulethi" "Ifoni" - "Idatha ithunyelwe" - "Idatha etholiwe" + "Idatha yeselula ethunyelwe" + "Idatha yeselula etholakele" + "Idatha ye-Wi‑Fi ethunyelwe" + "Idatha ye-Wi‑Fi etholakele" "Umsindo" "Ividiyo" "Isikhathi sivuliwe" @@ -1467,6 +1485,7 @@ "Ukuphakama" "Ithinta ithoni yombhalo okhulunyiwe" "Ulimi" + "Ulimi alukhethwanga" "Ihlela izwi lolimi oluthize lombhalo okhulunyiwe" "Lalela isibonelo" "Dlala umboniso omfushane wamazwi" @@ -1601,7 +1620,7 @@ "I-EAP ayisekelwa" "Awukwazi ukulungiselela uxhumano lwe-EAP Wi-Fi phakathi nokusetha. Emva kokusetha, ungenza kanjalo kuzilungiselelo > okungenazintambo namanethiwekhi" "Ukuxhuma kungathatha amaminithi ambalwa..." - "Thinta""Okulandelayo"" ukuqhubeka nokusetha."\n\n"Thinta""Emuva"" ukuxhuma kuhleloxhumano olwehlukile." + "Thinta""Okulandelayo"" ukuqhubeka nokusetha.\n\nThinta""Emuva"" ukuxhuma kuhleloxhumano olwehlukile." "Ukunika amandla kuvumelanisiwe" "Ukuvumelanisa kukhubaziwe" "Iphutha lokuvumelanisa." @@ -1683,8 +1702,7 @@ "Ukubuka okukhanyayo phakathi kwamawindi uma kudwetshwe nge-GPU" "Bonisa izibuyekezo zezendlalelo izingxenyekazi zekhompyutha" "Izendlalelo zengxenyekazi zekhompyutha eziluhlaza uma zibuyekeza" - "Bonisa i-GPU overdraw" - "Kusuka kokuhle kuya kokubi kakhulu: okuluhlaza okwesibhakabhaka, okuluhlaza okotshani, okubomvu okukhanyayo, okubomvu" + "Susa iphutha lokukhipha okungaphezulu kwe-GPU" "Khubaza izimbondela ze-HW" "Njalo sebenzisa i-GPU ukwakha isikrini" "Nika amandla ukulandelwa komkhondo kwe-OpenGL" @@ -1745,11 +1763,11 @@ "Khubaza idatha yokwangasemuva kumanethiwekhi eselula. Amanethiwekhi okungewona eselula azosetshenziswa uma etholakala." "Ukuze ubeke umkhawulo wezisetshenziswa zangemuva zalesi sisetshenziswa, qala ulungise umkhawulo wemininingo yeselula." "Beka isivimbelo kwimininingo yemininingo egciniwe?" - "Lesi sici singahle sibangele uhlelo lokusebenza olukhosele kudatha yokwangasemuva ukungasasebenzi uma amanethiwekhi kuphela eselula atholakala."\n\n"Ungathola ukulawula kokusetshenziswa kwedatha okufanele kuzilungiselelo ezitholakalayo ngaphakathi kohlelo lokusebenza." + "Lesi sici singahle sibangele uhlelo lokusebenza olukhosele kudatha yokwangasemuva ukungasasebenzi uma amanethiwekhi kuphela eselula atholakala.\n\nUngathola ukulawula kokusetshenziswa kwedatha okufanele kuzilungiselelo ezitholakalayo ngaphakathi kohlelo lokusebenza." "Imininingo yangemuva engavumelekile itholakala kuphela uma ubeke umkhawulo wemininingo yeselula." "Khanyisa ukuvumelanisa idatha ngokuzenzakalelayo?" - "Noma iziphi izinguquko ozenzayo kuma-akhawunti wakho kuwebhu zizokopishelwa ngokuzenzakalela efonini yakho."\n\n"Amanye ama-akhawunti angakopisha ngokuzenzakalela noma iziphi izinguquko ozenzayo kuthebulethi kuya kuwebhu. I-akhawunti yakwa-Google isebenza ngale ndlela."\n\n"Ukuze ukhethe ukuthi uluphi uhlobo lolwazi ongaluvumelanisa ngaphakathi kwe-akhawunti ngayinye, iya kuzilungiselelo > ama-akhawunti." - "Noma iziphi izinguquko ozenzayo kuma-akhawunti wakho kuwebhu zizokopishelwa ngokuzenzakalela efonini yakho."\n\n"Amanye ama-akhawunti angakopisha ngokuzenzakalela noma iziphi izinguquko ozenzayo efonini kuya kuwebhu. I-akhawunti yakwa-Google isebenza ngale ndlela."\n\n"Ukuze ukhethe ukuthi uluphi uhlobo lolwazi ongaluvumelanisa ngaphakathi kwe-akhawunti ngayinye, iya kuzilungiselelo > ama-akhawunti." + "Noma iziphi izinguquko ozenzayo kuma-akhawunti wakho kuwebhu zizokopishelwa ngokuzenzakalela efonini yakho.\n\nAmanye ama-akhawunti angakopisha ngokuzenzakalela noma iziphi izinguquko ozenzayo kuthebulethi kuya kuwebhu. I-akhawunti yakwa-Google isebenza ngale ndlela.\n\nUkuze ukhethe ukuthi uluphi uhlobo lolwazi ongaluvumelanisa ngaphakathi kwe-akhawunti ngayinye, iya kuzilungiselelo > ama-akhawunti." + "Noma iziphi izinguquko ozenzayo kuma-akhawunti wakho kuwebhu zizokopishelwa ngokuzenzakalela efonini yakho.\n\nAmanye ama-akhawunti angakopisha ngokuzenzakalela noma iziphi izinguquko ozenzayo efonini kuya kuwebhu. I-akhawunti yakwa-Google isebenza ngale ndlela.\n\nUkuze ukhethe ukuthi uluphi uhlobo lolwazi ongaluvumelanisa ngaphakathi kwe-akhawunti ngayinye, iya kuzilungiselelo > ama-akhawunti." "Cima ukuvumelanisa idatha ngokuzenzakalela?" "Lokhu kuzokonga ukusetshenziswa kwedatha nebhethri, kepha uzodinga ukuvumelanisa i-akhawunti ngayinye ngokwenza ukuze uqoqe ulwazi lakamuva. Futhi ngeke uthole izaziso uma izibuyekezo zivela." "Usuku lokuhlela kabusha umjikelezo wokusebenza" @@ -1758,12 +1776,12 @@ "Setha isexwayiso sokusebenziseka kwedatha" "Setha umkhawulo wokusetshenziswa kwedatha" "Ilinganisela ukusebenza kwedatha" - "Uxhumo lwedatha yakho yeselula luzokhubazwa uma uma umkhawulo ocacisiwe usufinyelelwe."\n\n"Njengoba ukusetshenziswa kwedatha kukalwa ngethebulethi yakho, kanti nenkampani yakho yenethiwekhi ungabhekana nokusetshenziswa ngokwehlukile, naka ukusebenzisa umkhawulo olandelanayo." - "Uxhumo lwedatha yakho yeselula luzokhubazwa uma umkhawulo ocacisiwe usufinyelelwe."\n\n"Njengoba ukusetshenziswa kwedatha kukalwa ngefoni yakho, kanti nenkampani yakho yenethiwekhi ungabhekana nokusetshenziswa ngokwehlukile, naka ukusebenzisa umkhawulo olandelanayo." + "Uxhumo lwedatha yakho yeselula luzokhubazwa uma uma umkhawulo ocacisiwe usufinyelelwe.\n\nNjengoba ukusetshenziswa kwedatha kukalwa ngethebulethi yakho, kanti nenkampani yakho yenethiwekhi ungabhekana nokusetshenziswa ngokwehlukile, naka ukusebenzisa umkhawulo olandelanayo." + "Uxhumo lwedatha yakho yeselula luzokhubazwa uma umkhawulo ocacisiwe usufinyelelwe.\n\nNjengoba ukusetshenziswa kwedatha kukalwa ngefoni yakho, kanti nenkampani yakho yenethiwekhi ungabhekana nokusetshenziswa ngokwehlukile, naka ukusebenzisa umkhawulo olandelanayo." "Gwema ukusebenza kwedatha yangemuva?" "Uma ukhawulela idatha yeselula yokwangasemuva, ezinye izinhlelo zokusebenza kanye namasevisi ngeke kusebense ngaphandle uma uxhumeke kunethiwekhini ye-Wi-Fi." - "Uma ukhawulela idatha yokwangasemuva, ezinye izinhlelo zokusebenza namasevisi ngeke kusebenze ngaphandle nje kokuthi uxhumeke kunethiekhi ye-Wi-Fi."\n\n"Lesi silungiselelo sithinta bonke abasebenzisi kule thebulethi." - "Uma ukhawulela idatha yokwangasemuva, ezinye izinhlelo zokusebenza namasevisi ngeke kusebenze ngaphandle nje kokuthi uxhumeke kunethiekhi ye-Wi-Fi."\n\n"Lesi silungiselelo sithinta bonke abasebenzisi kule foni." + "Uma ukhawulela idatha yokwangasemuva, ezinye izinhlelo zokusebenza namasevisi ngeke kusebenze ngaphandle nje kokuthi uxhumeke kunethiekhi ye-Wi-Fi.\n\nLesi silungiselelo sithinta bonke abasebenzisi kule thebulethi." + "Uma ukhawulela idatha yokwangasemuva, ezinye izinhlelo zokusebenza namasevisi ngeke kusebenze ngaphandle nje kokuthi uxhumeke kunethiekhi ye-Wi-Fi.\n\nLesi silungiselelo sithinta bonke abasebenzisi kule foni." "^1"" ""^2"\n"isexwayiso" "^1""^2"\n"umkhawulo" "Izinhlelo zokusebenza zisusiwe" @@ -1850,8 +1868,8 @@ "Umsebenzisi" "Iphrofayela evinjelwe" "Engeza umsebenzisi omusha" - "Ungabelana ngale divayisi nabanye abantu ngokudala abasebenzisi abangeziwe. Umsebenzisi ngamunye unesikhala sakhe, lapha angenza khona ngezifiso izinhlelo zakhe zokusebenza, isithombe sangemuva, nokunye. Abasebenzisi futhi balungisa izilungiselelo zethebhulethi njenge-Wi-Fi ethinta wonke umuntu."\n\n"Ngemva kokudala umsebenzisi omusha, loyo muntu udinga ukwenza inqubo yokusetha."\n\n"Noma imuphi umsebenzisi angabuyekeza izimvume zohlelo lokusebenza engxenyeni yabo bonke abanye abasebenzisi." - "Ngemva kokudala umsebenzisi omusha, loyo muntu udinga ukwenza inqubo yokusetha."\n\n"Noma imuphi umsebenzisi angamukela izimvume zohlelo lokusebenza ezibuyekeziwe engxenyeni yabo bonke abanye abasebenzisi." + "Ungabelana ngale divayisi nabanye abantu ngokudala abasebenzisi abangeziwe. Umsebenzisi ngamunye unesikhala sakhe, lapha angenza khona ngezifiso izinhlelo zakhe zokusebenza, isithombe sangemuva, nokunye. Abasebenzisi futhi balungisa izilungiselelo zethebhulethi njenge-Wi-Fi ethinta wonke umuntu.\n\nNgemva kokudala umsebenzisi omusha, loyo muntu udinga ukwenza inqubo yokusetha.\n\nNoma imuphi umsebenzisi angabuyekeza izimvume zohlelo lokusebenza engxenyeni yabo bonke abanye abasebenzisi." + "Ngemva kokudala umsebenzisi omusha, loyo muntu udinga ukwenza inqubo yokusetha.\n\nNoma imuphi umsebenzisi angamukela izimvume zohlelo lokusebenza ezibuyekeziwe engxenyeni yabo bonke abanye abasebenzisi." "Setha umsebenzisi manje?" "Qiniseka ukuthi umuntu uyatholakala ukuthatha ithebulethi futhi asethe isikhala sakhe" "Setha iphrofayela manje?" @@ -1882,6 +1900,9 @@ "Lesi silungiselelo sithinta bonke abasebenzisi kule foni." "Shintsha ulimi" "Shintsha usayizi wefonti" + "Izinciphiso" + "Susa izinciphiso" + "Shintsha i-PIN" "Bonisa izaziso" "Usizo" "I-akhawunti yokuqukethwe" diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 1a11ebb9f5a..a4de07042f7 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -210,6 +210,7 @@ Dies ist ein Beispiel für Sprachsynthese in Deutsch. Questo è un esempio di sintesi vocale in italiano. Este es un ejemplo de síntesis de voz en español. + 이것은 한국어 음성 합성의 예입니다.
    eng @@ -217,6 +218,7 @@ deu ita spa + kor @@ -570,7 +572,7 @@ gid
    - + Internal device storage Removable SD card @@ -589,6 +591,7 @@ Location Personal Messaging + Media Device @@ -625,6 +628,18 @@ play audio read clipboard modify clipboard + media buttons + audio focus + master volume + voice volume + ring volume + media volume + alarm volume + notification volume + bluetooth volume + keep awake + monitor location + monitor high power location @@ -643,15 +658,15 @@ Post notification Location Call phone - Receive SMS/MMS - Send SMS/MMS + Read SMS/MMS + Write SMS/MMS Receive SMS/MMS Receive SMS/MMS Receive SMS/MMS Receive SMS/MMS Send SMS/MMS - Receive SMS/MMS - Send SMS/MMS + Read SMS/MMS + Write SMS/MMS Modify settings Draw on top Access notifications @@ -660,6 +675,18 @@ Play audio Read clipboard Modify clipboard + Media buttons + Audio focus + Master volume + Voice volume + Ring volume + Media volume + Alarm volume + Notification volume + Bluetooth volume + Keep awake + Location + Location @@ -679,6 +706,191 @@ 1500 + + + Default + Sans-serif + Sans-serif condensed + Serif + Monospace + + + + + + sans-serif + sans-serif-condensed + serif + monospace + + + + + Very small + Small + Normal + Large + Very large + + + + + 0.25 + 0.5 + 1.0 + 1.5 + 2.0 + + + + + None + Outline + Drop shadow + + + + + 0 + 1 + 2 + + + + + @string/color_white + @string/color_black + @string/color_red + @string/color_yellow + @string/color_green + @string/color_cyan + @string/color_blue + @string/color_magenta + + + + + 0xFFFFFFFF + 0xFF000000 + 0xFFFF0000 + 0xFFFFFF00 + 0xFF00FF00 + 0xFF00FFFF + 0xFF0000FF + 0xFFFF00FF + 0xFF000055 + 0xFF0000AA + 0xFF005500 + 0xFF005555 + 0xFF0055AA + 0xFF0055FF + 0xFF00AA00 + 0xFF00AA55 + 0xFF00AAAA + 0xFF00AAFF + 0xFF00FF55 + 0xFF00FFAA + 0xFF550000 + 0xFF550055 + 0xFF5500AA + 0xFF5500FF + 0xFF555500 + 0xFF555555 + 0xFF5555AA + 0xFF5555FF + 0xFF55AA00 + 0xFF55AA55 + 0xFF55AAAA + 0xFF55AAFF + 0xFF55FF00 + 0xFF55FF55 + 0xFF55FFAA + 0xFF55FFFF + 0xFFAA0000 + 0xFFAA0055 + 0xFFAA00AA + 0xFFAA00FF + 0xFFAA5500 + 0xFFAA5555 + 0xFFAA55AA + 0xFFAA55FF + 0xFFAAAA00 + 0xFFAAAA55 + 0xFFAAAAAA + 0xFFAAAAFF + 0xFFAAFF00 + 0xFFAAFF55 + 0xFFAAFFAA + 0xFFAAFFFF + 0xFFFF0055 + 0xFFFF00AA + 0xFFFF5500 + 0xFFFF5555 + 0xFFFF55AA + 0xFFFF55FF + 0xFFFFAA00 + 0xFFFFAA55 + 0xFFFFAAAA + 0xFFFFAAFF + 0xFFFFFF55 + 0xFFFFFFAA + + + + + 25% + 50% + 75% + 100% + + + + + 0x40FFFFFF + 0x80FFFFFF + 0xC0FFFFFF + 0xFFFFFFFF + + + + + White on black + Black on white + Yellow on black + Yellow on blue + Custom + + + + + 0 + 1 + 2 + 3 + -1 + + + + + Dalvik + ART + ART (debug) + + + + + libdvm.so + libart.so + libartd.so + + + + + Use Dalvik + Use ART + Use ART debug build + + Never check @@ -770,8 +982,11 @@ None 720x480 mdpi + 720x480 mdpi (secure) 1280x720 tvdpi + 1280x720 tvdpi (secure) 1920x1080 xhdpi + 1920x1080 xhdpi (secure) 1280x720 tvdpi and 1920x1080 xhdpi @@ -779,8 +994,11 @@ 720x480/160 + 720x480/160,secure 1280x720/213 + 1280x720/213,secure 1920x1080/320 + 1920x1080/320,secure 1280x720/213;1920x1080/320 @@ -830,6 +1048,22 @@ true + + + Off + Show overdraw areas + Show areas for Deuteranomaly + Show overdraw counter + + + + + false + show + show_deuteranomaly + count + + Standard limit @@ -916,4 +1150,17 @@ Always allow + + + + + normal + + moderate + + low + + critical + + diff --git a/res/values/attrs.xml b/res/values/attrs.xml index 684811cf6b7..fd28fa000d0 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -81,4 +81,6 @@ + + diff --git a/res/values/colors.xml b/res/values/colors.xml index bd385f6a75b..40098f5dc75 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -35,7 +35,8 @@ #20ffffff @android:color/holo_blue_light - #333333 + #33ffffff + #33000000 #ffffffff #80000000 diff --git a/res/values/dimens.xml b/res/values/dimens.xml index aa4009668e7..bf697d63452 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -39,13 +39,14 @@ 15% 5% 0dip - 25sp + 25dp 32dip 16dip 3dip 6dip 7dip + 1dip 28dp @@ -69,4 +70,7 @@ 300dip + 200dp + + @*android:dimen/preference_fragment_padding_side diff --git a/res/values/donottranslate.xml b/res/values/donottranslate.xml index ba4ff2ef9d0..e6bd9a6bb7b 100644 --- a/res/values/donottranslate.xml +++ b/res/values/donottranslate.xml @@ -33,5 +33,4 @@ @string/input_method_selector_always_show_value @string/input_method_selector_always_hide_value - diff --git a/res/values/strings.xml b/res/values/strings.xml index 091c6b3f246..e6b88646aff 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -276,6 +276,8 @@ Connected (no phone) Connected (no media) + + Connected (no message access) Connected (no phone or media) @@ -349,14 +351,25 @@ "Do you want to connect to \u0022%1$s\u0022?" - "Phone book request" + "Phone book access request" %1$s wants to access your contacts and call history. Give access to %2$s? + Don\'t ask again + Don\'t ask again + + "Message access request" + + + %1$s wants to access your messages. Give access to %2$s? + + + + Date & time settings @@ -387,7 +400,7 @@ Account: - Proxy settings + Proxy Clear @@ -671,6 +684,10 @@ Show owner info on lock screen Owner info + + Enable widgets + + Disabled by administrator @@ -684,7 +701,7 @@ Profile info - Location access + Location Security @@ -1012,7 +1029,7 @@ - %1$s will be able to + %1$s will be able to read all notifications posted by the system or any installed app, which may include personal information such as contact names and the text of messages sent to you. It will also be able to dismiss these notifications or touch action buttons within them. @@ -1132,6 +1149,8 @@ Internet access Internet connection sharing + + Message Access %1$s will be disconnected from media audio. @@ -1164,6 +1183,8 @@ Connected to phone audio Connected to file transfer server + + Connected to map Not connected to file transfer server @@ -1187,6 +1208,8 @@ for the PAN checkbox preference that describes how checking it will set the PAN profile as preferred. --> Use for Internet access + + Use for map Dock Settings @@ -1221,6 +1244,8 @@ Connected Available + + In use Display settings @@ -1245,6 +1270,25 @@ Disabled + + Certification + + Session info + + Enable listen mode + + Enable autonomous GO + + Pause + + Resume + + WPS configuration + + Listen channel + + Operating channel + NFC @@ -1696,6 +1740,7 @@ + Home Display Sound @@ -2335,8 +2380,14 @@ Mobile networks - - Manage mobile plan + + Mobile plan + + + Default SMS app + Change SMS app? + Use %s instead of %s as your SMS app? + Use %s as your SMS app? Uknown SIM operator @@ -2352,6 +2403,38 @@ My Location + + Mode + + High accuracy + + Battery saving + + Device only + + Location off + + Recent location requests + + No apps have requested location recently + + Location services + + High battery use + + Low battery use + + Location mode + + Use GPS, Wi\u2011Fi and mobile networks to estimate location + + Use Wi\u2011Fi and mobile networks to estimate location + + Use GPS to pinpoint your location + + Retrieving… + Wi\u2011Fi & mobile network location @@ -2463,18 +2546,18 @@ - Draw an unlock pattern: + Draw an unlock pattern Press Menu for help. - Release finger when done. + Release finger when done - Connect at least %d dots. Try again: + Connect at least %d dots. Try again. - Pattern recorded. + Pattern recorded - Draw pattern again to confirm: - Your new unlock pattern: + Draw pattern again to confirm + Your new unlock pattern Confirm @@ -2945,13 +3028,9 @@ Keyboard layouts - - User dictionary - - Personal dictionary - - Personal dictionaries - + + Personal dictionary + "" Add @@ -3077,6 +3156,22 @@ Stay awake Screen will never sleep while charging + + Enable Bluetooth HCI snoop log + + Capture all bluetooth HCI packets in a file + + + Select runtime + + Select runtime + + Reboot to change runtime from %1$s to %2$s? + + + Wireless display certification + + Show options for wireless display certification Allow mock locations @@ -3114,6 +3209,11 @@ When SD card is protected, apps must request permission to read data from external storage.\n\nSome apps may not work until updated by their developers. + + Local terminal + + Enable terminal app that offers local shell access + @@ -3145,6 +3245,15 @@ %1$ds + + %1$dd %2$dh %3$dm + + + %1$dh %2$dm + + + %1$dm + Usage statistics @@ -3166,10 +3275,12 @@ Accessibility Accessibility settings - + Services System + + Captions Magnification gestures @@ -3202,11 +3313,66 @@ Settings - + On - + Off + + Preview + + Standard options + + Language + + Text size + + Caption style + + Custom options + + Background color + + Background opacity + + Text color + + Edge color + + Edge type + + Font family + + Captions will look like this + + Aa + + + Default + + + None + + White + + Gray + + Black + + Red + + Green + + Blue + + Cyan + + Yellow + + Magenta + + #%1$02X%2$02X%3$02X + Use @@ -3245,6 +3411,91 @@ Settings + + + + + Printing + + Print services + + + Use + %1$s? + + Your document may pass through + one or more servers on its way to the printer. + + + No services installed + + + No printers found + + + Settings + + + Add printers + + + On + + Off + + + Add service + + + Add printer + + + Search + + + Searching for printers + + + Service disabled + + + Print jobs + + + Print job + + + Restart + + + Cancel + + + %1$s\n%2$s + + + Printing %1$s + + + Printer error %1$s + + + Printer blocked %1$s + + + Search box shown + + + Search box hidden + + + + %1$s printer found + %1$s printers found + + @@ -3329,10 +3580,14 @@ Tablet Phone - - Data sent - - Data received + + Mobile data sent + + Mobile data received + + Wi\u2011Fi data sent + + Wi\u2011Fi data received Audio @@ -3389,7 +3644,7 @@ Stop or uninstall the app - "Manually control GPS to prevent app from using it" + Select battery-saving mode The app may offer settings to reduce battery use @@ -3410,6 +3665,59 @@ Mediaserver + + + + + Process Stats + + Geeky stats about running processes + + Memory use + + %1$s apps over + %2$s + + Background + + Foreground + + Cached + + Device memory is currently + %1$s + + Average RAM use + + Maximum RAM use + + Run time + + Services + + Duration + + 3 hours + + 6 hours + + 12 hours + + 1 day + + Show system + + Use Uss + + Stats type + + Background + + Foreground + + Cached + Voice input & output @@ -3452,8 +3760,11 @@ Pitch Affects the tone of the spoken text + Language + + Language not selected Sets the language-specific voice for the spoken text @@ -3483,6 +3794,23 @@ This language requires a working network connection for text-to-speech output. + + This is an example of speech synthesis + + Default language status + + %1$s is fully supported + + %1$s requires network connection + + %1$s is not supported + + Checking... Engines @@ -3543,8 +3871,8 @@ Wi\u2011Fi Bluetooth - - GPS + + Location Sync @@ -3899,8 +4227,7 @@ Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync. - 4G settings - Set up & manage 4G network and modem + 4G 4G MAC address Type password to decrypt storage @@ -3989,9 +4316,7 @@ Flash hardware layers green when they update - Show GPU overdraw - - From best to worst: blue, green, light red, red + Debug GPU overdraw Disable HW overlays @@ -4006,6 +4331,11 @@ Show clip bounds, margins, etc. + + Force RTL layout direction + + Force screen layout direction to RTL for all locales + Show CPU usage @@ -4057,11 +4387,6 @@ Show App Not Responding dialog for background apps - - Use Experimental WebView - - Apps will use the newest (beta) WebView - Data usage @@ -4337,6 +4662,22 @@ Permissive Enforcing + + + + Network may be monitored + + Done + + Network monitoring + + This device is managed by:\n%s\n\nYour administrator is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nFor more information, contact your administrator. + + A third party is capable of monitoring your network\nactivity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible. + + Check trusted credentials + @@ -4433,6 +4774,11 @@ Expand settings for application + + Uninstall this application + + Home settings will be hidden until you install another home application. + This setting affects all users on this tablet. @@ -4442,6 +4788,28 @@ Change font size + + Tap & pay + + Pay with just a tap + + Learn more + Find apps + + Set as your preference? + Always use %1$s when you tap & pay? + Always use %1$s instead of %2$s when you tap & pay? + + + + Restrictions + + Remove restrictions + + Change PIN + Show notifications @@ -4478,6 +4846,8 @@ + + Account for content @@ -4486,8 +4856,6 @@ Cell broadcasts - - Select the types of emergency alerts to display. Application and content restrictions @@ -4517,7 +4885,7 @@ Allow data exchange when the phone touches another device - Location access + Location Let apps use your location information diff --git a/res/values/styles.xml b/res/values/styles.xml index ebd87221ed2..eee2cd97ae5 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -82,9 +82,47 @@ - + + + + + + + + + 33554432 + + diff --git a/res/values/themes.xml b/res/values/themes.xml index b5f8f6404a8..a87ad33febf 100644 --- a/res/values/themes.xml +++ b/res/values/themes.xml @@ -15,8 +15,61 @@ --> + + + + + + + + + + + + + diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml index fa447f2900a..7b599b859e2 100644 --- a/res/xml/accessibility_settings.xml +++ b/res/xml/accessibility_settings.xml @@ -28,7 +28,12 @@ android:title="@string/accessibility_system_title"> + + @@ -53,7 +58,7 @@ android:persistent="false"/> diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml new file mode 100644 index 00000000000..97739430798 --- /dev/null +++ b/res/xml/captioning_settings.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 72b73bbb00a..5989c90468c 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -37,6 +37,13 @@ android:title="@string/keep_screen_on" android:summary="@string/keep_screen_on_summary"/> + + + android:key="bt_hci_snoop_log" + android:title="@string/bt_hci_snoop_log" + android:summary="@string/bt_hci_snoop_log_summary"/> + + + @@ -60,6 +73,11 @@ + + + + + - + - - diff --git a/res/xml/file_paths.xml b/res/xml/file_paths.xml new file mode 100644 index 00000000000..294c0cbfc97 --- /dev/null +++ b/res/xml/file_paths.xml @@ -0,0 +1,20 @@ + + + + + + + diff --git a/res/xml/home_selection.xml b/res/xml/home_selection.xml new file mode 100644 index 00000000000..a348f9d3ffe --- /dev/null +++ b/res/xml/home_selection.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml index f0014867cb7..3e7fdb52232 100644 --- a/res/xml/language_settings.xml +++ b/res/xml/language_settings.xml @@ -29,7 +29,8 @@ + android:key="key_user_dictionary_settings" + android:title="@string/user_dict_settings_title" /> diff --git a/res/xml/location_mode.xml b/res/xml/location_mode.xml new file mode 100644 index 00000000000..3627f119b01 --- /dev/null +++ b/res/xml/location_mode.xml @@ -0,0 +1,36 @@ + + + + + + + + + + diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml index ab212d82b8c..83b80b1baee 100644 --- a/res/xml/location_settings.xml +++ b/res/xml/location_settings.xml @@ -16,38 +16,17 @@ - - + + android:key="recent_location_requests" + android:title="@string/location_category_recent_location_requests" /> - - - - - + diff --git a/res/xml/nfc_payment_settings.xml b/res/xml/nfc_payment_settings.xml new file mode 100644 index 00000000000..9b47dda1c08 --- /dev/null +++ b/res/xml/nfc_payment_settings.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/res/xml/print_job_settings.xml b/res/xml/print_job_settings.xml new file mode 100644 index 00000000000..a78cec1c250 --- /dev/null +++ b/res/xml/print_job_settings.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + diff --git a/res/xml/print_settings.xml b/res/xml/print_settings.xml new file mode 100644 index 00000000000..8a295637343 --- /dev/null +++ b/res/xml/print_settings.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + diff --git a/res/xml/process_stats_summary.xml b/res/xml/process_stats_summary.xml new file mode 100644 index 00000000000..fbd87fd13b7 --- /dev/null +++ b/res/xml/process_stats_summary.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/res/xml/security_settings_biometric_weak.xml b/res/xml/security_settings_biometric_weak.xml index c830e6fa870..7236673c178 100644 --- a/res/xml/security_settings_biometric_weak.xml +++ b/res/xml/security_settings_biometric_weak.xml @@ -51,6 +51,10 @@ android:key="power_button_instantly_locks" android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/> + + + + + + + - + + + + + + + +
    +
    + +
    +
    -
    @@ -152,7 +165,7 @@
    + android:icon="@drawable/ic_menu_add_dark">
    @@ -171,10 +184,17 @@
    + +
    +
    + diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml index 2b145d18828..ab132df9e3d 100644 --- a/res/xml/tts_settings.xml +++ b/res/xml/tts_settings.xml @@ -37,4 +37,9 @@ android:persistent="false" android:title="@string/tts_play_example_title" android:summary="@string/tts_play_example_summary" /> + + diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml index cf393b35df6..3a0ab742d27 100644 --- a/res/xml/user_settings.xml +++ b/res/xml/user_settings.xml @@ -26,6 +26,6 @@ + android:icon="@drawable/ic_menu_add_dark" /> diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml index 059b01c74eb..c7b9019afbb 100644 --- a/res/xml/wireless_settings.xml +++ b/res/xml/wireless_settings.xml @@ -23,25 +23,10 @@ android:persistent="false" android:disableDependentsState="true" /> - - - - - - - + + + + + + + + + + android:title="@string/cell_broadcast_settings" > sInstalledServices = new HashSet(); - - private final Map mLongPressTimeoutValuetoTitleMap = - new HashMap(); - - private final Configuration mCurConfig = new Configuration(); - - private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor(); - - private final Handler mHandler = new Handler() { - @Override - public void dispatchMessage(Message msg) { - super.dispatchMessage(msg); - loadInstalledServices(); - updateServicesPreferences(); - } - }; - - private final SettingsContentObserver mSettingsContentObserver = - new SettingsContentObserver(mHandler) { - @Override - public void onChange(boolean selfChange, Uri uri) { - loadInstalledServices(); - updateServicesPreferences(); - } - }; - - private final RotationPolicy.RotationPolicyListener mRotationPolicyListener = - new RotationPolicy.RotationPolicyListener() { - @Override - public void onChange() { - updateLockScreenRotationCheckbox(); - } - }; - - // Preference controls. - private PreferenceCategory mServicesCategory; - private PreferenceCategory mSystemsCategory; - - private CheckBoxPreference mToggleLargeTextPreference; - private CheckBoxPreference mTogglePowerButtonEndsCallPreference; - private CheckBoxPreference mToggleLockScreenRotationPreference; - private CheckBoxPreference mToggleSpeakPasswordPreference; - private ListPreference mSelectLongPressTimeoutPreference; - private Preference mNoServicesMessagePreference; - private PreferenceScreen mDisplayMagnificationPreferenceScreen; - private PreferenceScreen mGlobalGesturePreferenceScreen; - - private int mLongPressTimeoutDefault; - - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - addPreferencesFromResource(R.xml.accessibility_settings); - initializeAllPreferences(); - } - - @Override - public void onResume() { - super.onResume(); - loadInstalledServices(); - updateAllPreferences(); - - offerInstallAccessibilitySerivceOnce(); - - mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); - mSettingsContentObserver.register(getContentResolver()); - RotationPolicy.registerRotationPolicyListener(getActivity(), - mRotationPolicyListener); - } - - @Override - public void onPause() { - mSettingsPackageMonitor.unregister(); - RotationPolicy.unregisterRotationPolicyListener(getActivity(), - mRotationPolicyListener); - mSettingsContentObserver.unregister(getContentResolver()); - super.onPause(); - } - - public boolean onPreferenceChange(Preference preference, Object newValue) { - if (preference == mSelectLongPressTimeoutPreference) { - String stringValue = (String) newValue; - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.LONG_PRESS_TIMEOUT, Integer.parseInt(stringValue)); - mSelectLongPressTimeoutPreference.setSummary( - mLongPressTimeoutValuetoTitleMap.get(stringValue)); - return true; - } - return false; - } - - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - if (mToggleLargeTextPreference == preference) { - handleToggleLargeTextPreferenceClick(); - return true; - } else if (mTogglePowerButtonEndsCallPreference == preference) { - handleTogglePowerButtonEndsCallPreferenceClick(); - return true; - } else if (mToggleLockScreenRotationPreference == preference) { - handleLockScreenRotationPreferenceClick(); - return true; - } else if (mToggleSpeakPasswordPreference == preference) { - handleToggleSpeakPasswordPreferenceClick(); - return true; - } else if (mGlobalGesturePreferenceScreen == preference) { - handleTogglEnableAccessibilityGesturePreferenceClick(); - return true; - } else if (mDisplayMagnificationPreferenceScreen == preference) { - handleDisplayMagnificationPreferenceScreenClick(); - return true; - } - return super.onPreferenceTreeClick(preferenceScreen, preference); - } - - private void handleToggleLargeTextPreferenceClick() { - try { - mCurConfig.fontScale = mToggleLargeTextPreference.isChecked() ? LARGE_FONT_SCALE : 1; - ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig); - } catch (RemoteException re) { - /* ignore */ - } - } - - private void handleTogglePowerButtonEndsCallPreferenceClick() { - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, - (mTogglePowerButtonEndsCallPreference.isChecked() - ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP - : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); - } - - private void handleLockScreenRotationPreferenceClick() { - RotationPolicy.setRotationLockForAccessibility(getActivity(), - !mToggleLockScreenRotationPreference.isChecked()); - } - - private void handleToggleSpeakPasswordPreferenceClick() { - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, - mToggleSpeakPasswordPreference.isChecked() ? 1 : 0); - } - - private void handleTogglEnableAccessibilityGesturePreferenceClick() { - Bundle extras = mGlobalGesturePreferenceScreen.getExtras(); - extras.putString(EXTRA_TITLE, getString( - R.string.accessibility_global_gesture_preference_title)); - extras.putString(EXTRA_SUMMARY, getString( - R.string.accessibility_global_gesture_preference_description)); - extras.putBoolean(EXTRA_CHECKED, Settings.Global.getInt(getContentResolver(), - Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1); - super.onPreferenceTreeClick(mGlobalGesturePreferenceScreen, - mGlobalGesturePreferenceScreen); - } - - private void handleDisplayMagnificationPreferenceScreenClick() { - Bundle extras = mDisplayMagnificationPreferenceScreen.getExtras(); - extras.putString(EXTRA_TITLE, getString( - R.string.accessibility_screen_magnification_title)); - extras.putCharSequence(EXTRA_SUMMARY, getActivity().getResources().getText( - R.string.accessibility_screen_magnification_summary)); - extras.putBoolean(EXTRA_CHECKED, Settings.Secure.getInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1); - super.onPreferenceTreeClick(mDisplayMagnificationPreferenceScreen, - mDisplayMagnificationPreferenceScreen); - } - - private void initializeAllPreferences() { - mServicesCategory = (PreferenceCategory) findPreference(SERVICES_CATEGORY); - mSystemsCategory = (PreferenceCategory) findPreference(SYSTEM_CATEGORY); - - // Large text. - mToggleLargeTextPreference = - (CheckBoxPreference) findPreference(TOGGLE_LARGE_TEXT_PREFERENCE); - - // Power button ends calls. - mTogglePowerButtonEndsCallPreference = - (CheckBoxPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE); - if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) - || !Utils.isVoiceCapable(getActivity())) { - mSystemsCategory.removePreference(mTogglePowerButtonEndsCallPreference); - } - - // Lock screen rotation. - mToggleLockScreenRotationPreference = - (CheckBoxPreference) findPreference(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); - - // Speak passwords. - mToggleSpeakPasswordPreference = - (CheckBoxPreference) findPreference(TOGGLE_SPEAK_PASSWORD_PREFERENCE); - - // Long press timeout. - mSelectLongPressTimeoutPreference = - (ListPreference) findPreference(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE); - mSelectLongPressTimeoutPreference.setOnPreferenceChangeListener(this); - if (mLongPressTimeoutValuetoTitleMap.size() == 0) { - String[] timeoutValues = getResources().getStringArray( - R.array.long_press_timeout_selector_values); - mLongPressTimeoutDefault = Integer.parseInt(timeoutValues[0]); - String[] timeoutTitles = getResources().getStringArray( - R.array.long_press_timeout_selector_titles); - final int timeoutValueCount = timeoutValues.length; - for (int i = 0; i < timeoutValueCount; i++) { - mLongPressTimeoutValuetoTitleMap.put(timeoutValues[i], timeoutTitles[i]); - } - } - - // Display magnification. - mDisplayMagnificationPreferenceScreen = (PreferenceScreen) findPreference( - DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN); - - // Global gesture. - mGlobalGesturePreferenceScreen = - (PreferenceScreen) findPreference(ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN); - } - - private void updateAllPreferences() { - updateServicesPreferences(); - updateSystemPreferences(); - } - - private void updateServicesPreferences() { - // Since services category is auto generated we have to do a pass - // to generate it since services can come and go and then based on - // the global accessibility state to decided whether it is enabled. - - // Generate. - mServicesCategory.removeAll(); - - AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getActivity()); - - List installedServices = - accessibilityManager.getInstalledAccessibilityServiceList(); - Set enabledServices = getEnabledServicesFromSettings(getActivity()); - - final boolean accessibilityEnabled = Settings.Secure.getInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1; - - for (int i = 0, count = installedServices.size(); i < count; ++i) { - AccessibilityServiceInfo info = installedServices.get(i); - - PreferenceScreen preference = getPreferenceManager().createPreferenceScreen( - getActivity()); - String title = info.getResolveInfo().loadLabel(getPackageManager()).toString(); - - ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; - ComponentName componentName = new ComponentName(serviceInfo.packageName, - serviceInfo.name); - - preference.setKey(componentName.flattenToString()); - - preference.setTitle(title); - final boolean serviceEnabled = accessibilityEnabled - && enabledServices.contains(componentName); - if (serviceEnabled) { - preference.setSummary(getString(R.string.accessibility_feature_state_on)); - } else { - preference.setSummary(getString(R.string.accessibility_feature_state_off)); - } - - preference.setOrder(i); - preference.setFragment(ToggleAccessibilityServicePreferenceFragment.class.getName()); - preference.setPersistent(true); - - Bundle extras = preference.getExtras(); - extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey()); - extras.putBoolean(EXTRA_CHECKED, serviceEnabled); - extras.putString(EXTRA_TITLE, title); - - String description = info.loadDescription(getPackageManager()); - if (TextUtils.isEmpty(description)) { - description = getString(R.string.accessibility_service_default_description); - } - extras.putString(EXTRA_SUMMARY, description); - - String settingsClassName = info.getSettingsActivityName(); - if (!TextUtils.isEmpty(settingsClassName)) { - extras.putString(EXTRA_SETTINGS_TITLE, - getString(R.string.accessibility_menu_item_settings)); - extras.putString(EXTRA_SETTINGS_COMPONENT_NAME, - new ComponentName(info.getResolveInfo().serviceInfo.packageName, - settingsClassName).flattenToString()); - } - - extras.putParcelable(EXTRA_COMPONENT_NAME, componentName); - - mServicesCategory.addPreference(preference); - } - - if (mServicesCategory.getPreferenceCount() == 0) { - if (mNoServicesMessagePreference == null) { - mNoServicesMessagePreference = new Preference(getActivity()) { - @Override - protected void onBindView(View view) { - super.onBindView(view); - TextView summaryView = (TextView) view.findViewById(R.id.summary); - String title = getString(R.string.accessibility_no_services_installed); - summaryView.setText(title); - } - }; - mNoServicesMessagePreference.setPersistent(false); - mNoServicesMessagePreference.setLayoutResource( - R.layout.text_description_preference); - mNoServicesMessagePreference.setSelectable(false); - } - mServicesCategory.addPreference(mNoServicesMessagePreference); - } - } - - private void updateSystemPreferences() { - // Large text. - try { - mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration()); - } catch (RemoteException re) { - /* ignore */ - } - mToggleLargeTextPreference.setChecked(mCurConfig.fontScale == LARGE_FONT_SCALE); - - // Power button ends calls. - if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) - && Utils.isVoiceCapable(getActivity())) { - final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(), - Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, - Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); - final boolean powerButtonEndsCall = - (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); - mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall); - } - - // Auto-rotate screen - updateLockScreenRotationCheckbox(); - - // Speak passwords. - final boolean speakPasswordEnabled = Settings.Secure.getInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) != 0; - mToggleSpeakPasswordPreference.setChecked(speakPasswordEnabled); - - // Long press timeout. - final int longPressTimeout = Settings.Secure.getInt(getContentResolver(), - Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault); - String value = String.valueOf(longPressTimeout); - mSelectLongPressTimeoutPreference.setValue(value); - mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValuetoTitleMap.get(value)); - - // Screen magnification. - final boolean magnificationEnabled = Settings.Secure.getInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1; - if (magnificationEnabled) { - mDisplayMagnificationPreferenceScreen.setSummary( - R.string.accessibility_feature_state_on); - } else { - mDisplayMagnificationPreferenceScreen.setSummary( - R.string.accessibility_feature_state_off); - } - - // Global gesture - final boolean globalGestureEnabled = Settings.Global.getInt(getContentResolver(), - Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1; - if (globalGestureEnabled) { - mGlobalGesturePreferenceScreen.setSummary( - R.string.accessibility_global_gesture_preference_summary_on); - } else { - mGlobalGesturePreferenceScreen.setSummary( - R.string.accessibility_global_gesture_preference_summary_off); - } - } - - private void updateLockScreenRotationCheckbox() { - Context context = getActivity(); - if (context != null) { - mToggleLockScreenRotationPreference.setChecked( - !RotationPolicy.isRotationLocked(context)); - } - } - - private void offerInstallAccessibilitySerivceOnce() { - // There is always one preference - if no services it is just a message. - if (mServicesCategory.getPreference(0) != mNoServicesMessagePreference) { - return; - } - SharedPreferences preferences = getActivity().getPreferences(Context.MODE_PRIVATE); - final boolean offerInstallService = !preferences.getBoolean( - KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, false); - if (offerInstallService) { - String screenreaderMarketLink = SystemProperties.get( - SYSTEM_PROPERTY_MARKET_URL, - DEFAULT_SCREENREADER_MARKET_LINK); - Uri marketUri = Uri.parse(screenreaderMarketLink); - Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri); - - if (getPackageManager().resolveActivity(marketIntent, 0) == null) { - // Don't show the dialog if no market app is found/installed. - return; - } - - preferences.edit().putBoolean(KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, - true).commit(); - // Notify user that they do not have any accessibility - // services installed and direct them to Market to get TalkBack. - showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); - } - } - - @Override - public Dialog onCreateDialog(int dialogId) { - switch (dialogId) { - case DIALOG_ID_NO_ACCESSIBILITY_SERVICES: - return new AlertDialog.Builder(getActivity()) - .setTitle(R.string.accessibility_service_no_apps_title) - .setMessage(R.string.accessibility_service_no_apps_message) - .setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - // dismiss the dialog before launching - // the activity otherwise - // the dialog removal occurs after - // onSaveInstanceState which - // triggers an exception - removeDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); - String screenreaderMarketLink = SystemProperties.get( - SYSTEM_PROPERTY_MARKET_URL, - DEFAULT_SCREENREADER_MARKET_LINK); - Uri marketUri = Uri.parse(screenreaderMarketLink); - Intent marketIntent = new Intent(Intent.ACTION_VIEW, - marketUri); - startActivity(marketIntent); - } - }) - .setNegativeButton(android.R.string.cancel, null) - .create(); - default: - return null; - } - } - - private void loadInstalledServices() { - Set installedServices = sInstalledServices; - installedServices.clear(); - - List installedServiceInfos = - AccessibilityManager.getInstance(getActivity()) - .getInstalledAccessibilityServiceList(); - if (installedServiceInfos == null) { - return; - } - - final int installedServiceInfoCount = installedServiceInfos.size(); - for (int i = 0; i < installedServiceInfoCount; i++) { - ResolveInfo resolveInfo = installedServiceInfos.get(i).getResolveInfo(); - ComponentName installedService = new ComponentName( - resolveInfo.serviceInfo.packageName, - resolveInfo.serviceInfo.name); - installedServices.add(installedService); - } - } - - private static Set getEnabledServicesFromSettings(Context context) { - String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); - if (enabledServicesSetting == null) { - enabledServicesSetting = ""; - } - Set enabledServices = new HashSet(); - SimpleStringSplitter colonSplitter = sStringColonSplitter; - colonSplitter.setString(enabledServicesSetting); - while (colonSplitter.hasNext()) { - String componentNameString = colonSplitter.next(); - ComponentName enabledService = ComponentName.unflattenFromString( - componentNameString); - if (enabledService != null) { - enabledServices.add(enabledService); - } - } - return enabledServices; - } - - private class SettingsPackageMonitor extends PackageMonitor { - - @Override - public void onPackageAdded(String packageName, int uid) { - Message message = mHandler.obtainMessage(); - mHandler.sendMessageDelayed(message, DELAY_UPDATE_SERVICES_MILLIS); - } - - @Override - public void onPackageAppeared(String packageName, int reason) { - Message message = mHandler.obtainMessage(); - mHandler.sendMessageDelayed(message, DELAY_UPDATE_SERVICES_MILLIS); - } - - @Override - public void onPackageDisappeared(String packageName, int reason) { - Message message = mHandler.obtainMessage(); - mHandler.sendMessageDelayed(message, DELAY_UPDATE_SERVICES_MILLIS); - } - - @Override - public void onPackageRemoved(String packageName, int uid) { - Message message = mHandler.obtainMessage(); - mHandler.sendMessageDelayed(message, DELAY_UPDATE_SERVICES_MILLIS); - } - } - - public static class ToggleSwitch extends Switch { - - private OnBeforeCheckedChangeListener mOnBeforeListener; - - public static interface OnBeforeCheckedChangeListener { - public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked); - } - - public ToggleSwitch(Context context) { - super(context); - } - - public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) { - mOnBeforeListener = listener; - } - - @Override - public void setChecked(boolean checked) { - if (mOnBeforeListener != null - && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) { - return; - } - super.setChecked(checked); - } - - public void setCheckedInternal(boolean checked) { - super.setChecked(checked); - } - } - - public static class ToggleAccessibilityServicePreferenceFragment - extends ToggleFeaturePreferenceFragment implements DialogInterface.OnClickListener { - - private static final int DIALOG_ID_ENABLE_WARNING = 1; - private static final int DIALOG_ID_DISABLE_WARNING = 2; - - private final SettingsContentObserver mSettingsContentObserver = - new SettingsContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange, Uri uri) { - String settingValue = Settings.Secure.getString(getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); - final boolean enabled = settingValue.contains(mComponentName.flattenToString()); - mToggleSwitch.setCheckedInternal(enabled); - } - }; - - private ComponentName mComponentName; - - private int mShownDialogId; - - @Override - public void onResume() { - mSettingsContentObserver.register(getContentResolver()); - super.onResume(); - } - - @Override - public void onPause() { - mSettingsContentObserver.unregister(getContentResolver()); - super.onPause(); - } - - @Override - public void onPreferenceToggled(String preferenceKey, boolean enabled) { - // Parse the enabled services. - Set enabledServices = getEnabledServicesFromSettings(getActivity()); - - // Determine enabled services and accessibility state. - ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey); - boolean accessibilityEnabled = false; - if (enabled) { - enabledServices.add(toggledService); - // Enabling at least one service enables accessibility. - accessibilityEnabled = true; - } else { - enabledServices.remove(toggledService); - // Check how many enabled and installed services are present. - Set installedServices = sInstalledServices; - for (ComponentName enabledService : enabledServices) { - if (installedServices.contains(enabledService)) { - // Disabling the last service disables accessibility. - accessibilityEnabled = true; - break; - } - } - } - - // Update the enabled services setting. - StringBuilder enabledServicesBuilder = new StringBuilder(); - // Keep the enabled services even if they are not installed since we - // have no way to know whether the application restore process has - // completed. In general the system should be responsible for the - // clean up not settings. - for (ComponentName enabledService : enabledServices) { - enabledServicesBuilder.append(enabledService.flattenToString()); - enabledServicesBuilder.append(ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR); - } - final int enabledServicesBuilderLength = enabledServicesBuilder.length(); - if (enabledServicesBuilderLength > 0) { - enabledServicesBuilder.deleteCharAt(enabledServicesBuilderLength - 1); - } - Settings.Secure.putString(getContentResolver(), - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, - enabledServicesBuilder.toString()); - - // Update accessibility enabled. - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_ENABLED, accessibilityEnabled ? 1 : 0); - } - - // IMPORTANT: Refresh the info since there are dynamically changing capabilities. For - // example, before JellyBean MR2 the user was granting the explore by touch one. - private AccessibilityServiceInfo getAccessibilityServiceInfo() { - List serviceInfos = AccessibilityManager.getInstance( - getActivity()).getInstalledAccessibilityServiceList(); - final int serviceInfoCount = serviceInfos.size(); - for (int i = 0; i < serviceInfoCount; i++) { - AccessibilityServiceInfo serviceInfo = serviceInfos.get(i); - ResolveInfo resolveInfo = serviceInfo.getResolveInfo(); - if (mComponentName.getPackageName().equals(resolveInfo.serviceInfo.packageName) - && mComponentName.getClassName().equals(resolveInfo.serviceInfo.name)) { - return serviceInfo; - } - } - return null; - } - - @Override - public Dialog onCreateDialog(int dialogId) { - switch (dialogId) { - case DIALOG_ID_ENABLE_WARNING: { - mShownDialogId = DIALOG_ID_ENABLE_WARNING; - AccessibilityServiceInfo info = getAccessibilityServiceInfo(); - if (info == null) { - return null; - } - return new AlertDialog.Builder(getActivity()) - .setTitle(getString(R.string.enable_service_title, - info.getResolveInfo().loadLabel(getPackageManager()))) - .setIconAttribute(android.R.attr.alertDialogIcon) - .setView(createEnableDialogContentView(info)) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, this) - .setNegativeButton(android.R.string.cancel, this) - .create(); - } - case DIALOG_ID_DISABLE_WARNING: { - mShownDialogId = DIALOG_ID_DISABLE_WARNING; - AccessibilityServiceInfo info = getAccessibilityServiceInfo(); - if (info == null) { - return null; - } - return new AlertDialog.Builder(getActivity()) - .setTitle(getString(R.string.disable_service_title, - info.getResolveInfo().loadLabel(getPackageManager()))) - .setIconAttribute(android.R.attr.alertDialogIcon) - .setMessage(getString(R.string.disable_service_message, - info.getResolveInfo().loadLabel(getPackageManager()))) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, this) - .setNegativeButton(android.R.string.cancel, this) - .create(); - } - default: { - throw new IllegalArgumentException(); - } - } - } - - private View createEnableDialogContentView(AccessibilityServiceInfo info) { - LayoutInflater inflater = (LayoutInflater) getSystemService( - Context.LAYOUT_INFLATER_SERVICE); - - View content = inflater.inflate(R.layout.enable_accessibility_service_dialog_content, - null); - - TextView capabilitiesHeaderView = (TextView) content.findViewById( - R.id.capabilities_header); - capabilitiesHeaderView.setText(getString(R.string.capabilities_list_title, - info.getResolveInfo().loadLabel(getPackageManager()))); - - LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities); - - // This capability is implicit for all services. - View capabilityView = inflater.inflate( - com.android.internal.R.layout.app_permission_item_old, null); - - ImageView imageView = (ImageView) capabilityView.findViewById( - com.android.internal.R.id.perm_icon); - imageView.setImageDrawable(getResources().getDrawable( - com.android.internal.R.drawable.ic_text_dot)); - - TextView labelView = (TextView) capabilityView.findViewById( - com.android.internal.R.id.permission_group); - labelView.setText(getString(R.string.capability_title_receiveAccessibilityEvents)); - - TextView descriptionView = (TextView) capabilityView.findViewById( - com.android.internal.R.id.permission_list); - descriptionView.setText(getString(R.string.capability_desc_receiveAccessibilityEvents)); - - List capabilities = - info.getCapabilityInfos(); - - capabilitiesView.addView(capabilityView); - - // Service specific capabilities. - final int capabilityCount = capabilities.size(); - for (int i = 0; i < capabilityCount; i++) { - AccessibilityServiceInfo.CapabilityInfo capability = capabilities.get(i); - - capabilityView = inflater.inflate( - com.android.internal.R.layout.app_permission_item_old, null); - - imageView = (ImageView) capabilityView.findViewById( - com.android.internal.R.id.perm_icon); - imageView.setImageDrawable(getResources().getDrawable( - com.android.internal.R.drawable.ic_text_dot)); - - labelView = (TextView) capabilityView.findViewById( - com.android.internal.R.id.permission_group); - labelView.setText(getString(capability.titleResId)); - - descriptionView = (TextView) capabilityView.findViewById( - com.android.internal.R.id.permission_list); - descriptionView.setText(getString(capability.descResId)); - - capabilitiesView.addView(capabilityView); - } - - return content; - } - - @Override - public void onClick(DialogInterface dialog, int which) { - final boolean checked; - switch (which) { - case DialogInterface.BUTTON_POSITIVE: - checked = (mShownDialogId == DIALOG_ID_ENABLE_WARNING); - mToggleSwitch.setCheckedInternal(checked); - getArguments().putBoolean(EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); - break; - case DialogInterface.BUTTON_NEGATIVE: - checked = (mShownDialogId == DIALOG_ID_DISABLE_WARNING); - mToggleSwitch.setCheckedInternal(checked); - getArguments().putBoolean(EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); - break; - default: - throw new IllegalArgumentException(); - } - } - - @Override - protected void onInstallActionBarToggleSwitch() { - super.onInstallActionBarToggleSwitch(); - mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { - @Override - public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { - if (checked) { - toggleSwitch.setCheckedInternal(false); - getArguments().putBoolean(EXTRA_CHECKED, false); - showDialog(DIALOG_ID_ENABLE_WARNING); - } else { - toggleSwitch.setCheckedInternal(true); - getArguments().putBoolean(EXTRA_CHECKED, true); - showDialog(DIALOG_ID_DISABLE_WARNING); - } - return true; - } - }); - } - - @Override - protected void onProcessArguments(Bundle arguments) { - super.onProcessArguments(arguments); - // Settings title and intent. - String settingsTitle = arguments.getString(EXTRA_SETTINGS_TITLE); - String settingsComponentName = arguments.getString(EXTRA_SETTINGS_COMPONENT_NAME); - if (!TextUtils.isEmpty(settingsTitle) && !TextUtils.isEmpty(settingsComponentName)) { - Intent settingsIntent = new Intent(Intent.ACTION_MAIN).setComponent( - ComponentName.unflattenFromString(settingsComponentName.toString())); - if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) { - mSettingsTitle = settingsTitle; - mSettingsIntent = settingsIntent; - setHasOptionsMenu(true); - } - } - - mComponentName = arguments.getParcelable(EXTRA_COMPONENT_NAME); - } - } - - public static class ToggleScreenMagnificationPreferenceFragment - extends ToggleFeaturePreferenceFragment { - @Override - protected void onPreferenceToggled(String preferenceKey, boolean enabled) { - Settings.Secure.putInt(getContentResolver(), - Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled? 1 : 0); - } - - @Override - protected void onInstallActionBarToggleSwitch() { - super.onInstallActionBarToggleSwitch(); - mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { - @Override - public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { - toggleSwitch.setCheckedInternal(checked); - getArguments().putBoolean(EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); - return false; - } - }); - } - } - - public static class ToggleGlobalGesturePreferenceFragment - extends ToggleFeaturePreferenceFragment { - @Override - protected void onPreferenceToggled(String preferenceKey, boolean enabled) { - Settings.Global.putInt(getContentResolver(), - Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, enabled ? 1 : 0); - } - - @Override - protected void onInstallActionBarToggleSwitch() { - super.onInstallActionBarToggleSwitch(); - mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { - @Override - public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { - toggleSwitch.setCheckedInternal(checked); - getArguments().putBoolean(EXTRA_CHECKED, checked); - onPreferenceToggled(mPreferenceKey, checked); - return false; - } - }); - } - } - - public static abstract class ToggleFeaturePreferenceFragment - extends SettingsPreferenceFragment { - - protected ToggleSwitch mToggleSwitch; - - protected String mPreferenceKey; - protected Preference mSummaryPreference; - - protected CharSequence mSettingsTitle; - protected Intent mSettingsIntent; - - // TODO: Showing sub-sub fragment does not handle the activity title - // so we do it but this is wrong. Do a real fix when there is time. - private CharSequence mOldActivityTitle; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen( - getActivity()); - setPreferenceScreen(preferenceScreen); - mSummaryPreference = new Preference(getActivity()) { - @Override - protected void onBindView(View view) { - super.onBindView(view); - TextView summaryView = (TextView) view.findViewById(R.id.summary); - summaryView.setText(getSummary()); - sendAccessibilityEvent(summaryView); - } - - private void sendAccessibilityEvent(View view) { - // Since the view is still not attached we create, populate, - // and send the event directly since we do not know when it - // will be attached and posting commands is not as clean. - AccessibilityManager accessibilityManager = - AccessibilityManager.getInstance(getActivity()); - if (accessibilityManager.isEnabled()) { - AccessibilityEvent event = AccessibilityEvent.obtain(); - event.setEventType(AccessibilityEvent.TYPE_VIEW_FOCUSED); - view.onInitializeAccessibilityEvent(event); - view.dispatchPopulateAccessibilityEvent(event); - accessibilityManager.sendAccessibilityEvent(event); - } - } - }; - mSummaryPreference.setPersistent(false); - mSummaryPreference.setLayoutResource(R.layout.text_description_preference); - preferenceScreen.addPreference(mSummaryPreference); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - onInstallActionBarToggleSwitch(); - onProcessArguments(getArguments()); - // Set a transparent drawable to prevent use of the default one. - getListView().setSelector(new ColorDrawable(Color.TRANSPARENT)); - getListView().setDivider(null); - } - - @Override - public void onDestroyView() { - getActivity().getActionBar().setCustomView(null); - if (mOldActivityTitle != null) { - getActivity().getActionBar().setTitle(mOldActivityTitle); - } - mToggleSwitch.setOnBeforeCheckedChangeListener(null); - super.onDestroyView(); - } - - protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled); - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - MenuItem menuItem = menu.add(mSettingsTitle); - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - menuItem.setIntent(mSettingsIntent); - } - - protected void onInstallActionBarToggleSwitch() { - mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity()); - } - - private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { - ToggleSwitch toggleSwitch = new ToggleSwitch(activity); - final int padding = activity.getResources().getDimensionPixelSize( - R.dimen.action_bar_switch_padding); - toggleSwitch.setPaddingRelative(0, 0, padding, 0); - activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, - ActionBar.DISPLAY_SHOW_CUSTOM); - activity.getActionBar().setCustomView(toggleSwitch, - new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, - ActionBar.LayoutParams.WRAP_CONTENT, - Gravity.CENTER_VERTICAL | Gravity.END)); - return toggleSwitch; - } - - protected void onProcessArguments(Bundle arguments) { - // Key. - mPreferenceKey = arguments.getString(EXTRA_PREFERENCE_KEY); - // Enabled. - final boolean enabled = arguments.getBoolean(EXTRA_CHECKED); - mToggleSwitch.setCheckedInternal(enabled); - // Title. - PreferenceActivity activity = (PreferenceActivity) getActivity(); - if (!activity.onIsMultiPane() || activity.onIsHidingHeaders()) { - mOldActivityTitle = getActivity().getTitle(); - String title = arguments.getString(EXTRA_TITLE); - getActivity().getActionBar().setTitle(title); - } - // Summary. - CharSequence summary = arguments.getCharSequence(EXTRA_SUMMARY); - mSummaryPreference.setSummary(summary); - } - } - - private static abstract class SettingsContentObserver extends ContentObserver { - - public SettingsContentObserver(Handler handler) { - super(handler); - } - - public void register(ContentResolver contentResolver) { - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ACCESSIBILITY_ENABLED), false, this); - contentResolver.registerContentObserver(Settings.Secure.getUriFor( - Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); - } - - public void unregister(ContentResolver contentResolver) { - contentResolver.unregisterContentObserver(this); - } - - @Override - public abstract void onChange(boolean selfChange, Uri uri); - } -} diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/ApnPreference.java index 710eda23c4d..addb695cafc 100644 --- a/src/com/android/settings/ApnPreference.java +++ b/src/com/android/settings/ApnPreference.java @@ -35,31 +35,16 @@ public class ApnPreference extends Preference implements CompoundButton.OnCheckedChangeListener, OnClickListener { final static String TAG = "ApnPreference"; - /** - * @param context - * @param attrs - * @param defStyle - */ public ApnPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - init(); } - /** - * @param context - * @param attrs - */ public ApnPreference(Context context, AttributeSet attrs) { - super(context, attrs); - init(); + this(context, attrs, R.attr.apnPreferenceStyle); } - /** - * @param context - */ public ApnPreference(Context context) { - super(context); - init(); + this(context, null); } private static String mSelectedKey = null; @@ -99,10 +84,6 @@ public class ApnPreference extends Preference implements return view; } - private void init() { - setLayoutResource(R.layout.apn_preference_layout); - } - public boolean isChecked() { return getKey().equals(mSelectedKey); } diff --git a/src/com/android/settings/BatteryInfo.java b/src/com/android/settings/BatteryInfo.java index 3f8827755ad..d35771fac7b 100644 --- a/src/com/android/settings/BatteryInfo.java +++ b/src/com/android/settings/BatteryInfo.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManager; +import android.os.BatteryStats; import android.os.Bundle; import android.os.Handler; import android.os.IPowerManager; @@ -163,7 +164,8 @@ public class BatteryInfo extends Activity { mUptime = (TextView) findViewById(R.id.uptime); // Get awake time plugged in and on battery - mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo")); + mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService( + BatteryStats.SERVICE_NAME)); mScreenStats = IPowerManager.Stub.asInterface(ServiceManager.getService(POWER_SERVICE)); mHandler.sendEmptyMessageDelayed(EVENT_TICK, 1000); diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index 14671d1c760..49de3668685 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -17,23 +17,28 @@ package com.android.settings; import android.app.Activity; +import android.app.Fragment; import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.Intent; import android.content.pm.UserInfo; import android.os.Bundle; +import android.os.Process; +import android.os.UserHandle; import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.security.KeyStore; +import android.util.EventLog; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import com.android.internal.widget.LockPatternUtils; +import com.android.settings.ConfirmLockPattern.ConfirmLockPatternFragment; import java.util.List; @@ -49,6 +54,15 @@ public class ChooseLockGeneric extends PreferenceActivity { return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (ChooseLockGenericFragment.class.getName().equals(fragmentName)) return true; + return false; + } + + public static class InternalActivity extends ChooseLockGeneric { + } + public static class ChooseLockGenericFragment extends SettingsPreferenceFragment { private static final int MIN_PASSWORD_LENGTH = 4; private static final String KEY_UNLOCK_BACKUP_INFO = "unlock_backup_info"; @@ -86,7 +100,9 @@ public class ChooseLockGeneric extends PreferenceActivity { // Defaults to needing to confirm credentials final boolean confirmCredentials = getActivity().getIntent() .getBooleanExtra(CONFIRM_CREDENTIALS, true); - mPasswordConfirmed = !confirmCredentials; + if (getActivity() instanceof ChooseLockGeneric.InternalActivity) { + mPasswordConfirmed = !confirmCredentials; + } if (savedInstanceState != null) { mPasswordConfirmed = savedInstanceState.getBoolean(PASSWORD_CONFIRMED); @@ -122,6 +138,9 @@ public class ChooseLockGeneric extends PreferenceActivity { Preference preference) { final String key = preference.getKey(); boolean handled = true; + + EventLog.writeEvent(EventLogTags.LOCK_SCREEN_TYPE, key); + if (KEY_UNLOCK_SET_OFF.equals(key)) { updateUnlockMethodAndFinish( DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, true); @@ -243,6 +262,8 @@ public class ChooseLockGeneric extends PreferenceActivity { * appropriately.) */ private int upgradeQualityForEncryption(int quality) { + // Don't upgrade quality for secondary users. Encryption requirements don't apply. + if (!Process.myUserHandle().equals(UserHandle.OWNER)) return quality; int encryptionStatus = mDPM.getStorageEncryptionStatus(); boolean encrypted = (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE) || (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING); @@ -325,7 +346,8 @@ public class ChooseLockGeneric extends PreferenceActivity { } private Intent getBiometricSensorIntent() { - Intent fallBackIntent = new Intent().setClass(getActivity(), ChooseLockGeneric.class); + Intent fallBackIntent = new Intent().setClass(getActivity(), + ChooseLockGeneric.InternalActivity.class); fallBackIntent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_WEAK_FALLBACK, true); fallBackIntent.putExtra(CONFIRM_CREDENTIALS, false); fallBackIntent.putExtra(EXTRA_SHOW_FRAGMENT_TITLE, diff --git a/src/com/android/settings/ChooseLockPassword.java b/src/com/android/settings/ChooseLockPassword.java index b16f3f6787b..f43738f0414 100644 --- a/src/com/android/settings/ChooseLockPassword.java +++ b/src/com/android/settings/ChooseLockPassword.java @@ -19,6 +19,7 @@ package com.android.settings; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.PasswordEntryKeyboardHelper; import com.android.internal.widget.PasswordEntryKeyboardView; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; import android.app.Activity; import android.app.Fragment; @@ -64,6 +65,12 @@ public class ChooseLockPassword extends PreferenceActivity { return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (ChooseLockPasswordFragment.class.getName().equals(fragmentName)) return true; + return false; + } + @Override public void onCreate(Bundle savedInstanceState) { // TODO: Fix on phones @@ -154,6 +161,9 @@ public class ChooseLockPassword extends PreferenceActivity { super.onCreate(savedInstanceState); mLockPatternUtils = new LockPatternUtils(getActivity()); Intent intent = getActivity().getIntent(); + if (!(getActivity() instanceof ChooseLockPassword)) { + throw new SecurityException("Fragment contained in wrong activity"); + } mRequestedQuality = Math.max(intent.getIntExtra(LockPatternUtils.PASSWORD_TYPE_KEY, mRequestedQuality), mLockPatternUtils.getRequestedPasswordQuality()); mPasswordMinLength = Math.max( diff --git a/src/com/android/settings/ChooseLockPattern.java b/src/com/android/settings/ChooseLockPattern.java index f9c01b6fc96..328312c2f73 100644 --- a/src/com/android/settings/ChooseLockPattern.java +++ b/src/com/android/settings/ChooseLockPattern.java @@ -22,6 +22,7 @@ import com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternView; import com.android.internal.widget.LockPatternView.Cell; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; import static com.android.internal.widget.LockPatternView.DisplayMode; @@ -68,6 +69,12 @@ public class ChooseLockPattern extends PreferenceActivity { return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (ChooseLockPatternFragment.class.getName().equals(fragmentName)) return true; + return false; + } + @Override public void onCreate(Bundle savedInstanceState) { // requestWindowFeature(Window.FEATURE_NO_TITLE); @@ -301,6 +308,9 @@ public class ChooseLockPattern extends PreferenceActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mChooseLockSettingsHelper = new ChooseLockSettingsHelper(getActivity()); + if (!(getActivity() instanceof ChooseLockPattern)) { + throw new SecurityException("Fragment contained in wrong activity"); + } } @Override @@ -331,7 +341,7 @@ public class ChooseLockPattern extends PreferenceActivity { topLayout.setDefaultTouchRecepient(mLockPatternView); final boolean confirmCredentials = getActivity().getIntent() - .getBooleanExtra("confirm_credentials", false); + .getBooleanExtra("confirm_credentials", true); if (savedInstanceState == null) { if (confirmCredentials) { diff --git a/src/com/android/settings/ConfirmLockPassword.java b/src/com/android/settings/ConfirmLockPassword.java index 96839bab7bb..d7402daff89 100644 --- a/src/com/android/settings/ConfirmLockPassword.java +++ b/src/com/android/settings/ConfirmLockPassword.java @@ -19,6 +19,7 @@ package com.android.settings; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.PasswordEntryKeyboardHelper; import com.android.internal.widget.PasswordEntryKeyboardView; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; import android.app.Activity; import android.app.Fragment; @@ -51,6 +52,12 @@ public class ConfirmLockPassword extends PreferenceActivity { return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (ConfirmLockPasswordFragment.class.getName().equals(fragmentName)) return true; + return false; + } + @Override public void onCreate(Bundle savedInstanceState) { // Disable IME on our window since we provide our own keyboard diff --git a/src/com/android/settings/ConfirmLockPattern.java b/src/com/android/settings/ConfirmLockPattern.java index dd375cc3c4f..3a1f06c339f 100644 --- a/src/com/android/settings/ConfirmLockPattern.java +++ b/src/com/android/settings/ConfirmLockPattern.java @@ -76,6 +76,12 @@ public class ConfirmLockPattern extends PreferenceActivity { return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (ConfirmLockPatternFragment.class.getName().equals(fragmentName)) return true; + return false; + } + public static class ConfirmLockPatternFragment extends Fragment { // how long we wait to clear a wrong pattern diff --git a/src/com/android/settings/CreateShortcut.java b/src/com/android/settings/CreateShortcut.java index 0312a4bccd2..f71df1d6f16 100644 --- a/src/com/android/settings/CreateShortcut.java +++ b/src/com/android/settings/CreateShortcut.java @@ -18,10 +18,15 @@ package com.android.settings; import android.app.LauncherActivity; import android.content.Intent; +import android.content.pm.ResolveInfo; import android.os.Bundle; import android.view.View; import android.widget.ListView; +import com.android.settings.Settings.TetherSettingsActivity; + +import java.util.List; + public class CreateShortcut extends LauncherActivity { @Override @@ -49,4 +54,22 @@ public class CreateShortcut extends LauncherActivity { protected boolean onEvaluateShowIcons() { return false; } + + /** + * Perform query on package manager for list items. The default + * implementation queries for activities. + */ + protected List onQueryPackageManager(Intent queryIntent) { + List activities = super.onQueryPackageManager(queryIntent); + if (activities == null) return null; + for (int i = activities.size() - 1; i >= 0; i--) { + ResolveInfo info = activities.get(i); + if (info.activityInfo.name.endsWith(TetherSettingsActivity.class.getSimpleName())) { + if (!TetherSettings.showInShortcuts(this)) { + activities.remove(i); + } + } + } + return activities; + } } diff --git a/src/com/android/settings/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java index 9173e39cb5e..fcf208a9c00 100644 --- a/src/com/android/settings/CredentialStorage.java +++ b/src/com/android/settings/CredentialStorage.java @@ -25,6 +25,7 @@ import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; +import android.os.Process; import android.security.Credentials; import android.security.KeyChain.KeyChainConnection; import android.security.KeyChain; @@ -39,6 +40,14 @@ import android.widget.TextView; import android.widget.Toast; import com.android.internal.widget.LockPatternUtils; +import com.android.org.bouncycastle.asn1.ASN1InputStream; +import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo; + +import org.apache.harmony.security.utils.AlgNameMapper; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + /** * CredentialStorage handles KeyStore reset, unlock, and install. * @@ -182,6 +191,20 @@ public final class CredentialStorage extends Activity { return (quality >= MIN_PASSWORD_QUALITY); } + private boolean isHardwareBackedKey(byte[] keyData) { + try { + ASN1InputStream bIn = new ASN1InputStream(new ByteArrayInputStream(keyData)); + PrivateKeyInfo pki = PrivateKeyInfo.getInstance(bIn.readObject()); + String algId = pki.getAlgorithmId().getAlgorithm().getId(); + String algName = AlgNameMapper.map2AlgName(algId); + + return KeyChain.isBoundKeyAlgorithm(algName); + } catch (IOException e) { + Log.e(TAG, "Failed to parse key data"); + return false; + } + } + /** * Install credentials if available, otherwise do nothing. */ @@ -196,17 +219,27 @@ public final class CredentialStorage extends Activity { String key = bundle.getString(Credentials.EXTRA_USER_PRIVATE_KEY_NAME); byte[] value = bundle.getByteArray(Credentials.EXTRA_USER_PRIVATE_KEY_DATA); - if (!mKeyStore.importKey(key, value, uid, KeyStore.FLAG_ENCRYPTED)) { + int flags = KeyStore.FLAG_ENCRYPTED; + if (uid == Process.WIFI_UID && isHardwareBackedKey(value)) { + // Hardware backed keystore is secure enough to allow for WIFI stack + // to enable access to secure networks without user intervention + Log.d(TAG, "Saving private key with FLAG_NONE for WIFI_UID"); + flags = KeyStore.FLAG_NONE; + } + + if (!mKeyStore.importKey(key, value, uid, flags)) { Log.e(TAG, "Failed to install " + key + " as user " + uid); return; } } + int flags = (uid == Process.WIFI_UID) ? KeyStore.FLAG_NONE : KeyStore.FLAG_ENCRYPTED; + if (bundle.containsKey(Credentials.EXTRA_USER_CERTIFICATE_NAME)) { String certName = bundle.getString(Credentials.EXTRA_USER_CERTIFICATE_NAME); byte[] certData = bundle.getByteArray(Credentials.EXTRA_USER_CERTIFICATE_DATA); - if (!mKeyStore.put(certName, certData, uid, KeyStore.FLAG_ENCRYPTED)) { + if (!mKeyStore.put(certName, certData, uid, flags)) { Log.e(TAG, "Failed to install " + certName + " as user " + uid); return; } @@ -216,7 +249,7 @@ public final class CredentialStorage extends Activity { String caListName = bundle.getString(Credentials.EXTRA_CA_CERTIFICATES_NAME); byte[] caListData = bundle.getByteArray(Credentials.EXTRA_CA_CERTIFICATES_DATA); - if (!mKeyStore.put(caListName, caListData, uid, KeyStore.FLAG_ENCRYPTED)) { + if (!mKeyStore.put(caListName, caListData, uid, flags)) { Log.e(TAG, "Failed to install " + caListName + " as user " + uid); return; } diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index 94c793ddc12..7057f1a497c 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -239,6 +239,7 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList | StatusBarManager.DISABLE_NOTIFICATION_ALERTS | StatusBarManager.DISABLE_SYSTEM_INFO | StatusBarManager.DISABLE_HOME + | StatusBarManager.DISABLE_SEARCH | StatusBarManager.DISABLE_RECENT; /** @return whether or not this Activity was started for debugging the UI only. */ diff --git a/src/com/android/settings/CryptKeeperConfirm.java b/src/com/android/settings/CryptKeeperConfirm.java index 9a7c21b3780..4822a836c28 100644 --- a/src/com/android/settings/CryptKeeperConfirm.java +++ b/src/com/android/settings/CryptKeeperConfirm.java @@ -53,6 +53,7 @@ public class CryptKeeperConfirm extends Fragment { | StatusBarManager.DISABLE_NOTIFICATION_ALERTS | StatusBarManager.DISABLE_SYSTEM_INFO | StatusBarManager.DISABLE_HOME + | StatusBarManager.DISABLE_SEARCH | StatusBarManager.DISABLE_RECENT | StatusBarManager.DISABLE_BACK); diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java index 8523b76d2a2..db1ae29dbd8 100644 --- a/src/com/android/settings/DataUsageSummary.java +++ b/src/com/android/settings/DataUsageSummary.java @@ -141,13 +141,13 @@ import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener; import com.android.settings.widget.PieChartView; import com.google.android.collect.Lists; +import libcore.util.Objects; + import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; -import libcore.util.Objects; - /** * Panel showing data usage history across various networks, including options * to inspect based on usage cycle and control through {@link NetworkPolicy}. @@ -276,6 +276,16 @@ public class DataUsageSummary extends Fragment { mPolicyEditor = new NetworkPolicyEditor(mPolicyManager); mPolicyEditor.read(); + try { + if (!mNetworkService.isBandwidthControlEnabled()) { + Log.w(TAG, "No bandwidth control; leaving"); + getActivity().finish(); + } + } catch (RemoteException e) { + Log.w(TAG, "No bandwidth control; leaving"); + getActivity().finish(); + } + try { mStatsSession = mStatsService.openSession(); } catch (RemoteException e) { @@ -312,15 +322,10 @@ public class DataUsageSummary extends Fragment { // on parent container for inset. final boolean shouldInset = mListView.getScrollBarStyle() == View.SCROLLBARS_OUTSIDE_OVERLAY; - if (shouldInset) { - mInsetSide = view.getResources().getDimensionPixelOffset( - com.android.internal.R.dimen.preference_fragment_padding_side); - } else { - mInsetSide = 0; - } + mInsetSide = 0; // adjust padding around tabwidget as needed - prepareCustomPreferencesList(container, view, mListView, true); + prepareCustomPreferencesList(container, view, mListView, false); mTabHost.setup(); mTabHost.setOnTabChangedListener(mTabListener); diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 4597bf0d348..f3a22ca409e 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -16,17 +16,14 @@ package com.android.settings; -import static android.Manifest.permission.READ_EXTERNAL_STORAGE; - import android.app.ActionBar; import android.app.Activity; import android.app.ActivityManagerNative; -import android.app.ActivityThread; import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.app.admin.DevicePolicyManager; import android.app.backup.IBackupManager; +import android.bluetooth.BluetoothAdapter; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; @@ -34,6 +31,7 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.hardware.usb.IUsbManager; import android.os.AsyncTask; @@ -42,23 +40,21 @@ import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.Parcel; +import android.os.PowerManager; import android.os.RemoteException; import android.os.ServiceManager; import android.os.StrictMode; import android.os.SystemProperties; import android.os.UserHandle; -import android.os.UserManager; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; -import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; -import android.webkit.WebViewFactory; import android.view.Gravity; import android.view.HardwareRenderer; import android.view.IWindowManager; @@ -67,6 +63,9 @@ import android.widget.CompoundButton; import android.widget.Switch; import android.widget.TextView; +import dalvik.system.VMRuntime; + +import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -74,7 +73,7 @@ import java.util.List; /* * Displays preferences for application developers. */ -public class DevelopmentSettings extends PreferenceFragment +public class DevelopmentSettings extends RestrictedSettingsFragment implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener, OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener { private static final String TAG = "DevelopmentSettings"; @@ -91,11 +90,14 @@ public class DevelopmentSettings extends PreferenceFragment private static final String ENABLE_ADB = "enable_adb"; private static final String CLEAR_ADB_KEYS = "clear_adb_keys"; + private static final String ENABLE_TERMINAL = "enable_terminal"; private static final String KEEP_SCREEN_ON = "keep_screen_on"; + private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log"; + private static final String SELECT_RUNTIME_KEY = "select_runtime"; + private static final String SELECT_RUNTIME_PROPERTY = "persist.sys.dalvik.vm.lib"; private static final String ALLOW_MOCK_LOCATION = "allow_mock_location"; private static final String HDCP_CHECKING_KEY = "hdcp_checking"; private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking"; - private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external"; private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password"; private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw"; private static final String MSAA_PROPERTY = "debug.egl.force_msaa"; @@ -118,14 +120,16 @@ public class DevelopmentSettings extends PreferenceFragment private static final String SHOW_NON_RECTANGULAR_CLIP_KEY = "show_non_rect_clip"; private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_udpates"; private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_udpates"; - private static final String SHOW_HW_OVERDRAW_KEY = "show_hw_overdraw"; + private static final String DEBUG_HW_OVERDRAW_KEY = "debug_hw_overdraw"; private static final String DEBUG_LAYOUT_KEY = "debug_layout"; + private static final String FORCE_RTL_LAYOUT_KEY = "force_rtl_layout_all_locales"; private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale"; private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale"; private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale"; private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices"; private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category"; private static final String DEBUG_APPLICATIONS_CATEGORY_KEY = "debug_applications_category"; + private static final String WIFI_DISPLAY_CERTIFICATION_KEY = "wifi_display_certification"; private static final String OPENGL_TRACES_KEY = "enable_opengl_traces"; @@ -135,12 +139,12 @@ public class DevelopmentSettings extends PreferenceFragment private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs"; - private static final String WEBVIEW_EXPERIMENTAL_KEY = "experimental_webview"; - private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce"; private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; + private static final String TERMINAL_APP_PACKAGE = "com.android.terminal"; + private static final int RESULT_DEBUG_APP = 1000; private IWindowManager mWindowManager; @@ -154,10 +158,11 @@ public class DevelopmentSettings extends PreferenceFragment private CheckBoxPreference mEnableAdb; private Preference mClearAdbKeys; + private CheckBoxPreference mEnableTerminal; private Preference mBugreport; private CheckBoxPreference mBugreportInPower; private CheckBoxPreference mKeepScreenOn; - private CheckBoxPreference mEnforceReadExternal; + private CheckBoxPreference mBtHciSnoopLog; private CheckBoxPreference mAllowMockLocation; private PreferenceScreen mPassword; @@ -165,6 +170,7 @@ public class DevelopmentSettings extends PreferenceFragment private Preference mDebugAppPref; private CheckBoxPreference mWaitForDebugger; private CheckBoxPreference mVerifyAppsOverUsb; + private CheckBoxPreference mWifiDisplayCertification; private CheckBoxPreference mStrictMode; private CheckBoxPreference mPointerLocation; @@ -176,8 +182,9 @@ public class DevelopmentSettings extends PreferenceFragment private CheckBoxPreference mForceMsaa; private CheckBoxPreference mShowHwScreenUpdates; private CheckBoxPreference mShowHwLayersUpdates; - private CheckBoxPreference mShowHwOverdraw; private CheckBoxPreference mDebugLayout; + private CheckBoxPreference mForceRtlLayout; + private ListPreference mDebugHwOverdraw; private ListPreference mTrackFrameTime; private ListPreference mShowNonRectClip; private ListPreference mWindowAnimationScale; @@ -190,7 +197,6 @@ public class DevelopmentSettings extends PreferenceFragment private ListPreference mAppProcessLimit; private CheckBoxPreference mShowAllANRs; - private CheckBoxPreference mExperimentalWebView; private final ArrayList mAllPrefs = new ArrayList(); private final ArrayList mResetCbPrefs @@ -206,6 +212,10 @@ public class DevelopmentSettings extends PreferenceFragment private boolean mUnavailable; + public DevelopmentSettings() { + super(RESTRICTIONS_PIN_SET); + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -223,20 +233,26 @@ public class DevelopmentSettings extends PreferenceFragment addPreferencesFromResource(R.xml.development_prefs); + final PreferenceGroup debugDebuggingCategory = (PreferenceGroup) + findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); + mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB); mClearAdbKeys = findPreference(CLEAR_ADB_KEYS); if (!SystemProperties.getBoolean("ro.adb.secure", false)) { - PreferenceGroup debugDebuggingCategory = (PreferenceGroup) - findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); if (debugDebuggingCategory != null) { debugDebuggingCategory.removePreference(mClearAdbKeys); } } + mEnableTerminal = findAndInitCheckboxPref(ENABLE_TERMINAL); + if (!isPackageInstalled(getActivity(), TERMINAL_APP_PACKAGE)) { + debugDebuggingCategory.removePreference(mEnableTerminal); + mEnableTerminal = null; + } mBugreport = findPreference(BUGREPORT); mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY); mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON); - mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL); + mBtHciSnoopLog = findAndInitCheckboxPref(BT_HCI_SNOOP_LOG); mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION); mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD); mAllPrefs.add(mPassword); @@ -244,6 +260,7 @@ public class DevelopmentSettings extends PreferenceFragment if (!android.os.Process.myUserHandle().equals(UserHandle.OWNER)) { disableForUser(mEnableAdb); disableForUser(mClearAdbKeys); + disableForUser(mEnableTerminal); disableForUser(mPassword); } @@ -252,8 +269,6 @@ public class DevelopmentSettings extends PreferenceFragment mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY); mVerifyAppsOverUsb = findAndInitCheckboxPref(VERIFY_APPS_OVER_USB_KEY); if (!showVerifierSetting()) { - PreferenceGroup debugDebuggingCategory = (PreferenceGroup) - findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); if (debugDebuggingCategory != null) { debugDebuggingCategory.removePreference(mVerifyAppsOverUsb); } else { @@ -272,8 +287,10 @@ public class DevelopmentSettings extends PreferenceFragment mShowNonRectClip = addListPreference(SHOW_NON_RECTANGULAR_CLIP_KEY); mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY); mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY); - mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY); mDebugLayout = findAndInitCheckboxPref(DEBUG_LAYOUT_KEY); + mForceRtlLayout = findAndInitCheckboxPref(FORCE_RTL_LAYOUT_KEY); + mDebugHwOverdraw = addListPreference(DEBUG_HW_OVERDRAW_KEY); + mWifiDisplayCertification = findAndInitCheckboxPref(WIFI_DISPLAY_CERTIFICATION_KEY); mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY); mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY); mAnimatorDurationScale = addListPreference(ANIMATOR_DURATION_SCALE_KEY); @@ -291,22 +308,17 @@ public class DevelopmentSettings extends PreferenceFragment mAllPrefs.add(mShowAllANRs); mResetCbPrefs.add(mShowAllANRs); - if (WebViewFactory.isExperimentalWebViewAvailable()) { - mExperimentalWebView = findAndInitCheckboxPref(WEBVIEW_EXPERIMENTAL_KEY); - } else { - Preference experimentalWebView = findPreference(WEBVIEW_EXPERIMENTAL_KEY); - PreferenceGroup debugApplicationsCategory = (PreferenceGroup) - findPreference(DEBUG_APPLICATIONS_CATEGORY_KEY); - if (debugApplicationsCategory != null) { - debugApplicationsCategory.removePreference(experimentalWebView); - } + Preference selectRuntime = findPreference(SELECT_RUNTIME_KEY); + if (selectRuntime != null) { + mAllPrefs.add(selectRuntime); + filterRuntimeOptions(selectRuntime); } Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY); if (hdcpChecking != null) { mAllPrefs.add(hdcpChecking); + removePreferenceForProduction(hdcpChecking); } - removeHdcpOptionsForProduction(); } private ListPreference addListPreference(String prefKey) { @@ -370,15 +382,17 @@ public class DevelopmentSettings extends PreferenceFragment activity.getActionBar().setCustomView(null); } - private void removeHdcpOptionsForProduction() { + private boolean removePreferenceForProduction(Preference preference) { if ("user".equals(Build.TYPE)) { - Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY); - if (hdcpChecking != null) { - // Remove the preference - getPreferenceScreen().removePreference(hdcpChecking); - mAllPrefs.remove(hdcpChecking); - } + removePreference(preference); + return true; } + return false; + } + + private void removePreference(Preference preference) { + getPreferenceScreen().removePreference(preference); + mAllPrefs.remove(preference); } private void setPrefsEnabledState(boolean enabled) { @@ -443,13 +457,20 @@ public class DevelopmentSettings extends PreferenceFragment mHaveDebugSettings = false; updateCheckBox(mEnableAdb, Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0); + if (mEnableTerminal != null) { + updateCheckBox(mEnableTerminal, + context.getPackageManager().getApplicationEnabledSetting(TERMINAL_APP_PACKAGE) + == PackageManager.COMPONENT_ENABLED_STATE_ENABLED); + } updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr, Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0); updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr, Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0); - updateCheckBox(mEnforceReadExternal, isPermissionEnforced(READ_EXTERNAL_STORAGE)); + updateCheckBox(mBtHciSnoopLog, Settings.Secure.getInt(cr, + Settings.Secure.BLUETOOTH_HCI_LOG, 0) != 0); updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr, Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0); + updateRuntimeValue(); updateHdcpValues(); updatePasswordSummary(); updateDebuggerOptions(); @@ -464,7 +485,7 @@ public class DevelopmentSettings extends PreferenceFragment updateShowNonRectClipOptions(); updateShowHwScreenUpdatesOptions(); updateShowHwLayersUpdatesOptions(); - updateShowHwOverdrawOptions(); + updateDebugHwOverdrawOptions(); updateDebugLayoutOptions(); updateAnimationScaleOptions(); updateOverlayDisplayDevicesOptions(); @@ -472,9 +493,10 @@ public class DevelopmentSettings extends PreferenceFragment updateImmediatelyDestroyActivitiesOptions(); updateAppProcessLimitOptions(); updateShowAllANRsOptions(); - updateExperimentalWebViewOptions(); updateVerifyAppsOverUsbOptions(); updateBugreportOptions(); + updateForceRtlOptions(); + updateWifiDisplayCertificationOptions(); } private void resetDangerousOptions() { @@ -498,13 +520,60 @@ public class DevelopmentSettings extends PreferenceFragment pokeSystemProperties(); } + void filterRuntimeOptions(Preference selectRuntime) { + ListPreference pref = (ListPreference) selectRuntime; + ArrayList validValues = new ArrayList(); + ArrayList validSummaries = new ArrayList(); + String[] values = getResources().getStringArray(R.array.select_runtime_values); + String[] summaries = getResources().getStringArray(R.array.select_runtime_summaries); + for (int i = 0; i < values.length; i++) { + String value = values[i]; + String summary = summaries[i]; + if (new File("/system/lib/" + value).exists()) { + validValues.add(value); + validSummaries.add(summary); + } + } + int count = validValues.size(); + if (count <= 1) { + // no choices, so remove preference + removePreference(selectRuntime); + } else { + pref.setEntryValues(validValues.toArray(new String[count])); + pref.setEntries(validSummaries.toArray(new String[count])); + } + } + + private String currentRuntimeValue() { + return SystemProperties.get(SELECT_RUNTIME_PROPERTY, VMRuntime.getRuntime().vmLibrary()); + } + + private void updateRuntimeValue() { + ListPreference selectRuntime = (ListPreference) findPreference(SELECT_RUNTIME_KEY); + if (selectRuntime != null) { + String currentValue = currentRuntimeValue(); + String[] values = getResources().getStringArray(R.array.select_runtime_values); + String[] summaries = getResources().getStringArray(R.array.select_runtime_summaries); + int index = 0; + for (int i = 0; i < values.length; i++) { + if (currentValue.equals(values[i])) { + index = i; + break; + } + } + selectRuntime.setValue(values[index]); + selectRuntime.setSummary(summaries[index]); + selectRuntime.setOnPreferenceChangeListener(this); + } + } + private void updateHdcpValues() { - int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY); if (hdcpChecking != null) { String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY); String[] values = getResources().getStringArray(R.array.hdcp_checking_values); String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries); + int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values for (int i = 0; i < values.length; i++) { if (currentValue.equals(values[i])) { index = i; @@ -529,6 +598,14 @@ public class DevelopmentSettings extends PreferenceFragment } } + private void writeBtHciSnoopLogOptions() { + BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); + adapter.configHciSnoopLog(mBtHciSnoopLog.isChecked()); + Settings.Secure.putInt(getActivity().getContentResolver(), + Settings.Secure.BLUETOOTH_HCI_LOG, + mBtHciSnoopLog.isChecked() ? 1 : 0); + } + private void writeDebuggerOptions() { try { ActivityManagerNative.getDefault().setDebugApp( @@ -701,7 +778,7 @@ public class DevelopmentSettings extends PreferenceFragment if (flinger != null) { Parcel data = Parcel.obtain(); data.writeInterfaceToken("android.ui.ISurfaceComposer"); - final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0; + final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0; data.writeInt(showUpdates); flinger.transact(1002, data, null, 0); data.recycle(); @@ -718,7 +795,7 @@ public class DevelopmentSettings extends PreferenceFragment if (flinger != null) { Parcel data = Parcel.obtain(); data.writeInterfaceToken("android.ui.ISurfaceComposer"); - final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0; + final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0; data.writeInt(disableOverlays); flinger.transact(1008, data, null, 0); data.recycle(); @@ -732,7 +809,7 @@ public class DevelopmentSettings extends PreferenceFragment private void updateHardwareUiOptions() { updateCheckBox(mForceHardwareUi, SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false)); } - + private void writeHardwareUiOptions() { SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false"); pokeSystemProperties(); @@ -820,15 +897,29 @@ public class DevelopmentSettings extends PreferenceFragment pokeSystemProperties(); } - private void updateShowHwOverdrawOptions() { - updateCheckBox(mShowHwOverdraw, SystemProperties.getBoolean( - HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, false)); + private void updateDebugHwOverdrawOptions() { + String value = SystemProperties.get(HardwareRenderer.DEBUG_OVERDRAW_PROPERTY); + if (value == null) { + value = ""; + } + + CharSequence[] values = mDebugHwOverdraw.getEntryValues(); + for (int i = 0; i < values.length; i++) { + if (value.contentEquals(values[i])) { + mDebugHwOverdraw.setValueIndex(i); + mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[i]); + return; + } + } + mDebugHwOverdraw.setValueIndex(0); + mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[0]); } - private void writeShowHwOverdrawOptions() { - SystemProperties.set(HardwareRenderer.DEBUG_SHOW_OVERDRAW_PROPERTY, - mShowHwOverdraw.isChecked() ? "true" : null); + private void writeDebugHwOverdrawOptions(Object newValue) { + SystemProperties.set(HardwareRenderer.DEBUG_OVERDRAW_PROPERTY, + newValue == null ? "" : newValue.toString()); pokeSystemProperties(); + updateDebugHwOverdrawOptions(); } private void updateDebugLayoutOptions() { @@ -842,11 +933,36 @@ public class DevelopmentSettings extends PreferenceFragment pokeSystemProperties(); } + private void updateForceRtlOptions() { + updateCheckBox(mForceRtlLayout, Settings.Global.getInt(getActivity().getContentResolver(), + Settings.Global.DEVELOPMENT_FORCE_RTL, 0) != 0); + } + + private void writeForceRtlOptions() { + boolean value = mForceRtlLayout.isChecked(); + Settings.Global.putInt(getActivity().getContentResolver(), + Settings.Global.DEVELOPMENT_FORCE_RTL, value ? 1 : 0); + SystemProperties.set(Settings.Global.DEVELOPMENT_FORCE_RTL, value ? "1" : "0"); + LocalePicker.updateLocale(getActivity().getResources().getConfiguration().locale); + } + + private void updateWifiDisplayCertificationOptions() { + updateCheckBox(mWifiDisplayCertification, Settings.Global.getInt( + getActivity().getContentResolver(), + Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0); + } + + private void writeWifiDisplayCertificationOptions() { + Settings.Global.putInt(getActivity().getContentResolver(), + Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, + mWifiDisplayCertification.isChecked() ? 1 : 0); + } + private void updateCpuUsageOptions() { updateCheckBox(mShowCpuUsage, Settings.Global.getInt(getActivity().getContentResolver(), Settings.Global.SHOW_PROCESSES, 0) != 0); } - + private void writeCpuUsageOptions() { boolean value = mShowCpuUsage.isChecked(); Settings.Global.putInt(getActivity().getContentResolver(), @@ -999,21 +1115,6 @@ public class DevelopmentSettings extends PreferenceFragment getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0); } - private void writeExperimentalWebViewOptions() { - if (mExperimentalWebView != null) { - SystemProperties.set(WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY, - mExperimentalWebView.isChecked() ? "true" : null); - pokeSystemProperties(); - } - } - - private void updateExperimentalWebViewOptions() { - if (mExperimentalWebView != null) { - updateCheckBox(mExperimentalWebView, SystemProperties.getBoolean( - WebViewFactory.WEBVIEW_EXPERIMENTAL_PROPERTY, false)); - } - } - @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == mEnabledSwitch) { @@ -1056,7 +1157,6 @@ public class DevelopmentSettings extends PreferenceFragment @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - if (Utils.isMonkeyRunning()) { return false; } @@ -1087,21 +1187,22 @@ public class DevelopmentSettings extends PreferenceFragment .setPositiveButton(android.R.string.ok, this) .setNegativeButton(android.R.string.cancel, null) .show(); + } else if (preference == mEnableTerminal) { + final PackageManager pm = getActivity().getPackageManager(); + pm.setApplicationEnabledSetting(TERMINAL_APP_PACKAGE, + mEnableTerminal.isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); } else if (preference == mBugreportInPower) { Settings.Secure.putInt(getActivity().getContentResolver(), - Settings.Secure.BUGREPORT_IN_POWER_MENU, + Settings.Secure.BUGREPORT_IN_POWER_MENU, mBugreportInPower.isChecked() ? 1 : 0); } else if (preference == mKeepScreenOn) { Settings.Global.putInt(getActivity().getContentResolver(), Settings.Global.STAY_ON_WHILE_PLUGGED_IN, - mKeepScreenOn.isChecked() ? + mKeepScreenOn.isChecked() ? (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0); - } else if (preference == mEnforceReadExternal) { - if (mEnforceReadExternal.isChecked()) { - ConfirmEnforceFragment.show(this); - } else { - setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false); - } + } else if (preference == mBtHciSnoopLog) { + writeBtHciSnoopLogOptions(); } else if (preference == mAllowMockLocation) { Settings.Secure.putInt(getActivity().getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, @@ -1128,8 +1229,6 @@ public class DevelopmentSettings extends PreferenceFragment writeImmediatelyDestroyActivitiesOptions(); } else if (preference == mShowAllANRs) { writeShowAllANRsOptions(); - } else if (preference == mExperimentalWebView) { - writeExperimentalWebViewOptions(); } else if (preference == mForceHardwareUi) { writeHardwareUiOptions(); } else if (preference == mForceMsaa) { @@ -1138,10 +1237,14 @@ public class DevelopmentSettings extends PreferenceFragment writeShowHwScreenUpdatesOptions(); } else if (preference == mShowHwLayersUpdates) { writeShowHwLayersUpdatesOptions(); - } else if (preference == mShowHwOverdraw) { - writeShowHwOverdrawOptions(); } else if (preference == mDebugLayout) { writeDebugLayoutOptions(); + } else if (preference == mForceRtlLayout) { + writeForceRtlOptions(); + } else if (preference == mWifiDisplayCertification) { + writeWifiDisplayCertificationOptions(); + } else { + return super.onPreferenceTreeClick(preferenceScreen, preference); } return false; @@ -1149,7 +1252,34 @@ public class DevelopmentSettings extends PreferenceFragment @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - if (HDCP_CHECKING_KEY.equals(preference.getKey())) { + if (SELECT_RUNTIME_KEY.equals(preference.getKey())) { + final String oldRuntimeValue = VMRuntime.getRuntime().vmLibrary(); + final String newRuntimeValue = newValue.toString(); + if (!newRuntimeValue.equals(oldRuntimeValue)) { + final Context context = getActivity(); + final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setMessage(context.getResources().getString(R.string.select_runtime_warning_message, + oldRuntimeValue, newRuntimeValue)); + builder.setPositiveButton(android.R.string.ok, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SystemProperties.set(SELECT_RUNTIME_PROPERTY, newRuntimeValue); + pokeSystemProperties(); + PowerManager pm = (PowerManager) + context.getSystemService(Context.POWER_SERVICE); + pm.reboot(null); + } + }); + builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + updateRuntimeValue(); + } + }); + builder.show(); + } + return true; + } else if (HDCP_CHECKING_KEY.equals(preference.getKey())) { SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString()); updateHdcpValues(); pokeSystemProperties(); @@ -1172,6 +1302,9 @@ public class DevelopmentSettings extends PreferenceFragment } else if (preference == mTrackFrameTime) { writeTrackFrameTimeOptions(newValue); return true; + } else if (preference == mDebugHwOverdraw) { + writeDebugHwOverdrawOptions(newValue); + return true; } else if (preference == mShowNonRectClip) { writeShowNonRectClipOptions(newValue); return true; @@ -1279,7 +1412,7 @@ public class DevelopmentSettings extends PreferenceFragment obj.transact(IBinder.SYSPROPS_TRANSACTION, data, null, 0); } catch (RemoteException e) { } catch (Exception e) { - Log.i(TAG, "Somone wrote a bad service '" + service + Log.i(TAG, "Someone wrote a bad service '" + service + "' that doesn't like to be poked: " + e); } data.recycle(); @@ -1289,58 +1422,11 @@ public class DevelopmentSettings extends PreferenceFragment } } - /** - * Dialog to confirm enforcement of {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}. - */ - public static class ConfirmEnforceFragment extends DialogFragment { - public static void show(DevelopmentSettings parent) { - final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment(); - dialog.setTargetFragment(parent, 0); - dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE); - } - - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - final Context context = getActivity(); - - final AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(R.string.enforce_read_external_confirm_title); - builder.setMessage(R.string.enforce_read_external_confirm_message); - - builder.setPositiveButton(android.R.string.ok, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true); - ((DevelopmentSettings) getTargetFragment()).updateAllOptions(); - } - }); - builder.setNegativeButton(android.R.string.cancel, new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ((DevelopmentSettings) getTargetFragment()).updateAllOptions(); - } - }); - - return builder.create(); - } - } - - private static boolean isPermissionEnforced(String permission) { + private static boolean isPackageInstalled(Context context, String packageName) { try { - return ActivityThread.getPackageManager().isPermissionEnforced(permission); - } catch (RemoteException e) { - throw new RuntimeException("Problem talking with PackageManager", e); - } - } - - private static void setPermissionEnforced( - Context context, String permission, boolean enforced) { - try { - // TODO: offload to background thread - ActivityThread.getPackageManager() - .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced); - } catch (RemoteException e) { - throw new RuntimeException("Problem talking with PackageManager", e); + return context.getPackageManager().getPackageInfo(packageName, 0) != null; + } catch (NameNotFoundException e) { + return false; } } } diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index ac74221e5d3..7e947415bc1 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -37,7 +37,7 @@ import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class DeviceInfoSettings extends SettingsPreferenceFragment { +public class DeviceInfoSettings extends RestrictedSettingsFragment { private static final String LOG_TAG = "DeviceInfoSettings"; @@ -70,12 +70,20 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment { int mDevHitCountdown; Toast mDevHitToast; + public DeviceInfoSettings() { + super(null /* Don't PIN protect the entire screen */); + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.device_info_settings); + // We only call ensurePinRestrictedPreference() when mDevHitCountdown == 0. + // This will keep us from entering developer mode without a PIN. + protectByRestrictions(KEY_BUILD_NUMBER); + setStringSummary(KEY_FIRMWARE_VERSION, Build.VERSION.RELEASE); findPreference(KEY_FIRMWARE_VERSION).setEnabled(true); setValueSummary(KEY_BASEBAND_VERSION, "gsm.version.baseband"); @@ -178,6 +186,11 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment { if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true; if (mDevHitCountdown > 0) { + if (mDevHitCountdown == 1) { + if (super.ensurePinRestrictedPreference(preference)) { + return true; + } + } mDevHitCountdown--; if (mDevHitCountdown == 0) { getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE, diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index e59b0bff655..813923ddc8e 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -95,9 +95,11 @@ public class DisplaySettings extends SettingsPreferenceFragment implements mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER); mAccelerometer.setPersistent(false); - if (RotationPolicy.isRotationLockToggleSupported(getActivity())) { + if (!RotationPolicy.isRotationSupported(getActivity()) + || RotationPolicy.isRotationLockToggleSupported(getActivity())) { // If rotation lock is supported, then we do not provide this option in - // Display settings. However, is still available in Accessibility settings. + // Display settings. However, is still available in Accessibility settings, + // if the device supports rotation. getPreferenceScreen().removePreference(mAccelerometer); } @@ -191,13 +193,18 @@ public class DisplaySettings extends SettingsPreferenceFragment implements } } if (revisedEntries.size() != entries.length || revisedValues.size() != values.length) { + final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue()); screenTimeoutPreference.setEntries( revisedEntries.toArray(new CharSequence[revisedEntries.size()])); screenTimeoutPreference.setEntryValues( revisedValues.toArray(new CharSequence[revisedValues.size()])); - final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue()); if (userPreference <= maxTimeout) { screenTimeoutPreference.setValue(String.valueOf(userPreference)); + } else if (revisedValues.size() > 0 + && Long.parseLong(revisedValues.get(revisedValues.size() - 1).toString()) + == maxTimeout) { + // If the last one happens to be the same as the max timeout, select that + screenTimeoutPreference.setValue(String.valueOf(maxTimeout)); } else { // There will be no highlighted selection since nothing in the list matches // maxTimeout. The user can still select anything less than maxTimeout. diff --git a/src/com/android/settings/EventLogTags.logtags b/src/com/android/settings/EventLogTags.logtags new file mode 100644 index 00000000000..3e87c536961 --- /dev/null +++ b/src/com/android/settings/EventLogTags.logtags @@ -0,0 +1,6 @@ +# See system/core/logcat/event.logtags for a description of the format of this file. + +option java_package com.android.settings + +# log the type of screen lock when user sets lock screen +90200 lock_screen_type (type|3) diff --git a/src/com/android/settings/HelpUtils.java b/src/com/android/settings/HelpUtils.java index 6cd5eb65c8e..22e2f7620a8 100644 --- a/src/com/android/settings/HelpUtils.java +++ b/src/com/android/settings/HelpUtils.java @@ -16,6 +16,7 @@ package com.android.settings; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; @@ -95,9 +96,15 @@ public class HelpUtils { // Set the intent to the help menu item, show the help menu item in the overflow // menu, and make it visible. - helpMenuItem.setIntent(intent); - helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); - helpMenuItem.setVisible(true); + ComponentName component = intent.resolveActivity(context.getPackageManager()); + if (component != null) { + helpMenuItem.setIntent(intent); + helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + helpMenuItem.setVisible(true); + } else { + helpMenuItem.setVisible(false); + return false; + } // return that the help menu item is visible (i.e., true) return true; @@ -109,7 +116,7 @@ public class HelpUtils { * of the app's package as gotten via the context. * @return the uri with added query parameters */ - private static Uri uriWithAddedParameters(Context context, Uri baseUri) { + public static Uri uriWithAddedParameters(Context context, Uri baseUri) { Uri.Builder builder = baseUri.buildUpon(); // Add in the preferred language diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java new file mode 100644 index 00000000000..eb659e27e1d --- /dev/null +++ b/src/com/android/settings/HomeSettings.java @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import java.util.ArrayList; + +import android.app.ActivityManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.graphics.ColorFilter; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.preference.Preference; +import android.preference.PreferenceGroup; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.RadioButton; + +public class HomeSettings extends SettingsPreferenceFragment { + static final String TAG = "HomeSettings"; + + static final int REQUESTING_UNINSTALL = 10; + + public static final String HOME_PREFS = "home_prefs"; + public static final String HOME_PREFS_DO_SHOW = "do_show"; + + public static final String HOME_SHOW_NOTICE = "show"; + + PreferenceGroup mPrefGroup; + + PackageManager mPm; + ComponentName[] mHomeComponentSet; + ArrayList mPrefs; + HomeAppPreference mCurrentHome = null; + final IntentFilter mHomeFilter; + boolean mShowNotice; + + public HomeSettings() { + mHomeFilter = new IntentFilter(Intent.ACTION_MAIN); + mHomeFilter.addCategory(Intent.CATEGORY_HOME); + mHomeFilter.addCategory(Intent.CATEGORY_DEFAULT); + } + + OnClickListener mHomeClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + int index = (Integer)v.getTag(); + HomeAppPreference pref = mPrefs.get(index); + if (!pref.isChecked) { + makeCurrentHome(pref); + } + } + }; + + OnClickListener mDeleteClickListener = new OnClickListener() { + @Override + public void onClick(View v) { + int index = (Integer)v.getTag(); + uninstallApp(mPrefs.get(index)); + } + }; + + void makeCurrentHome(HomeAppPreference newHome) { + if (mCurrentHome != null) { + mCurrentHome.setChecked(false); + } + newHome.setChecked(true); + mCurrentHome = newHome; + + mPm.replacePreferredActivity(mHomeFilter, IntentFilter.MATCH_CATEGORY_EMPTY, + mHomeComponentSet, newHome.activityName); + } + + void uninstallApp(HomeAppPreference pref) { + // Uninstallation is done by asking the OS to do it + Uri packageURI = Uri.parse("package:" + pref.uninstallTarget); + Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI); + uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, false); + int requestCode = REQUESTING_UNINSTALL + (pref.isChecked ? 1 : 0); + startActivityForResult(uninstallIntent, requestCode); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + // Rebuild the list now that we might have nuked something + buildHomeActivitiesList(); + + // if the previous home app is now gone, fall back to the system one + if (requestCode > REQUESTING_UNINSTALL) { + // if mCurrentHome has gone null, it means we didn't find the previously- + // default home app when rebuilding the list, i.e. it was the one we + // just uninstalled. When that happens we make the system-bundled + // home app the active default. + if (mCurrentHome == null) { + for (int i = 0; i < mPrefs.size(); i++) { + HomeAppPreference pref = mPrefs.get(i); + if (pref.isSystem) { + makeCurrentHome(pref); + break; + } + } + } + } + + // If we're down to just one possible home app, back out of this settings + // fragment and show a dialog explaining to the user that they won't see + // 'Home' settings now until such time as there are multiple available. + if (mPrefs.size() < 2) { + if (mShowNotice) { + mShowNotice = false; + Settings.requestHomeNotice(); + } + finishFragment(); + } + } + + void buildHomeActivitiesList() { + ArrayList homeActivities = new ArrayList(); + ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities); + + Context context = getActivity(); + mCurrentHome = null; + mPrefGroup.removeAll(); + mPrefs = new ArrayList(); + mHomeComponentSet = new ComponentName[homeActivities.size()]; + int prefIndex = 0; + for (int i = 0; i < homeActivities.size(); i++) { + final ResolveInfo candidate = homeActivities.get(i); + final ActivityInfo info = candidate.activityInfo; + ComponentName activityName = new ComponentName(info.packageName, info.name); + mHomeComponentSet[i] = activityName; + try { + Drawable icon = info.loadIcon(mPm); + CharSequence name = info.loadLabel(mPm); + HomeAppPreference pref = new HomeAppPreference(context, activityName, prefIndex, + icon, name, this, info); + mPrefs.add(pref); + mPrefGroup.addPreference(pref); + pref.setEnabled(true); + if (activityName.equals(currentDefaultHome)) { + mCurrentHome = pref; + } + prefIndex++; + } catch (Exception e) { + Log.v(TAG, "Problem dealing with activity " + activityName, e); + } + } + + if (mCurrentHome != null) { + new Handler().post(new Runnable() { + public void run() { + mCurrentHome.setChecked(true); + } + }); + } + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.home_selection); + + mPm = getPackageManager(); + mPrefGroup = (PreferenceGroup) findPreference("home"); + + Bundle args = getArguments(); + mShowNotice = (args != null) && args.getBoolean(HOME_SHOW_NOTICE, false); + } + + @Override + public void onResume() { + super.onResume(); + buildHomeActivitiesList(); + } + + class HomeAppPreference extends Preference { + ComponentName activityName; + int index; + HomeSettings fragment; + final ColorFilter grayscaleFilter; + boolean isChecked; + + boolean isSystem; + String uninstallTarget; + + public HomeAppPreference(Context context, ComponentName activity, + int i, Drawable icon, CharSequence title, + HomeSettings parent, ActivityInfo info) { + super(context); + setLayoutResource(R.layout.preference_home_app); + setIcon(icon); + setTitle(title); + activityName = activity; + fragment = parent; + index = i; + + ColorMatrix colorMatrix = new ColorMatrix(); + colorMatrix.setSaturation(0f); + float[] matrix = colorMatrix.getArray(); + matrix[18] = 0.5f; + grayscaleFilter = new ColorMatrixColorFilter(colorMatrix); + + determineTargets(info); + } + + // Check whether this activity is bundled on the system, with awareness + // of the META_HOME_ALTERNATE mechanism. + private void determineTargets(ActivityInfo info) { + final Bundle meta = info.metaData; + if (meta != null) { + final String altHomePackage = meta.getString(ActivityManager.META_HOME_ALTERNATE); + if (altHomePackage != null) { + try { + final int match = mPm.checkSignatures(info.packageName, altHomePackage); + if (match >= PackageManager.SIGNATURE_MATCH) { + PackageInfo altInfo = mPm.getPackageInfo(altHomePackage, 0); + final int altFlags = altInfo.applicationInfo.flags; + isSystem = (altFlags & ApplicationInfo.FLAG_SYSTEM) != 0; + uninstallTarget = altInfo.packageName; + return; + } + } catch (Exception e) { + // e.g. named alternate package not found during lookup + Log.w(TAG, "Unable to compare/resolve alternate", e); + } + } + } + // No suitable metadata redirect, so use the package's own info + isSystem = (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; + uninstallTarget = info.packageName; + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + RadioButton radio = (RadioButton) view.findViewById(R.id.home_radio); + radio.setChecked(isChecked); + + Integer indexObj = new Integer(index); + + ImageView icon = (ImageView) view.findViewById(R.id.home_app_uninstall); + if (isSystem) { + icon.setEnabled(false); + icon.setColorFilter(grayscaleFilter); + } else { + icon.setOnClickListener(mDeleteClickListener); + icon.setTag(indexObj); + } + + View v = view.findViewById(R.id.home_app_pref); + v.setOnClickListener(mHomeClickListener); + v.setTag(indexObj); + } + + void setChecked(boolean state) { + if (state != isChecked) { + isChecked = state; + notifyChanged(); + } + } + } +} diff --git a/src/com/android/settings/KeyguardAppWidgetPickActivity.java b/src/com/android/settings/KeyguardAppWidgetPickActivity.java index 8e08019ba6b..f3db2caa653 100644 --- a/src/com/android/settings/KeyguardAppWidgetPickActivity.java +++ b/src/com/android/settings/KeyguardAppWidgetPickActivity.java @@ -517,8 +517,8 @@ public class KeyguardAppWidgetPickActivity extends Activity // Found in KeyguardHostView.java final int KEYGUARD_HOST_ID = 0x4B455947; int userId = ActivityManager.getCurrentUser(); - mAppWidgetId = AppWidgetHost.allocateAppWidgetIdForSystem(KEYGUARD_HOST_ID, - userId); + mAppWidgetId = AppWidgetHost.allocateAppWidgetIdForPackage(KEYGUARD_HOST_ID, + userId, "com.android.keyguard"); } mAppWidgetManager.bindAppWidgetId( mAppWidgetId, intent.getComponent(), mExtraConfigureOptions); diff --git a/src/com/android/settings/LocationSettings.java b/src/com/android/settings/LocationSettings.java deleted file mode 100644 index 2edefdfba1f..00000000000 --- a/src/com/android/settings/LocationSettings.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings; - - -import android.content.ContentQueryMap; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.database.Cursor; -import android.location.LocationManager; -import android.os.UserManager; -import android.preference.CheckBoxPreference; -import android.preference.Preference; -import android.preference.PreferenceScreen; -import android.preference.SwitchPreference; -import android.provider.Settings; -import android.util.AttributeSet; -import android.view.View; -import android.widget.TextView; - -import java.util.Observable; -import java.util.Observer; - -/** - * Gesture lock pattern settings. - */ -public class LocationSettings extends SettingsPreferenceFragment - implements Preference.OnPreferenceChangeListener { - - // Location Settings - private static final String KEY_LOCATION_TOGGLE = "location_toggle"; - private static final String KEY_LOCATION_NETWORK = "location_network"; - private static final String KEY_LOCATION_GPS = "location_gps"; - private static final String KEY_ASSISTED_GPS = "assisted_gps"; - - private CheckBoxPreference mNetwork; - private CheckBoxPreference mGps; - private CheckBoxPreference mAssistedGps; - private SwitchPreference mLocationAccess; - - // These provide support for receiving notification when Location Manager settings change. - // This is necessary because the Network Location Provider can change settings - // if the user does not confirm enabling the provider. - private ContentQueryMap mContentQueryMap; - - private Observer mSettingsObserver; - - @Override - public void onStart() { - super.onStart(); - // listen for Location Manager settings changes - Cursor settingsCursor = getContentResolver().query(Settings.Secure.CONTENT_URI, null, - "(" + Settings.System.NAME + "=?)", - new String[]{Settings.Secure.LOCATION_PROVIDERS_ALLOWED}, - null); - mContentQueryMap = new ContentQueryMap(settingsCursor, Settings.System.NAME, true, null); - } - - @Override - public void onStop() { - super.onStop(); - if (mSettingsObserver != null) { - mContentQueryMap.deleteObserver(mSettingsObserver); - } - mContentQueryMap.close(); - } - - private PreferenceScreen createPreferenceHierarchy() { - PreferenceScreen root = getPreferenceScreen(); - if (root != null) { - root.removeAll(); - } - addPreferencesFromResource(R.xml.location_settings); - root = getPreferenceScreen(); - - mLocationAccess = (SwitchPreference) root.findPreference(KEY_LOCATION_TOGGLE); - mNetwork = (CheckBoxPreference) root.findPreference(KEY_LOCATION_NETWORK); - mGps = (CheckBoxPreference) root.findPreference(KEY_LOCATION_GPS); - mAssistedGps = (CheckBoxPreference) root.findPreference(KEY_ASSISTED_GPS); - - // Only enable these controls if this user is allowed to change location - // sharing settings. - final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - boolean isToggleAllowed = !um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION); - if (mLocationAccess != null) mLocationAccess.setEnabled(isToggleAllowed); - if (mNetwork != null) mNetwork.setEnabled(isToggleAllowed); - if (mGps != null) mGps.setEnabled(isToggleAllowed); - if (mAssistedGps != null) mAssistedGps.setEnabled(isToggleAllowed); - - mLocationAccess.setOnPreferenceChangeListener(this); - return root; - } - - @Override - public void onResume() { - super.onResume(); - - // Make sure we reload the preference hierarchy since some of these settings - // depend on others... - createPreferenceHierarchy(); - updateLocationToggles(); - - if (mSettingsObserver == null) { - mSettingsObserver = new Observer() { - @Override - public void update(Observable o, Object arg) { - updateLocationToggles(); - } - }; - } - - mContentQueryMap.addObserver(mSettingsObserver); - } - - @Override - public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { - final ContentResolver cr = getContentResolver(); - final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (preference == mNetwork) { - if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) { - Settings.Secure.setLocationProviderEnabled(cr, - LocationManager.NETWORK_PROVIDER, mNetwork.isChecked()); - } - } else if (preference == mGps) { - boolean enabled = mGps.isChecked(); - if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) { - Settings.Secure.setLocationProviderEnabled(cr, - LocationManager.GPS_PROVIDER, enabled); - if (mAssistedGps != null) { - mAssistedGps.setEnabled(enabled); - } - } - } else if (preference == mAssistedGps) { - Settings.Global.putInt(cr, Settings.Global.ASSISTED_GPS_ENABLED, - mAssistedGps.isChecked() ? 1 : 0); - } else { - // If we didn't handle it, let preferences handle it. - return super.onPreferenceTreeClick(preferenceScreen, preference); - } - - return true; - } - - /* - * Creates toggles for each available location provider - */ - private void updateLocationToggles() { - ContentResolver res = getContentResolver(); - boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled( - res, LocationManager.GPS_PROVIDER); - boolean networkEnabled = Settings.Secure.isLocationProviderEnabled( - res, LocationManager.NETWORK_PROVIDER); - mGps.setChecked(gpsEnabled); - mNetwork.setChecked(networkEnabled); - mLocationAccess.setChecked(gpsEnabled || networkEnabled); - if (mAssistedGps != null) { - mAssistedGps.setChecked(Settings.Global.getInt(res, - Settings.Global.ASSISTED_GPS_ENABLED, 2) == 1); - mAssistedGps.setEnabled(gpsEnabled); - } - } - - /** - * see confirmPatternThenDisableAndClear - */ - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - createPreferenceHierarchy(); - } - - /** Enable or disable all providers when the master toggle is changed. */ - private void onToggleLocationAccess(boolean checked) { - final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - if (um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) { - return; - } - final ContentResolver cr = getContentResolver(); - Settings.Secure.setLocationProviderEnabled(cr, - LocationManager.GPS_PROVIDER, checked); - Settings.Secure.setLocationProviderEnabled(cr, - LocationManager.NETWORK_PROVIDER, checked); - updateLocationToggles(); - } - - @Override - public boolean onPreferenceChange(Preference pref, Object newValue) { - if (pref.getKey().equals(KEY_LOCATION_TOGGLE)) { - onToggleLocationAccess((Boolean) newValue); - } - return true; - } - - @Override - public int getHelpResource() { - return R.string.help_url_location_access; - } -} - -class WrappingSwitchPreference extends SwitchPreference { - - public WrappingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public WrappingSwitchPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected void onBindView(View view) { - super.onBindView(view); - - TextView title = (TextView) view.findViewById(android.R.id.title); - if (title != null) { - title.setSingleLine(false); - title.setMaxLines(3); - } - } -} - -class WrappingCheckBoxPreference extends CheckBoxPreference { - - public WrappingCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - public WrappingCheckBoxPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected void onBindView(View view) { - super.onBindView(view); - - TextView title = (TextView) view.findViewById(android.R.id.title); - if (title != null) { - title.setSingleLine(false); - title.setMaxLines(3); - } - } -} diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java index 495f3fd57a2..262aca37e78 100644 --- a/src/com/android/settings/MasterClear.java +++ b/src/com/android/settings/MasterClear.java @@ -29,6 +29,7 @@ import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Environment; import android.os.SystemProperties; +import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceActivity; import android.util.Log; @@ -54,6 +55,7 @@ public class MasterClear extends Fragment { private static final String TAG = "MasterClear"; private static final int KEYGUARD_REQUEST = 55; + private static final int PIN_REQUEST = 56; static final String ERASE_EXTERNAL_EXTRA = "erase_sd"; @@ -61,6 +63,7 @@ public class MasterClear extends Fragment { private Button mInitiateButton; private View mExternalStorageContainer; private CheckBox mExternalStorage; + private boolean mPinConfirmed; /** * Keyguard validation is run using the standard {@link ConfirmLockPattern} @@ -76,11 +79,25 @@ public class MasterClear extends Fragment { res.getText(R.string.master_clear_gesture_explanation)); } + private boolean runRestrictionsChallenge() { + if (UserManager.get(getActivity()).hasRestrictionsChallenge()) { + startActivityForResult( + new Intent(Intent.ACTION_RESTRICTIONS_CHALLENGE), PIN_REQUEST); + return true; + } + return false; + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (requestCode != KEYGUARD_REQUEST) { + if (requestCode == PIN_REQUEST) { + if (resultCode == Activity.RESULT_OK) { + mPinConfirmed = true; + } + return; + } else if (requestCode != KEYGUARD_REQUEST) { return; } @@ -109,6 +126,10 @@ public class MasterClear extends Fragment { private final Button.OnClickListener mInitiateListener = new Button.OnClickListener() { public void onClick(View v) { + mPinConfirmed = false; + if (runRestrictionsChallenge()) { + return; + } if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) { showFinalConfirmation(); } @@ -239,4 +260,17 @@ public class MasterClear extends Fragment { establishInitialState(); return mContentView; } + + @Override + public void onResume() { + super.onResume(); + + // If this is the second step after restrictions pin challenge + if (mPinConfirmed) { + mPinConfirmed = false; + if (!runKeyguardConfirmation(KEYGUARD_REQUEST)) { + showFinalConfirmation(); + } + } + } } diff --git a/src/com/android/settings/MonitoringCertInfoActivity.java b/src/com/android/settings/MonitoringCertInfoActivity.java new file mode 100644 index 00000000000..e2ac5d072b8 --- /dev/null +++ b/src/com/android/settings/MonitoringCertInfoActivity.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.admin.DevicePolicyManager; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnClickListener; +import android.content.Intent; +import android.os.Bundle; +import android.os.RemoteException; +import android.view.WindowManager; +import android.view.WindowManagerGlobal; + +/** + * Activity that shows a dialog explaining that a CA cert is allowing someone to monitor network + * traffic. + */ +public class MonitoringCertInfoActivity extends Activity implements OnClickListener { + + private boolean hasDeviceOwner = false; + + @Override + protected void onCreate(Bundle savedStates) { + super.onCreate(savedStates); + + DevicePolicyManager dpm = + (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); + + final AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.ssl_ca_cert_dialog_title); + builder.setCancelable(true); + hasDeviceOwner = dpm.getDeviceOwner() != null; + int buttonLabel; + if (hasDeviceOwner) { + // Institutional case. Show informational message. + String message = this.getResources().getString(R.string.ssl_ca_cert_info_message, + dpm.getDeviceOwnerName()); + builder.setMessage(message); + buttonLabel = R.string.done_button; + } else { + // Consumer case. Show scary warning. + builder.setIcon(android.R.drawable.stat_notify_error); + builder.setMessage(R.string.ssl_ca_cert_warning_message); + buttonLabel = R.string.ssl_ca_cert_settings_button; + } + + builder.setPositiveButton(buttonLabel, this); + + final Dialog dialog = builder.create(); + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); + try { + WindowManagerGlobal.getWindowManagerService().dismissKeyguard(); + } catch (RemoteException e) { + } + dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override public void onCancel(DialogInterface dialog) { + finish(); + } + }); + + dialog.show(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + if (hasDeviceOwner) { + finish(); + } else { + Intent intent = + new Intent(android.provider.Settings.ACTION_TRUSTED_CREDENTIALS_USER); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + } +} diff --git a/src/com/android/settings/RegulatoryInfoDisplayActivity.java b/src/com/android/settings/RegulatoryInfoDisplayActivity.java index 8adecf10b2f..171059c2978 100644 --- a/src/com/android/settings/RegulatoryInfoDisplayActivity.java +++ b/src/com/android/settings/RegulatoryInfoDisplayActivity.java @@ -22,7 +22,11 @@ import android.content.DialogInterface; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.os.SystemProperties; +import android.text.TextUtils; import android.view.Gravity; +import android.view.View; +import android.widget.ImageView; import android.widget.TextView; /** @@ -30,11 +34,14 @@ import android.widget.TextView; * preference item, and when "*#07#" is dialed on the Phone keypad. To enable this feature, * set the "config_show_regulatory_info" boolean to true in a device overlay resource, and in the * same overlay, either add a drawable named "regulatory_info.png" containing a graphical version - * of the required regulatory info, or add a string resource named "regulatory_info_text" with - * an HTML version of the required information (text will be centered in the dialog). + * of the required regulatory info (If ro.bootloader.hardware.sku property is set use + * "regulatory_info_.png where sku is ro.bootloader.hardware.sku property value in lowercase"), + * or add a string resource named "regulatory_info_text" with an HTML version of the required + * information (text will be centered in the dialog). */ public class RegulatoryInfoDisplayActivity extends Activity implements DialogInterface.OnDismissListener { + private final String REGULATORY_INFO_RESOURCE = "regulatory_info"; /** * Display the regulatory info graphic in a dialog window. @@ -52,21 +59,27 @@ public class RegulatoryInfoDisplayActivity extends Activity implements .setTitle(R.string.regulatory_information) .setOnDismissListener(this); - boolean regulatoryInfoDrawableExists; - try { - Drawable d = resources.getDrawable(R.drawable.regulatory_info); - // set to false if the width or height is <= 2 - // (missing PNG can return an empty 2x2 pixel Drawable) - regulatoryInfoDrawableExists = (d.getIntrinsicWidth() > 2 - && d.getIntrinsicHeight() > 2); - } catch (Resources.NotFoundException ignored) { - regulatoryInfoDrawableExists = false; + boolean regulatoryInfoDrawableExists = false; + int resId = getResourceId(); + if (resId != 0) { + try { + Drawable d = resources.getDrawable(resId); + // set to false if the width or height is <= 2 + // (missing PNG can return an empty 2x2 pixel Drawable) + regulatoryInfoDrawableExists = (d.getIntrinsicWidth() > 2 + && d.getIntrinsicHeight() > 2); + } catch (Resources.NotFoundException ignored) { + regulatoryInfoDrawableExists = false; + } } CharSequence regulatoryText = resources.getText(R.string.regulatory_info_text); if (regulatoryInfoDrawableExists) { - builder.setView(getLayoutInflater().inflate(R.layout.regulatory_info, null)); + View view = getLayoutInflater().inflate(R.layout.regulatory_info, null); + ImageView image = (ImageView) view.findViewById(R.id.regulatoryInfo); + image.setImageResource(resId); + builder.setView(view); builder.show(); } else if (regulatoryText.length() > 0) { builder.setMessage(regulatoryText); @@ -80,6 +93,24 @@ public class RegulatoryInfoDisplayActivity extends Activity implements } } + private int getResourceId() { + // Use regulatory_info by default. + int resId = getResources().getIdentifier( + REGULATORY_INFO_RESOURCE, "drawable", getPackageName()); + + // When hardware sku property exists, use regulatory_info_ resource if valid. + String sku = SystemProperties.get("ro.boot.hardware.sku", ""); + if (!TextUtils.isEmpty(sku)) { + String regulatory_info_res = REGULATORY_INFO_RESOURCE + "_" + sku.toLowerCase(); + int id = getResources().getIdentifier( + regulatory_info_res, "drawable", getPackageName()); + if (id != 0) { + resId = id; + } + } + return resId; + } + @Override public void onDismiss(DialogInterface dialog) { finish(); // close the activity diff --git a/src/com/android/settings/RestrictedSettingsFragment.java b/src/com/android/settings/RestrictedSettingsFragment.java new file mode 100644 index 00000000000..34eda1e6a3f --- /dev/null +++ b/src/com/android/settings/RestrictedSettingsFragment.java @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import java.util.HashSet; + +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.UserManager; +import android.preference.CheckBoxPreference; +import android.preference.Preference; + +/** + * Base class for settings activities that should be pin protected when in restricted mode. + * The constructor for this class will take the restriction key that this screen should be + * locked by. If {@link UserManager.hasRestrictionsPin()} and + * {@link UserManager.hasUserRestriction(String)} returns true for the restriction key, then + * the user will have to enter the restrictions pin before seeing the Settings screen. + * + * If this settings screen should be pin protected whenever + * {@link UserManager.hasUserRestriction(String)} returns true, pass in + * {@link RESTRICTIONS_PIN_SET} to the constructor instead of a restrictions key. + */ +public class RestrictedSettingsFragment extends SettingsPreferenceFragment { + + protected static final String RESTRICTIONS_PIN_SET = "restrictions_pin_set"; + + private static final String EXTRA_PREFERENCE = "pref"; + private static final String EXTRA_CHECKBOX_STATE = "isChecked"; + // Should be unique across all settings screens that use this. + private static final int REQUEST_PIN_CHALLENGE = 12309; + + private static final String KEY_CHALLENGE_SUCCEEDED = "chsc"; + private static final String KEY_CHALLENGE_REQUESTED = "chrq"; + private static final String KEY_RESUME_ACTION_BUNDLE = "rsmb"; + + // If the restriction PIN is entered correctly. + private boolean mChallengeSucceeded; + private boolean mChallengeRequested; + private Bundle mResumeActionBundle; + + private UserManager mUserManager; + + private final String mRestrictionKey; + + private final HashSet mProtectedByRestictionsPrefs = new HashSet(); + + // Receiver to clear pin status when the screen is turned off. + private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mChallengeSucceeded = false; + if (shouldBePinProtected(mRestrictionKey)) { + ensurePin(null); + } + } + }; + + /** + * @param restrictionKey The restriction key to check before pin protecting + * this settings page. Pass in {@link RESTRICTIONS_PIN_SET} if it should + * be PIN protected whenever a restrictions pin is set. Pass in + * null if it should never be PIN protected. + */ + public RestrictedSettingsFragment(String restrictionKey) { + mRestrictionKey = restrictionKey; + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + mUserManager = (UserManager) getSystemService(Context.USER_SERVICE); + + if (icicle != null) { + mChallengeSucceeded = icicle.getBoolean(KEY_CHALLENGE_SUCCEEDED, false); + mChallengeRequested = icicle.getBoolean(KEY_CHALLENGE_REQUESTED, false); + mResumeActionBundle = icicle.getBundle(KEY_RESUME_ACTION_BUNDLE); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putBoolean(KEY_CHALLENGE_REQUESTED, mChallengeRequested); + if (mResumeActionBundle != null) { + outState.putBundle(KEY_RESUME_ACTION_BUNDLE, mResumeActionBundle); + } + if (getActivity().isChangingConfigurations()) { + outState.putBoolean(KEY_CHALLENGE_SUCCEEDED, mChallengeSucceeded); + } + } + + @Override + public void onResume() { + super.onResume(); + if (shouldBePinProtected(mRestrictionKey)) { + ensurePin(null); + } else { + // If the whole screen is not pin protected, reset mChallengeSucceeded so next + // time user uses a protected preference, they are prompted for pin again. + mChallengeSucceeded = false; + } + IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); + filter.addAction(Intent.ACTION_USER_PRESENT); + getActivity().registerReceiver(mScreenOffReceiver, filter); + } + + @Override + public void onPause() { + super.onPause(); + getActivity().unregisterReceiver(mScreenOffReceiver); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_PIN_CHALLENGE) { + Bundle resumeActionBundle = mResumeActionBundle; + mResumeActionBundle = null; + mChallengeRequested = false; + if (resultCode == Activity.RESULT_OK) { + mChallengeSucceeded = true; + String prefKey = resumeActionBundle == null ? + null : resumeActionBundle.getString(EXTRA_PREFERENCE); + if (prefKey != null) { + Preference pref = findPreference(prefKey); + if (pref != null) { + // Make sure the checkbox state is the same as it was when we launched the + // pin challenge. + if (pref instanceof CheckBoxPreference + && resumeActionBundle.containsKey(EXTRA_CHECKBOX_STATE)) { + boolean isChecked = + resumeActionBundle.getBoolean(EXTRA_CHECKBOX_STATE, false); + ((CheckBoxPreference)pref).setChecked(isChecked); + } + if (!onPreferenceTreeClick(getPreferenceScreen(), pref)) { + Intent prefIntent = pref.getIntent(); + if (prefIntent != null) { + pref.getContext().startActivity(prefIntent); + } + } + } + } + } else if (!isDetached()) { + finishFragment(); + } + return; + } + + super.onActivityResult(requestCode, resultCode, data); + } + + private void ensurePin(Preference preference) { + if (!mChallengeSucceeded) { + final UserManager um = UserManager.get(getActivity()); + if (!mChallengeRequested) { + if (um.hasRestrictionsChallenge()) { + mResumeActionBundle = new Bundle(); + if (preference != null) { + mResumeActionBundle.putString(EXTRA_PREFERENCE, preference.getKey()); + if (preference instanceof CheckBoxPreference) { + mResumeActionBundle.putBoolean(EXTRA_CHECKBOX_STATE, + ((CheckBoxPreference)preference).isChecked()); + } + } + Intent requestPin = new Intent(Intent.ACTION_RESTRICTIONS_CHALLENGE); + startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE); + mChallengeRequested = true; + } + } + } + mChallengeSucceeded = false; + } + + /** + * Returns true if this activity is restricted, but no restriction pin has been set. + * Used to determine if the settings UI should disable UI. + */ + protected boolean isRestrictedAndNotPinProtected() { + if (mRestrictionKey == null || RESTRICTIONS_PIN_SET.equals(mRestrictionKey)) { + return false; + } + return mUserManager.hasUserRestriction(mRestrictionKey) + && !mUserManager.hasRestrictionsChallenge(); + } + + /** + * Called to trigger the pin entry if the given restriction key is locked down. + * @param restrictionsKey The restriction key or {@link RESTRICTIONS_PIN_SET} if + * pin entry should get triggered if there is a pin set. + */ + protected boolean restrictionsPinCheck(String restrictionsKey, Preference preference) { + if (shouldBePinProtected(restrictionsKey) && !mChallengeSucceeded) { + ensurePin(preference); + return false; + } else { + return true; + } + } + + protected boolean hasChallengeSucceeded() { + return mChallengeSucceeded; + } + + /** + * Returns true if this restrictions key is locked down. + */ + protected boolean shouldBePinProtected(String restrictionKey) { + if (restrictionKey == null) { + return false; + } + boolean restricted = RESTRICTIONS_PIN_SET.equals(restrictionKey) + || mUserManager.hasUserRestriction(restrictionKey); + return restricted && mUserManager.hasRestrictionsChallenge(); + } + + /** + * If the preference is one that was added by protectByRestrictions(), then it will + * prompt the user for the restrictions pin if they haven't entered it already. + * Intended to be called at the top of onPreferenceTreeClick. If this function returns + * true, then onPreferenceTreeClick should return true. + */ + boolean ensurePinRestrictedPreference(Preference preference) { + return mProtectedByRestictionsPrefs.contains(preference) + && !restrictionsPinCheck(RESTRICTIONS_PIN_SET, preference); + } + + /** + * Call this with any preferences that should require the PIN to be entered + * before they are accessible. + */ + protected void protectByRestrictions(Preference pref) { + if (pref != null) { + mProtectedByRestictionsPrefs.add(pref); + } + } + + protected void protectByRestrictions(String key) { + Preference pref = findPreference(key); + protectByRestrictions(pref); + } +} diff --git a/src/com/android/settings/RingerVolumePreference.java b/src/com/android/settings/RingerVolumePreference.java index 56393e0fc98..dd81ded0489 100644 --- a/src/com/android/settings/RingerVolumePreference.java +++ b/src/com/android/settings/RingerVolumePreference.java @@ -80,6 +80,13 @@ public class RingerVolumePreference extends VolumePreference { R.id.alarm_mute_button }; + private static final int[] SEEKBAR_SECTION_ID = new int[] { + R.id.media_section, + R.id.ringer_section, + R.id.notification_section, + R.id.alarm_section + }; + private static final int[] SEEKBAR_MUTED_RES_ID = new int[] { com.android.internal.R.drawable.ic_audio_vol_mute, com.android.internal.R.drawable.ic_audio_ring_notif_mute, @@ -198,15 +205,33 @@ public class RingerVolumePreference extends VolumePreference { getContext().registerReceiver(mRingModeChangedReceiver, filter); } - // Disable either ringer+notifications or notifications - int id; - if (!Utils.isVoiceCapable(getContext())) { - id = R.id.ringer_section; + boolean useMasterVolume = getContext().getResources(). + getBoolean(com.android.internal.R.bool.config_useMasterVolume); + if (useMasterVolume) { + // If config_useMasterVolume is true, all streams are treated as STREAM_MASTER. + // So hide all except a stream. + int id; + if (Utils.isVoiceCapable(getContext())) { + id = R.id.ringer_section; + } else { + id = R.id.media_section; + } + for (int i = 0; i < SEEKBAR_SECTION_ID.length; i++) { + if (SEEKBAR_SECTION_ID[i] != id) { + view.findViewById(SEEKBAR_SECTION_ID[i]).setVisibility(View.GONE); + } + } } else { - id = R.id.notification_section; + // Disable either ringer+notifications or notifications + int id; + if (!Utils.isVoiceCapable(getContext())) { + id = R.id.ringer_section; + } else { + id = R.id.notification_section; + } + View hideSection = view.findViewById(id); + hideSection.setVisibility(View.GONE); } - View hideSection = view.findViewById(id); - hideSection.setVisibility(View.GONE); } private Uri getMediaVolumeUri(Context context) { diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java index 948aded98ee..e0022649484 100644 --- a/src/com/android/settings/SecuritySettings.java +++ b/src/com/android/settings/SecuritySettings.java @@ -20,6 +20,7 @@ package com.android.settings; import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT; import android.app.Activity; +import android.app.ActivityManager; import android.app.AlertDialog; import android.app.admin.DevicePolicyManager; import android.content.Context; @@ -50,9 +51,8 @@ import java.util.List; /** * Gesture lock pattern settings. */ -public class SecuritySettings extends SettingsPreferenceFragment +public class SecuritySettings extends RestrictedSettingsFragment implements OnPreferenceChangeListener, DialogInterface.OnClickListener { - static final String TAG = "SecuritySettings"; // Lock Settings @@ -66,6 +66,8 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String KEY_DEVICE_ADMIN_CATEGORY = "device_admin_category"; private static final String KEY_LOCK_AFTER_TIMEOUT = "lock_after_timeout"; private static final String KEY_OWNER_INFO_SETTINGS = "owner_info_settings"; + private static final String KEY_ENABLE_WIDGETS = "keyguard_enable_widgets"; + private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123; private static final int CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_IMPROVE_REQUEST = 124; private static final int CONFIRM_EXISTING_FOR_BIOMETRIC_WEAK_LIVELINESS_OFF = 125; @@ -75,6 +77,7 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String KEY_SHOW_PASSWORD = "show_password"; private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type"; private static final String KEY_RESET_CREDENTIALS = "reset_credentials"; + private static final String KEY_CREDENTIALS_INSTALL = "credentials_install"; private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications"; private static final String KEY_TOGGLE_VERIFY_APPLICATIONS = "toggle_verify_applications"; private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks"; @@ -83,7 +86,7 @@ public class SecuritySettings extends SettingsPreferenceFragment private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive"; private PackageManager mPM; - DevicePolicyManager mDPM; + private DevicePolicyManager mDPM; private ChooseLockSettingsHelper mChooseLockSettingsHelper; private LockPatternUtils mLockPatternUtils; @@ -101,11 +104,16 @@ public class SecuritySettings extends SettingsPreferenceFragment private DialogInterface mWarnInstallApps; private CheckBoxPreference mToggleVerifyApps; private CheckBoxPreference mPowerButtonInstantlyLocks; + private CheckBoxPreference mEnableKeyguardWidgets; private Preference mNotificationAccess; private boolean mIsPrimary; + public SecuritySettings() { + super(null /* Don't ask for restrictions pin on creation. */); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -161,9 +169,6 @@ public class SecuritySettings extends SettingsPreferenceFragment // Add options for device encryption - DevicePolicyManager dpm = - (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); - mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER; if (!mIsPrimary) { @@ -179,7 +184,7 @@ public class SecuritySettings extends SettingsPreferenceFragment } if (mIsPrimary) { - switch (dpm.getStorageEncryptionStatus()) { + switch (mDPM.getStorageEncryptionStatus()) { case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE: // The device is currently encrypted. addPreferencesFromResource(R.xml.security_settings_encrypted); @@ -237,13 +242,38 @@ public class SecuritySettings extends SettingsPreferenceFragment } } + // Enable or disable keyguard widget checkbox based on DPM state + mEnableKeyguardWidgets = (CheckBoxPreference) root.findPreference(KEY_ENABLE_WIDGETS); + if (mEnableKeyguardWidgets != null) { + if (ActivityManager.isLowRamDeviceStatic()) { + // Widgets take a lot of RAM, so disable them on low-memory devices + PreferenceGroup securityCategory + = (PreferenceGroup) root.findPreference(KEY_SECURITY_CATEGORY); + if (securityCategory != null) { + securityCategory.removePreference(root.findPreference(KEY_ENABLE_WIDGETS)); + mEnableKeyguardWidgets = null; + } + } else { + final boolean disabled = (0 != (mDPM.getKeyguardDisabledFeatures(null) + & DevicePolicyManager.KEYGUARD_DISABLE_WIDGETS_ALL)); + if (disabled) { + mEnableKeyguardWidgets.setSummary( + R.string.security_enable_widgets_disabled_summary); + } else { + mEnableKeyguardWidgets.setSummary(""); + } + mEnableKeyguardWidgets.setEnabled(!disabled); + } + } + // Show password mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD); + mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS); // Credential storage final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); + mKeyStore = KeyStore.getInstance(); // needs to be initialized for onResume() if (!um.hasUserRestriction(UserManager.DISALLOW_CONFIG_CREDENTIALS)) { - mKeyStore = KeyStore.getInstance(); Preference credentialStorageType = root.findPreference(KEY_CREDENTIAL_STORAGE_TYPE); final int storageSummaryRes = @@ -251,7 +281,6 @@ public class SecuritySettings extends SettingsPreferenceFragment : R.string.credential_storage_type_software; credentialStorageType.setSummary(storageSummaryRes); - mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS); } else { removePreference(KEY_CREDENTIALS_MANAGER); } @@ -303,6 +332,12 @@ public class SecuritySettings extends SettingsPreferenceFragment } } + if (shouldBePinProtected(RESTRICTIONS_PIN_SET)) { + protectByRestrictions(mToggleAppInstallation); + protectByRestrictions(mToggleVerifyApps); + protectByRestrictions(mResetCredentials); + protectByRestrictions(root.findPreference(KEY_CREDENTIALS_INSTALL)); + } return root; } @@ -467,10 +502,17 @@ public class SecuritySettings extends SettingsPreferenceFragment if (mResetCredentials != null) { mResetCredentials.setEnabled(!mKeyStore.isEmpty()); } + + if (mEnableKeyguardWidgets != null) { + mEnableKeyguardWidgets.setChecked(lockPatternUtils.getWidgetsEnabled()); + } } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (ensurePinRestrictedPreference(preference)) { + return true; + } final String key = preference.getKey(); final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils(); @@ -514,6 +556,8 @@ public class SecuritySettings extends SettingsPreferenceFragment lockPatternUtils.setVisiblePatternEnabled(isToggled(preference)); } else if (KEY_POWER_INSTANTLY_LOCKS.equals(key)) { lockPatternUtils.setPowerButtonInstantlyLocks(isToggled(preference)); + } else if (KEY_ENABLE_WIDGETS.equals(key)) { + lockPatternUtils.setWidgetsEnabled(mEnableKeyguardWidgets.isChecked()); } else if (preference == mShowPassword) { Settings.System.putInt(getContentResolver(), Settings.System.TEXT_SHOW_PASSWORD, mShowPassword.isChecked() ? 1 : 0); diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 02769e10f87..e93fa186130 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -19,15 +19,23 @@ package com.android.settings; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.OnAccountsUpdateListener; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.admin.DevicePolicyManager; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.RestrictionEntry; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; +import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.INetworkManagementService; import android.os.RemoteException; @@ -45,19 +53,42 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.Switch; import android.widget.TextView; import com.android.internal.util.ArrayUtils; -import com.android.settings.AccessibilitySettings.ToggleAccessibilityServicePreferenceFragment; +import com.android.settings.accessibility.AccessibilitySettings; +import com.android.settings.accessibility.ToggleAccessibilityServicePreferenceFragment; +import com.android.settings.accessibility.ToggleCaptioningPreferenceFragment; import com.android.settings.accounts.AccountSyncSettings; import com.android.settings.accounts.AuthenticatorHelper; import com.android.settings.accounts.ManageAccountsSettings; +import com.android.settings.applications.AppOpsSummary; +import com.android.settings.applications.ManageApplications; +import com.android.settings.applications.ProcessStatsUi; import com.android.settings.bluetooth.BluetoothEnabler; import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.deviceinfo.Memory; +import com.android.settings.deviceinfo.UsbSettings; +import com.android.settings.fuelgauge.PowerUsageSummary; +import com.android.settings.inputmethod.InputMethodAndLanguageSettings; +import com.android.settings.inputmethod.KeyboardLayoutPickerFragment; +import com.android.settings.inputmethod.SpellCheckersSettings; +import com.android.settings.inputmethod.UserDictionaryList; +import com.android.settings.location.LocationSettings; +import com.android.settings.nfc.AndroidBeam; +import com.android.settings.nfc.PaymentSettings; +import com.android.settings.print.PrintJobSettingsFragment; +import com.android.settings.print.PrintServiceSettingsFragment; +import com.android.settings.print.PrintSettingsFragment; +import com.android.settings.tts.TextToSpeechSettings; +import com.android.settings.users.UserSettings; +import com.android.settings.vpn2.VpnSettings; import com.android.settings.wfd.WifiDisplaySettings; +import com.android.settings.wifi.AdvancedWifiSettings; import com.android.settings.wifi.WifiEnabler; import com.android.settings.wifi.WifiSettings; import com.android.settings.wifi.p2p.WifiP2pSettings; @@ -90,6 +121,10 @@ public class Settings extends PreferenceActivity private static final String SAVE_KEY_CURRENT_HEADER = "com.android.settings.CURRENT_HEADER"; private static final String SAVE_KEY_PARENT_HEADER = "com.android.settings.PARENT_HEADER"; + static final int DIALOG_ONLY_ONE_HOME = 1; + + private static boolean sShowNoHomeNotice = false; + private String mFragmentClass; private int mTopLevelHeaderId; private Header mFirstHeader; @@ -120,7 +155,10 @@ public class Settings extends PreferenceActivity R.id.system_section, R.id.date_time_settings, R.id.about_settings, - R.id.accessibility_settings + R.id.accessibility_settings, + R.id.print_settings, + R.id.nfc_payment_settings, + R.id.home_settings }; private SharedPreferences mDevelopmentPreferences; @@ -134,6 +172,23 @@ public class Settings extends PreferenceActivity private Header mLastHeader; private boolean mListeningToAccountUpdates; + private boolean mBatteryPresent = true; + private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { + boolean batteryPresent = Utils.isBatteryPresent(intent); + + if (mBatteryPresent != batteryPresent) { + mBatteryPresent = batteryPresent; + invalidateHeaders(); + } + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { if (getIntent().hasExtra(EXTRA_UI_OPTIONS)) { @@ -218,12 +273,16 @@ public class Settings extends PreferenceActivity ((HeaderAdapter) listAdapter).resume(); } invalidateHeaders(); + + registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } @Override public void onPause() { super.onPause(); + unregisterReceiver(mBatteryInfoReceiver); + ListAdapter listAdapter = getListAdapter(); if (listAdapter instanceof HeaderAdapter) { ((HeaderAdapter) listAdapter).pause(); @@ -242,6 +301,69 @@ public class Settings extends PreferenceActivity } } + @Override + public boolean onIsMultiPane() { + return false; + } + + private static final String[] ENTRY_FRAGMENTS = { + WirelessSettings.class.getName(), + WifiSettings.class.getName(), + AdvancedWifiSettings.class.getName(), + BluetoothSettings.class.getName(), + TetherSettings.class.getName(), + WifiP2pSettings.class.getName(), + VpnSettings.class.getName(), + DateTimeSettings.class.getName(), + LocalePicker.class.getName(), + InputMethodAndLanguageSettings.class.getName(), + SpellCheckersSettings.class.getName(), + UserDictionaryList.class.getName(), + UserDictionarySettings.class.getName(), + SoundSettings.class.getName(), + DisplaySettings.class.getName(), + DeviceInfoSettings.class.getName(), + ManageApplications.class.getName(), + ProcessStatsUi.class.getName(), + NotificationStation.class.getName(), + AppOpsSummary.class.getName(), + LocationSettings.class.getName(), + SecuritySettings.class.getName(), + PrivacySettings.class.getName(), + DeviceAdminSettings.class.getName(), + AccessibilitySettings.class.getName(), + ToggleCaptioningPreferenceFragment.class.getName(), + TextToSpeechSettings.class.getName(), + Memory.class.getName(), + DevelopmentSettings.class.getName(), + UsbSettings.class.getName(), + AndroidBeam.class.getName(), + WifiDisplaySettings.class.getName(), + PowerUsageSummary.class.getName(), + AccountSyncSettings.class.getName(), + CryptKeeperSettings.class.getName(), + DataUsageSummary.class.getName(), + DreamSettings.class.getName(), + UserSettings.class.getName(), + NotificationAccessSettings.class.getName(), + ManageAccountsSettings.class.getName(), + PrintSettingsFragment.class.getName(), + PrintJobSettingsFragment.class.getName(), + TrustedCredentialsSettings.class.getName(), + PaymentSettings.class.getName(), + KeyboardLayoutPickerFragment.class.getName() + }; + + @Override + protected boolean isValidFragment(String fragmentName) { + // Almost all fragments are wrapped in this, + // except for a few that have their own activities. + for (int i = 0; i < ENTRY_FRAGMENTS.length; i++) { + if (ENTRY_FRAGMENTS[i].equals(fragmentName)) return true; + } + return false; + } + private void switchToHeaderLocal(Header header) { mInLocalHeaderSwitch = true; switchToHeader(header); @@ -387,7 +509,10 @@ public class Settings extends PreferenceActivity WifiDisplaySettings.class.getName().equals(fragmentName) || BluetoothSettings.class.getName().equals(fragmentName) || DreamSettings.class.getName().equals(fragmentName) || - ToggleAccessibilityServicePreferenceFragment.class.getName().equals(fragmentName)) { + LocationSettings.class.getName().equals(fragmentName) || + ToggleAccessibilityServicePreferenceFragment.class.getName().equals(fragmentName) || + PrintSettingsFragment.class.getName().equals(fragmentName) || + PrintServiceSettingsFragment.class.getName().equals(fragmentName)) { intent.putExtra(EXTRA_UI_OPTIONS, ActivityInfo.UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW); } @@ -400,8 +525,10 @@ public class Settings extends PreferenceActivity */ @Override public void onBuildHeaders(List
    headers) { - loadHeadersFromResource(R.xml.settings_headers, headers); - updateHeaderList(headers); + if (!onIsHidingHeaders()) { + loadHeadersFromResource(R.xml.settings_headers, headers); + updateHeaderList(headers); + } } private void updateHeaderList(List
    target) { @@ -439,15 +566,36 @@ public class Settings extends PreferenceActivity } catch (RemoteException e) { // ignored } + } else if (id == R.id.battery_settings) { + // Remove battery settings when battery is not available. (e.g. TV) + + if (!mBatteryPresent) { + target.remove(i); + } } else if (id == R.id.account_settings) { int headerIndex = i + 1; i = insertAccountsHeaders(target, headerIndex); + } else if (id == R.id.home_settings) { + if (!updateHomeSettingHeaders(header)) { + target.remove(i); + } } else if (id == R.id.user_settings) { if (!UserHandle.MU_ENABLED || !UserManager.supportsMultipleUsers() || Utils.isMonkeyRunning()) { target.remove(i); } + } else if (id == R.id.nfc_payment_settings) { + if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)) { + target.remove(i); + } else { + // Only show if NFC is on and we have the HCE feature + NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); + if (!adapter.isEnabled() || !getPackageManager().hasSystemFeature( + PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)) { + target.remove(i); + } + } } else if (id == R.id.development_settings) { if (!showDev) { target.remove(i); @@ -518,6 +666,7 @@ public class Settings extends PreferenceActivity } } accountHeaders.add(accHeader); + mAuthenticatorHelper.preloadDrawableForType(this, accountType); } // Sort by label @@ -538,6 +687,44 @@ public class Settings extends PreferenceActivity return headerIndex; } + private boolean updateHomeSettingHeaders(Header header) { + // Once we decide to show Home settings, keep showing it forever + SharedPreferences sp = getSharedPreferences(HomeSettings.HOME_PREFS, Context.MODE_PRIVATE); + if (sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false)) { + return true; + } + + try { + final ArrayList homeApps = new ArrayList(); + getPackageManager().getHomeActivities(homeApps); + if (homeApps.size() < 2) { + // When there's only one available home app, omit this settings + // category entirely at the top level UI. If the user just + // uninstalled the penultimate home app candidiate, we also + // now tell them about why they aren't seeing 'Home' in the list. + if (sShowNoHomeNotice) { + sShowNoHomeNotice = false; + NoHomeDialogFragment.show(this); + } + return false; + } else { + // Okay, we're allowing the Home settings category. Tell it, when + // invoked via this front door, that we'll need to be told about the + // case when the user uninstalls all but one home app. + if (header.fragmentArguments == null) { + header.fragmentArguments = new Bundle(); + } + header.fragmentArguments.putBoolean(HomeSettings.HOME_SHOW_NOTICE, true); + } + } catch (Exception e) { + // Can't look up the home activity; bail on configuring the icon + Log.w(LOG_TAG, "Problem looking up home activity!", e); + } + + sp.edit().putBoolean(HomeSettings.HOME_PREFS_DO_SHOW, true).apply(); + return true; + } + private void getMetaData() { try { ActivityInfo ai = getPackageManager().getActivityInfo(getComponentName(), @@ -571,21 +758,40 @@ public class Settings extends PreferenceActivity return super.getNextButton(); } + public static class NoHomeDialogFragment extends DialogFragment { + public static void show(Activity parent) { + final NoHomeDialogFragment dialog = new NoHomeDialogFragment(); + dialog.show(parent.getFragmentManager(), null); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new AlertDialog.Builder(getActivity()) + .setMessage(R.string.only_one_home_message) + .setPositiveButton(android.R.string.ok, null) + .create(); + } + } + private static class HeaderAdapter extends ArrayAdapter
    { static final int HEADER_TYPE_CATEGORY = 0; static final int HEADER_TYPE_NORMAL = 1; static final int HEADER_TYPE_SWITCH = 2; - private static final int HEADER_TYPE_COUNT = HEADER_TYPE_SWITCH + 1; + static final int HEADER_TYPE_BUTTON = 3; + private static final int HEADER_TYPE_COUNT = HEADER_TYPE_BUTTON + 1; private final WifiEnabler mWifiEnabler; private final BluetoothEnabler mBluetoothEnabler; private AuthenticatorHelper mAuthHelper; + private DevicePolicyManager mDevicePolicyManager; private static class HeaderViewHolder { ImageView icon; TextView title; TextView summary; Switch switch_; + ImageButton button_; + View divider_; } private LayoutInflater mInflater; @@ -595,6 +801,8 @@ public class Settings extends PreferenceActivity return HEADER_TYPE_CATEGORY; } else if (header.id == R.id.wifi_settings || header.id == R.id.bluetooth_settings) { return HEADER_TYPE_SWITCH; + } else if (header.id == R.id.security_settings) { + return HEADER_TYPE_BUTTON; } else { return HEADER_TYPE_NORMAL; } @@ -627,7 +835,7 @@ public class Settings extends PreferenceActivity } public HeaderAdapter(Context context, List
    objects, - AuthenticatorHelper authenticatorHelper) { + AuthenticatorHelper authenticatorHelper, DevicePolicyManager dpm) { super(context, 0, objects); mAuthHelper = authenticatorHelper; @@ -637,6 +845,7 @@ public class Settings extends PreferenceActivity // Switches inflated from their layouts. Must be done before adapter is set in super mWifiEnabler = new WifiEnabler(context, new Switch(context)); mBluetoothEnabler = new BluetoothEnabler(context, new Switch(context)); + mDevicePolicyManager = dpm; } @Override @@ -666,6 +875,18 @@ public class Settings extends PreferenceActivity holder.switch_ = (Switch) view.findViewById(R.id.switchWidget); break; + case HEADER_TYPE_BUTTON: + view = mInflater.inflate(R.layout.preference_header_button_item, parent, + false); + holder.icon = (ImageView) view.findViewById(R.id.icon); + holder.title = (TextView) + view.findViewById(com.android.internal.R.id.title); + holder.summary = (TextView) + view.findViewById(com.android.internal.R.id.summary); + holder.button_ = (ImageButton) view.findViewById(R.id.buttonWidget); + holder.divider_ = view.findViewById(R.id.divider); + break; + case HEADER_TYPE_NORMAL: view = mInflater.inflate( R.layout.preference_header_item, parent, @@ -696,38 +917,75 @@ public class Settings extends PreferenceActivity } else { mBluetoothEnabler.setSwitch(holder.switch_); } - // No break, fall through on purpose to update common fields + updateCommonHeaderView(header, holder); + break; + + case HEADER_TYPE_BUTTON: + if (header.id == R.id.security_settings) { + boolean hasCert = DevicePolicyManager.hasAnyCaCertsInstalled(); + if (hasCert) { + holder.button_.setVisibility(View.VISIBLE); + holder.divider_.setVisibility(View.VISIBLE); + boolean isManaged = mDevicePolicyManager.getDeviceOwner() != null; + if (isManaged) { + holder.button_.setImageResource(R.drawable.ic_settings_about); + } else { + holder.button_.setImageResource( + android.R.drawable.stat_notify_error); + } + holder.button_.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent( + android.provider.Settings.ACTION_MONITORING_CERT_INFO); + getContext().startActivity(intent); + } + }); + } else { + holder.button_.setVisibility(View.GONE); + holder.divider_.setVisibility(View.GONE); + } + } + updateCommonHeaderView(header, holder); + break; - //$FALL-THROUGH$ case HEADER_TYPE_NORMAL: - if (header.extras != null - && header.extras.containsKey(ManageAccountsSettings.KEY_ACCOUNT_TYPE)) { - String accType = header.extras.getString( - ManageAccountsSettings.KEY_ACCOUNT_TYPE); - ViewGroup.LayoutParams lp = holder.icon.getLayoutParams(); - lp.width = getContext().getResources().getDimensionPixelSize( - R.dimen.header_icon_width); - lp.height = lp.width; - holder.icon.setLayoutParams(lp); - Drawable icon = mAuthHelper.getDrawableForType(getContext(), accType); - holder.icon.setImageDrawable(icon); - } else { - holder.icon.setImageResource(header.iconRes); - } - holder.title.setText(header.getTitle(getContext().getResources())); - CharSequence summary = header.getSummary(getContext().getResources()); - if (!TextUtils.isEmpty(summary)) { - holder.summary.setVisibility(View.VISIBLE); - holder.summary.setText(summary); - } else { - holder.summary.setVisibility(View.GONE); - } + updateCommonHeaderView(header, holder); break; } return view; } + private void updateCommonHeaderView(Header header, HeaderViewHolder holder) { + if (header.extras != null + && header.extras.containsKey(ManageAccountsSettings.KEY_ACCOUNT_TYPE)) { + String accType = header.extras.getString( + ManageAccountsSettings.KEY_ACCOUNT_TYPE); + Drawable icon = mAuthHelper.getDrawableForType(getContext(), accType); + setHeaderIcon(holder, icon); + } else { + holder.icon.setImageResource(header.iconRes); + } + holder.title.setText(header.getTitle(getContext().getResources())); + CharSequence summary = header.getSummary(getContext().getResources()); + if (!TextUtils.isEmpty(summary)) { + holder.summary.setVisibility(View.VISIBLE); + holder.summary.setText(summary); + } else { + holder.summary.setVisibility(View.GONE); + } + } + + private void setHeaderIcon(HeaderViewHolder holder, Drawable icon) { + ViewGroup.LayoutParams lp = holder.icon.getLayoutParams(); + lp.width = getContext().getResources().getDimensionPixelSize( + R.dimen.header_icon_width); + lp.height = lp.width; + holder.icon.setLayoutParams(lp); + holder.icon.setImageDrawable(icon); + } + public void resume() { mWifiEnabler.resume(); mBluetoothEnabler.resume(); @@ -784,7 +1042,9 @@ public class Settings extends PreferenceActivity if (adapter == null) { super.setListAdapter(null); } else { - super.setListAdapter(new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper)); + DevicePolicyManager dpm = + (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); + super.setListAdapter(new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper, dpm)); } } @@ -796,6 +1056,10 @@ public class Settings extends PreferenceActivity invalidateHeaders(); } + public static void requestHomeNotice() { + sShowNoHomeNotice = true; + } + /* * Settings subclasses for launching independently. */ @@ -822,6 +1086,7 @@ public class Settings extends PreferenceActivity public static class StorageUseActivity extends Settings { /* empty */ } public static class DevelopmentSettingsActivity extends Settings { /* empty */ } public static class AccessibilitySettingsActivity extends Settings { /* empty */ } + public static class CaptioningSettingsActivity extends Settings { /* empty */ } public static class SecuritySettingsActivity extends Settings { /* empty */ } public static class LocationSettingsActivity extends Settings { /* empty */ } public static class PrivacySettingsActivity extends Settings { /* empty */ } @@ -841,4 +1106,9 @@ public class Settings extends PreferenceActivity public static class NotificationStationActivity extends Settings { /* empty */ } public static class UserSettingsActivity extends Settings { /* empty */ } public static class NotificationAccessSettingsActivity extends Settings { /* empty */ } + public static class UsbSettingsActivity extends Settings { /* empty */ } + public static class TrustedCredentialsSettingsActivity extends Settings { /* empty */ } + public static class PaymentSettingsActivity extends Settings { /* empty */ } + public static class PrintSettingsActivity extends Settings { /* empty */ } + public static class PrintJobSettingsActivity extends Settings { /* empty */ } } diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 60765a99da0..0a382b57892 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -241,7 +241,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di mParentFragment = getFragmentManager().findFragmentById(mParentFragmentId); if (!(mParentFragment instanceof DialogCreatable)) { throw new IllegalArgumentException( - (mParentFragment != null + (mParentFragment != null ? mParentFragment.getClass().getName() : mParentFragmentId) + " must implement " diff --git a/src/com/android/settings/SmsDefaultDialog.java b/src/com/android/settings/SmsDefaultDialog.java new file mode 100644 index 00000000000..d9a6c5f3790 --- /dev/null +++ b/src/com/android/settings/SmsDefaultDialog.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +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.os.Bundle; +import android.provider.Telephony.Sms.Intents; +import android.telephony.TelephonyManager; + +import com.android.internal.app.AlertActivity; +import com.android.internal.app.AlertController; +import com.android.internal.telephony.SmsApplication; +import com.android.internal.telephony.SmsApplication.SmsApplicationData; +import com.android.settings.R; + +public final class SmsDefaultDialog extends AlertActivity implements + DialogInterface.OnClickListener { + private ComponentName mNewDefault; + private SmsApplicationData mNewSmsApplicationData; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + String packageName = intent.getStringExtra(Intents.EXTRA_PACKAGE_NAME); + + setResult(RESULT_CANCELED); + if (!buildDialog(packageName)) { + finish(); + } + } + + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case BUTTON_POSITIVE: + SmsApplication.setDefaultApplication(mNewSmsApplicationData.mPackageName, this); + setResult(RESULT_OK); + break; + case BUTTON_NEGATIVE: + break; + } + } + + private boolean buildDialog(String packageName) { + TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); + if (tm.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) { + // No phone, no SMS + return false; + } + + mNewSmsApplicationData = SmsApplication.getSmsApplicationData(packageName, this); + if (mNewSmsApplicationData == null) { + return false; + } + + SmsApplicationData oldSmsApplicationData = null; + ComponentName oldSmsComponent = SmsApplication.getDefaultSmsApplication(this, true); + if (oldSmsComponent != null) { + oldSmsApplicationData = + SmsApplication.getSmsApplicationData(oldSmsComponent.getPackageName(), this); + if (oldSmsApplicationData.mPackageName.equals(mNewSmsApplicationData.mPackageName)) { + return false; + } + } + + // Compose dialog; get + final AlertController.AlertParams p = mAlertParams; + p.mTitle = getString(R.string.sms_change_default_dialog_title); + if (oldSmsApplicationData != null) { + p.mMessage = getString(R.string.sms_change_default_dialog_text, + mNewSmsApplicationData.mApplicationName, + oldSmsApplicationData.mApplicationName); + } else { + p.mMessage = getString(R.string.sms_change_default_no_previous_dialog_text, + mNewSmsApplicationData.mApplicationName); + } + p.mPositiveButtonText = getString(R.string.yes); + p.mNegativeButtonText = getString(R.string.no); + p.mPositiveButtonListener = this; + p.mNegativeButtonListener = this; + setupAlert(); + + return true; + } +} \ No newline at end of file diff --git a/src/com/android/settings/SmsListPreference.java b/src/com/android/settings/SmsListPreference.java new file mode 100644 index 00000000000..15df776c1d2 --- /dev/null +++ b/src/com/android/settings/SmsListPreference.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import android.app.Activity; +import android.app.AlertDialog.Builder; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.preference.ListPreference; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckedTextView; +import android.widget.ImageView; +import android.widget.ListAdapter; + +/** + * Extends ListPreference to allow us to show the icons for the available SMS applications. We do + * this because the names of SMS applications are very similar and the user may not be able to + * determine what app they are selecting without an icon. + */ +public class SmsListPreference extends ListPreference { + private Drawable[] mEntryDrawables; + + public class SmsArrayAdapter extends ArrayAdapter { + private Drawable[] mImageDrawables = null; + private int mSelectedIndex = 0; + + public SmsArrayAdapter(Context context, int textViewResourceId, + CharSequence[] objects, Drawable[] imageDrawables, int selectedIndex) { + super(context, textViewResourceId, objects); + mSelectedIndex = selectedIndex; + mImageDrawables = imageDrawables; + } + + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater(); + View view = inflater.inflate(R.layout.sms_preference_item, parent, false); + CheckedTextView checkedTextView = (CheckedTextView)view.findViewById(R.id.sms_text); + checkedTextView.setText(getItem(position)); + if (position == mSelectedIndex) { + checkedTextView.setChecked(true); + } + ImageView imageView = (ImageView)view.findViewById(R.id.sms_image); + imageView.setImageDrawable(mImageDrawables[position]); + return view; + } + } + + public SmsListPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setEntryDrawables(Drawable[] entries) { + mEntryDrawables = entries; + } + + public Drawable[] getEntryDrawables() { + return mEntryDrawables; + } + + @Override + protected void onPrepareDialogBuilder(Builder builder) { + int selectedIndex = findIndexOfValue(getValue()); + ListAdapter adapter = new SmsArrayAdapter(getContext(), + R.layout.sms_preference_item, getEntries(), mEntryDrawables, selectedIndex); + builder.setAdapter(adapter, this); + super.onPrepareDialogBuilder(builder); + } +} \ No newline at end of file diff --git a/src/com/android/settings/SubSettings.java b/src/com/android/settings/SubSettings.java index eb275ad6e83..34e9ba3a707 100644 --- a/src/com/android/settings/SubSettings.java +++ b/src/com/android/settings/SubSettings.java @@ -16,6 +16,11 @@ package com.android.settings; +import android.app.Fragment; +import android.util.Log; + +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; + /** * Stub class for showing sub-settings; we can't use the main Settings class * since for our app it is a special singleTask class. @@ -27,4 +32,10 @@ public class SubSettings extends Settings { finish(); return true; } + + @Override + protected boolean isValidFragment(String fragmentName) { + Log.d("SubSettings", "Launching fragment " + fragmentName); + return true; + } } diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index 4775b174072..4e0933d534a 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -38,6 +38,8 @@ import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Environment; import android.os.SystemProperties; +import android.os.UserHandle; +import android.os.UserManager; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceScreen; @@ -592,4 +594,17 @@ public class TetherSettings extends SettingsPreferenceFragment public int getHelpResource() { return R.string.help_url_tether; } + + /** + * Checks whether this screen will have anything to show on this device. This is called by + * the shortcut picker for Settings shortcuts (home screen widget). + * @param context a context object for getting a system service. + * @return whether Tether & portable hotspot should be shown in the shortcuts picker. + */ + public static boolean showInShortcuts(Context context) { + final ConnectivityManager cm = + (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); + final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER; + return !isSecondaryUser && cm.isTetheringSupported(); + } } diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java index cdfe7cd303a..cdb96cbbc5a 100644 --- a/src/com/android/settings/TrustedCredentialsSettings.java +++ b/src/com/android/settings/TrustedCredentialsSettings.java @@ -16,14 +16,18 @@ package com.android.settings; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; +import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.net.http.SslCertificate; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; +import android.os.UserManager; import android.security.IKeyChainService; import android.security.KeyChain; import android.security.KeyChain.KeyChainConnection; @@ -52,6 +56,16 @@ public class TrustedCredentialsSettings extends Fragment { private static final String TAG = "TrustedCredentialsSettings"; + private UserManager mUserManager; + + private static final String USER_ACTION = "com.android.settings.TRUSTED_CREDENTIALS_USER"; + + private static final int REQUEST_PIN_CHALLENGE = 12309; + // If the restriction PIN is entered correctly. + private boolean mChallengeSucceeded; + private boolean mChallengeRequested; + + private enum Tab { SYSTEM("system", R.string.trusted_credentials_system_tab, @@ -142,6 +156,13 @@ public class TrustedCredentialsSettings extends Fragment { private TabHost mTabHost; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); + } + + @Override public View onCreateView( LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { mTabHost = (TabHost) inflater.inflate(R.layout.trusted_credentials, parent, false); @@ -149,6 +170,10 @@ public class TrustedCredentialsSettings extends Fragment { addTab(Tab.SYSTEM); // TODO add Install button on Tab.USER to go to CertInstaller like KeyChainActivity addTab(Tab.USER); + if (getActivity().getIntent() != null && + USER_ACTION.equals(getActivity().getIntent().getAction())) { + mTabHost.setCurrentTabByTag(Tab.USER.mTag); + } return mTabHost; } @@ -355,6 +380,11 @@ public class TrustedCredentialsSettings extends Fragment { removeButton.setText(certHolder.mTab.getButtonLabel(certHolder)); removeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { + if (mUserManager.hasRestrictionsChallenge() && !mChallengeSucceeded) { + ensurePin(); + return; + } + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(certHolder.mTab.getButtonConfirmation(certHolder)); builder.setPositiveButton( @@ -379,6 +409,35 @@ public class TrustedCredentialsSettings extends Fragment { certDialog.show(); } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_PIN_CHALLENGE) { + mChallengeRequested = false; + if (resultCode == Activity.RESULT_OK) { + mChallengeSucceeded = true; + } + return; + } + + super.onActivityResult(requestCode, resultCode, data); + } + + private void ensurePin() { + if (!mChallengeSucceeded) { + final UserManager um = UserManager.get(getActivity()); + if (!mChallengeRequested) { + if (um.hasRestrictionsChallenge()) { + Intent requestPin = + new Intent(Intent.ACTION_RESTRICTIONS_CHALLENGE); + startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE); + mChallengeRequested = true; + } + } + } + mChallengeSucceeded = false; + } + + private class AliasOperation extends AsyncTask { private final CertHolder mCertHolder; private AliasOperation(CertHolder certHolder) { diff --git a/src/com/android/settings/UserDictionarySettings.java b/src/com/android/settings/UserDictionarySettings.java index b561ed46684..da120048d5a 100644 --- a/src/com/android/settings/UserDictionarySettings.java +++ b/src/com/android/settings/UserDictionarySettings.java @@ -16,38 +16,30 @@ package com.android.settings; -import android.app.Activity; -import android.app.AlertDialog; -import android.app.Dialog; +import com.android.settings.inputmethod.UserDictionaryAddWordContents; +import com.android.settings.inputmethod.UserDictionarySettingsUtils; + import android.app.ListFragment; import android.content.ContentResolver; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.provider.UserDictionary; -import android.text.InputType; import android.text.TextUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; import android.widget.AlphabetIndexer; -import android.widget.EditText; -import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SectionIndexer; import android.widget.SimpleCursorAdapter; import android.widget.TextView; -import com.android.settings.inputmethod.UserDictionaryAddWordContents; - import java.util.Locale; public class UserDictionarySettings extends ListFragment { @@ -82,6 +74,7 @@ public class UserDictionarySettings extends ListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getActivity().getActionBar().setTitle(R.string.user_dict_settings_title); } @Override @@ -123,7 +116,9 @@ public class UserDictionarySettings extends ListFragment { listView.setEmptyView(emptyView); setHasOptionsMenu(true); - + // Show the language as a subtitle of the action bar + getActivity().getActionBar().setSubtitle( + UserDictionarySettingsUtils.getLocaleDisplayName(getActivity(), mLocale)); } private Cursor createCursor(final String locale) { @@ -170,7 +165,7 @@ public class UserDictionarySettings extends ListFragment { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem actionItem = menu.add(0, OPTIONS_MENU_ADD, 0, R.string.user_dict_settings_add_menu_title) - .setIcon(R.drawable.ic_menu_add); + .setIcon(R.drawable.ic_menu_add_dark); actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); } @@ -241,8 +236,9 @@ public class UserDictionarySettings extends ListFragment { private AlphabetIndexer mIndexer; - private ViewBinder mViewBinder = new ViewBinder() { + private final ViewBinder mViewBinder = new ViewBinder() { + @Override public boolean setViewValue(View v, Cursor c, int columnIndex) { if (columnIndex == INDEX_SHORTCUT) { final String shortcut = c.getString(INDEX_SHORTCUT); @@ -273,14 +269,17 @@ public class UserDictionarySettings extends ListFragment { setViewBinder(mViewBinder); } + @Override public int getPositionForSection(int section) { return null == mIndexer ? 0 : mIndexer.getPositionForSection(section); } + @Override public int getSectionForPosition(int position) { return null == mIndexer ? 0 : mIndexer.getSectionForPosition(position); } + @Override public Object[] getSections() { return null == mIndexer ? null : mIndexer.getSections(); } diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java index f031f0a0345..a8d0e8f5a16 100644 --- a/src/com/android/settings/Utils.java +++ b/src/com/android/settings/Utils.java @@ -330,7 +330,7 @@ public class Utils { /** * Returns the WIFI IP Addresses, if any, taking into account IPv4 and IPv6 style addresses. * @param context the application context - * @return the formatted and comma-separated IP addresses, or null if none. + * @return the formatted and newline-separated IP addresses, or null if none. */ public static String getWifiIpAddresses(Context context) { ConnectivityManager cm = (ConnectivityManager) @@ -343,7 +343,7 @@ public class Utils { * Returns the default link's IP addresses, if any, taking into account IPv4 and IPv6 style * addresses. * @param context the application context - * @return the formatted and comma-separated IP addresses, or null if none. + * @return the formatted and newline-separated IP addresses, or null if none. */ public static String getDefaultIpAddresses(Context context) { ConnectivityManager cm = (ConnectivityManager) @@ -354,14 +354,14 @@ public class Utils { private static String formatIpAddresses(LinkProperties prop) { if (prop == null) return null; - Iterator iter = prop.getAddresses().iterator(); + Iterator iter = prop.getAllAddresses().iterator(); // If there are no entries, return null if (!iter.hasNext()) return null; // Concatenate all available addresses, comma separated String addresses = ""; while (iter.hasNext()) { addresses += iter.next().getHostAddress(); - if (iter.hasNext()) addresses += ", "; + if (iter.hasNext()) addresses += "\n"; } return addresses; } @@ -386,17 +386,22 @@ public class Utils { } } + public static boolean isBatteryPresent(Intent batteryChangedIntent) { + return batteryChangedIntent.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true); + } + public static String getBatteryPercentage(Intent batteryChangedIntent) { - int level = batteryChangedIntent.getIntExtra("level", 0); - int scale = batteryChangedIntent.getIntExtra("scale", 100); + int level = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); + int scale = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); return String.valueOf(level * 100 / scale) + "%"; } public static String getBatteryStatus(Resources res, Intent batteryChangedIntent) { final Intent intent = batteryChangedIntent; - int plugType = intent.getIntExtra("plugged", 0); - int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN); + int plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); + int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, + BatteryManager.BATTERY_STATUS_UNKNOWN); String statusString; if (status == BatteryManager.BATTERY_STATUS_CHARGING) { statusString = res.getString(R.string.battery_info_status_charging); @@ -443,8 +448,7 @@ public class Utils { ((PreferenceFrameLayout.LayoutParams) child.getLayoutParams()).removeBorders = true; final Resources res = list.getResources(); - final int paddingSide = res.getDimensionPixelSize( - com.android.internal.R.dimen.preference_fragment_padding_side); + final int paddingSide = res.getDimensionPixelSize(R.dimen.settings_side_margin); final int paddingBottom = res.getDimensionPixelSize( com.android.internal.R.dimen.preference_fragment_padding_bottom); diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java index 8124b3b8e5c..6724cc129a6 100644 --- a/src/com/android/settings/WirelessSettings.java +++ b/src/com/android/settings/WirelessSettings.java @@ -16,35 +16,44 @@ package com.android.settings; + import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.admin.DevicePolicyManager; +import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; -import android.net.Uri; import android.nfc.NfcAdapter; import android.os.Bundle; import android.os.SystemProperties; import android.os.UserHandle; import android.preference.CheckBoxPreference; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceScreen; import android.provider.Settings; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Log; + +import com.android.internal.telephony.SmsApplication; +import com.android.internal.telephony.SmsApplication.SmsApplicationData; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyProperties; import com.android.settings.nfc.NfcEnabler; -import com.android.settings.NsdEnabler; -public class WirelessSettings extends SettingsPreferenceFragment { +import java.util.Collection; + +public class WirelessSettings extends RestrictedSettingsFragment + implements OnPreferenceChangeListener { private static final String TAG = "WirelessSettings"; private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane"; @@ -56,6 +65,7 @@ public class WirelessSettings extends SettingsPreferenceFragment { private static final String KEY_PROXY_SETTINGS = "proxy_settings"; private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings"; private static final String KEY_MANAGE_MOBILE_PLAN = "manage_mobile_plan"; + private static final String KEY_SMS_APPLICATION = "sms_application"; private static final String KEY_TOGGLE_NSD = "toggle_nsd"; //network service discovery private static final String KEY_CELL_BROADCAST_SETTINGS = "cell_broadcast_settings"; @@ -74,6 +84,11 @@ public class WirelessSettings extends SettingsPreferenceFragment { private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1; private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage"; + private SmsListPreference mSmsApplicationPreference; + + public WirelessSettings() { + super(null); + } /** * Invoked on each preference click in this hierarchy, overrides * PreferenceActivity's implementation. Used to make sure we track the @@ -81,6 +96,9 @@ public class WirelessSettings extends SettingsPreferenceFragment { */ @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (ensurePinRestrictedPreference(preference)) { + return true; + } log("onPreferenceTreeClick: preference=" + preference); if (preference == mAirplaneModePreference && Boolean.parseBoolean( SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { @@ -97,21 +115,22 @@ public class WirelessSettings extends SettingsPreferenceFragment { } private String mManageMobilePlanMessage; - + private static final String CONNECTED_TO_PROVISIONING_NETWORK_ACTION + = "com.android.server.connectivityservice.CONNECTED_TO_PROVISIONING_NETWORK_ACTION"; public void onManageMobilePlanClick() { log("onManageMobilePlanClick:"); mManageMobilePlanMessage = null; Resources resources = getActivity().getResources(); - NetworkInfo ni = mCm.getActiveNetworkInfo(); + NetworkInfo ni = mCm.getProvisioningOrActiveNetworkInfo(); if (mTm.hasIccCard() && (ni != null)) { // Get provisioning URL String url = mCm.getMobileProvisioningUrl(); if (!TextUtils.isEmpty(url)) { - // Send user to provisioning webpage - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse(url)); - startActivity(intent); + Intent intent = new Intent(CONNECTED_TO_PROVISIONING_NETWORK_ACTION); + intent.putExtra("EXTRA_URL", url); + Context context = getActivity().getBaseContext(); + context.sendBroadcast(intent); mManageMobilePlanMessage = null; } else { // No provisioning URL @@ -145,6 +164,52 @@ public class WirelessSettings extends SettingsPreferenceFragment { } } + private void updateSmsApplicationSetting() { + log("updateSmsApplicationSetting:"); + ComponentName appName = SmsApplication.getDefaultSmsApplication(getActivity(), true); + if (appName != null) { + String packageName = appName.getPackageName(); + + CharSequence[] values = mSmsApplicationPreference.getEntryValues(); + for (int i = 0; i < values.length; i++) { + if (packageName.contentEquals(values[i])) { + mSmsApplicationPreference.setValueIndex(i); + mSmsApplicationPreference.setSummary(mSmsApplicationPreference.getEntries()[i]); + break; + } + } + } + } + + private void initSmsApplicationSetting() { + log("initSmsApplicationSetting:"); + Collection smsApplications = + SmsApplication.getApplicationCollection(getActivity()); + + // If the list is empty the dialog will be empty, but we will not crash. + int count = smsApplications.size(); + CharSequence[] entries = new CharSequence[count]; + CharSequence[] entryValues = new CharSequence[count]; + Drawable[] entryImages = new Drawable[count]; + + PackageManager packageManager = getPackageManager(); + int i = 0; + for (SmsApplicationData smsApplicationData : smsApplications) { + entries[i] = smsApplicationData.mApplicationName; + entryValues[i] = smsApplicationData.mPackageName; + try { + entryImages[i] = packageManager.getApplicationIcon(smsApplicationData.mPackageName); + } catch (NameNotFoundException e) { + entryImages[i] = packageManager.getDefaultActivityIcon(); + } + i++; + } + mSmsApplicationPreference.setEntries(entries); + mSmsApplicationPreference.setEntryValues(entryValues); + mSmsApplicationPreference.setEntryDrawables(entryImages); + updateSmsApplicationSetting(); + } + @Override public Dialog onCreateDialog(int dialogId) { log("onCreateDialog: dialogId=" + dialogId); @@ -180,6 +245,11 @@ public class WirelessSettings extends SettingsPreferenceFragment { return toggleable != null && toggleable.contains(type); } + private boolean isSmsSupported() { + // Some tablet has sim card but could not do telephony operations. Skip those. + return (mTm.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -204,6 +274,10 @@ public class WirelessSettings extends SettingsPreferenceFragment { mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference); mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam); + mSmsApplicationPreference = (SmsListPreference) findPreference(KEY_SMS_APPLICATION); + mSmsApplicationPreference.setOnPreferenceChangeListener(this); + initSmsApplicationSetting(); + // Remove NSD checkbox by default getPreferenceScreen().removePreference(nsd); //mNsdEnabler = new NsdEnabler(activity, nsd); @@ -225,6 +299,8 @@ public class WirelessSettings extends SettingsPreferenceFragment { ps.setDependency(KEY_TOGGLE_AIRPLANE); } } + protectByRestrictions(KEY_WIMAX_SETTINGS); + // Manually set dependencies for Wifi when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIFI)) { findPreference(KEY_VPN_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE); @@ -232,7 +308,7 @@ public class WirelessSettings extends SettingsPreferenceFragment { if (isSecondaryUser) { // Disable VPN removePreference(KEY_VPN_SETTINGS); } - + protectByRestrictions(KEY_VPN_SETTINGS); // Manually set dependencies for Bluetooth when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_BLUETOOTH)) { // No bluetooth-dependent items in the list. Code kept in case one is added later. @@ -257,6 +333,18 @@ public class WirelessSettings extends SettingsPreferenceFragment { removePreference(KEY_MOBILE_NETWORK_SETTINGS); removePreference(KEY_MANAGE_MOBILE_PLAN); } + protectByRestrictions(KEY_MOBILE_NETWORK_SETTINGS); + protectByRestrictions(KEY_MANAGE_MOBILE_PLAN); + + // Remove SMS Application if the device does not support SMS + if (!isSmsSupported()) { + removePreference(KEY_SMS_APPLICATION); + } + + // Remove Airplane Mode settings if it's a stationary device such as a TV. + if (getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEVISION)) { + removePreference(KEY_TOGGLE_AIRPLANE); + } // Enable Proxy selector settings if allowed. Preference mGlobalProxy = findPreference(KEY_PROXY_SETTINGS); @@ -275,6 +363,7 @@ public class WirelessSettings extends SettingsPreferenceFragment { Preference p = findPreference(KEY_TETHER_SETTINGS); p.setTitle(Utils.getTetheringLabel(cm)); } + protectByRestrictions(KEY_TETHER_SETTINGS); // Enable link to CMAS app settings depending on the value in config.xml. boolean isCellBroadcastAppLinkEnabled = this.getResources().getBoolean( @@ -295,6 +384,14 @@ public class WirelessSettings extends SettingsPreferenceFragment { Preference ps = findPreference(KEY_CELL_BROADCAST_SETTINGS); if (ps != null) root.removePreference(ps); } + protectByRestrictions(KEY_CELL_BROADCAST_SETTINGS); + } + + @Override + public void onStart() { + super.onStart(); + + initSmsApplicationSetting(); } @Override @@ -340,10 +437,21 @@ public class WirelessSettings extends SettingsPreferenceFragment { mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes, mAirplaneModePreference.isChecked()); } + super.onActivityResult(requestCode, resultCode, data); } @Override protected int getHelpResource() { return R.string.help_url_more_networks; } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference == mSmsApplicationPreference && newValue != null) { + SmsApplication.setDefaultApplication(newValue.toString(), getActivity()); + updateSmsApplicationSetting(); + return true; + } + return false; + } } diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java index 20199540c62..0a9173f05a8 100644 --- a/src/com/android/settings/ZonePicker.java +++ b/src/com/android/settings/ZonePicker.java @@ -296,6 +296,8 @@ public class ZonePicker extends ListFragment { @Override public void onListItemClick(ListView listView, View v, int position, long id) { + // Ignore extra clicks + if (!isResumed()) return; final Map map = (Map)listView.getItemAtPosition(position); final String tzId = (String) map.get(KEY_ID); diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java new file mode 100644 index 00000000000..4d24d096850 --- /dev/null +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -0,0 +1,647 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.ActivityManagerNative; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.ActivityNotFoundException; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.res.Configuration; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.RemoteException; +import android.os.SystemProperties; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceCategory; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.text.TextUtils; +import android.text.TextUtils.SimpleStringSplitter; +import android.util.Log; +import android.view.KeyCharacterMap; +import android.view.KeyEvent; +import android.view.View; +import android.view.accessibility.AccessibilityManager; +import android.widget.TextView; + +import com.android.internal.content.PackageMonitor; +import com.android.internal.view.RotationPolicy; +import com.android.internal.view.RotationPolicy.RotationPolicyListener; +import com.android.settings.DialogCreatable; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Activity with the accessibility settings. + */ +public class AccessibilitySettings extends SettingsPreferenceFragment implements DialogCreatable, + Preference.OnPreferenceChangeListener { + private static final String LOG_TAG = "AccessibilitySettings"; + + private static final String DEFAULT_SCREENREADER_MARKET_LINK = + "market://search?q=pname:com.google.android.marvin.talkback"; + + private static final float LARGE_FONT_SCALE = 1.3f; + + private static final String SYSTEM_PROPERTY_MARKET_URL = "ro.screenreader.market"; + + static final char ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR = ':'; + + private static final String KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE = + "key_install_accessibility_service_offered_once"; + + // Preference categories + private static final String SERVICES_CATEGORY = "services_category"; + private static final String SYSTEM_CATEGORY = "system_category"; + + // Preferences + private static final String TOGGLE_LARGE_TEXT_PREFERENCE = + "toggle_large_text_preference"; + private static final String TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE = + "toggle_power_button_ends_call_preference"; + private static final String TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE = + "toggle_lock_screen_rotation_preference"; + private static final String TOGGLE_SPEAK_PASSWORD_PREFERENCE = + "toggle_speak_password_preference"; + private static final String SELECT_LONG_PRESS_TIMEOUT_PREFERENCE = + "select_long_press_timeout_preference"; + private static final String ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN = + "enable_global_gesture_preference_screen"; + private static final String CAPTIONING_PREFERENCE_SCREEN = + "captioning_preference_screen"; + private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN = + "screen_magnification_preference_screen"; + + // Extras passed to sub-fragments. + static final String EXTRA_PREFERENCE_KEY = "preference_key"; + static final String EXTRA_CHECKED = "checked"; + static final String EXTRA_TITLE = "title"; + static final String EXTRA_SUMMARY = "summary"; + static final String EXTRA_SETTINGS_TITLE = "settings_title"; + static final String EXTRA_COMPONENT_NAME = "component_name"; + static final String EXTRA_SETTINGS_COMPONENT_NAME = "settings_component_name"; + + // Timeout before we update the services if packages are added/removed + // since the AccessibilityManagerService has to do that processing first + // to generate the AccessibilityServiceInfo we need for proper + // presentation. + private static final long DELAY_UPDATE_SERVICES_MILLIS = 1000; + + // Dialog IDs. + private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 1; + + // Auxiliary members. + final static SimpleStringSplitter sStringColonSplitter = + new SimpleStringSplitter(ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR); + + static final Set sInstalledServices = new HashSet(); + + private final Map mLongPressTimeoutValuetoTitleMap = + new HashMap(); + + private final Configuration mCurConfig = new Configuration(); + + private final Handler mHandler = new Handler(); + + private final Runnable mUpdateRunnable = new Runnable() { + @Override + public void run() { + loadInstalledServices(); + updateServicesPreferences(); + } + }; + + private final PackageMonitor mSettingsPackageMonitor = new PackageMonitor() { + @Override + public void onPackageAdded(String packageName, int uid) { + sendUpdate(); + } + + @Override + public void onPackageAppeared(String packageName, int reason) { + sendUpdate(); + } + + @Override + public void onPackageDisappeared(String packageName, int reason) { + sendUpdate(); + } + + @Override + public void onPackageRemoved(String packageName, int uid) { + sendUpdate(); + } + + private void sendUpdate() { + mHandler.postDelayed(mUpdateRunnable, DELAY_UPDATE_SERVICES_MILLIS); + } + }; + + private final SettingsContentObserver mSettingsContentObserver = + new SettingsContentObserver(mHandler) { + @Override + public void onChange(boolean selfChange, Uri uri) { + loadInstalledServices(); + updateServicesPreferences(); + } + }; + + private final RotationPolicyListener mRotationPolicyListener = new RotationPolicyListener() { + @Override + public void onChange() { + updateLockScreenRotationCheckbox(); + } + }; + + // Preference controls. + private PreferenceCategory mServicesCategory; + private PreferenceCategory mSystemsCategory; + + private CheckBoxPreference mToggleLargeTextPreference; + private CheckBoxPreference mTogglePowerButtonEndsCallPreference; + private CheckBoxPreference mToggleLockScreenRotationPreference; + private CheckBoxPreference mToggleSpeakPasswordPreference; + private ListPreference mSelectLongPressTimeoutPreference; + private Preference mNoServicesMessagePreference; + private PreferenceScreen mCaptioningPreferenceScreen; + private PreferenceScreen mDisplayMagnificationPreferenceScreen; + private PreferenceScreen mGlobalGesturePreferenceScreen; + + private int mLongPressTimeoutDefault; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.accessibility_settings); + initializeAllPreferences(); + } + + @Override + public void onResume() { + super.onResume(); + loadInstalledServices(); + updateAllPreferences(); + + offerInstallAccessibilitySerivceOnce(); + + mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); + mSettingsContentObserver.register(getContentResolver()); + if (RotationPolicy.isRotationSupported(getActivity())) { + RotationPolicy.registerRotationPolicyListener(getActivity(), + mRotationPolicyListener); + } + } + + @Override + public void onPause() { + mSettingsPackageMonitor.unregister(); + mSettingsContentObserver.unregister(getContentResolver()); + if (RotationPolicy.isRotationSupported(getActivity())) { + RotationPolicy.unregisterRotationPolicyListener(getActivity(), + mRotationPolicyListener); + } + super.onPause(); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (preference == mSelectLongPressTimeoutPreference) { + String stringValue = (String) newValue; + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.LONG_PRESS_TIMEOUT, Integer.parseInt(stringValue)); + mSelectLongPressTimeoutPreference.setSummary( + mLongPressTimeoutValuetoTitleMap.get(stringValue)); + return true; + } + return false; + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (mToggleLargeTextPreference == preference) { + handleToggleLargeTextPreferenceClick(); + return true; + } else if (mTogglePowerButtonEndsCallPreference == preference) { + handleTogglePowerButtonEndsCallPreferenceClick(); + return true; + } else if (mToggleLockScreenRotationPreference == preference) { + handleLockScreenRotationPreferenceClick(); + return true; + } else if (mToggleSpeakPasswordPreference == preference) { + handleToggleSpeakPasswordPreferenceClick(); + return true; + } else if (mGlobalGesturePreferenceScreen == preference) { + handleTogglEnableAccessibilityGesturePreferenceClick(); + return true; + } else if (mDisplayMagnificationPreferenceScreen == preference) { + handleDisplayMagnificationPreferenceScreenClick(); + return true; + } + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + private void handleToggleLargeTextPreferenceClick() { + try { + mCurConfig.fontScale = mToggleLargeTextPreference.isChecked() ? LARGE_FONT_SCALE : 1; + ActivityManagerNative.getDefault().updatePersistentConfiguration(mCurConfig); + } catch (RemoteException re) { + /* ignore */ + } + } + + private void handleTogglePowerButtonEndsCallPreferenceClick() { + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, + (mTogglePowerButtonEndsCallPreference.isChecked() + ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP + : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF)); + } + + private void handleLockScreenRotationPreferenceClick() { + RotationPolicy.setRotationLockForAccessibility(getActivity(), + !mToggleLockScreenRotationPreference.isChecked()); + } + + private void handleToggleSpeakPasswordPreferenceClick() { + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, + mToggleSpeakPasswordPreference.isChecked() ? 1 : 0); + } + + private void handleTogglEnableAccessibilityGesturePreferenceClick() { + Bundle extras = mGlobalGesturePreferenceScreen.getExtras(); + extras.putString(EXTRA_TITLE, getString( + R.string.accessibility_global_gesture_preference_title)); + extras.putString(EXTRA_SUMMARY, getString( + R.string.accessibility_global_gesture_preference_description)); + extras.putBoolean(EXTRA_CHECKED, Settings.Global.getInt(getContentResolver(), + Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1); + super.onPreferenceTreeClick(mGlobalGesturePreferenceScreen, + mGlobalGesturePreferenceScreen); + } + + private void handleDisplayMagnificationPreferenceScreenClick() { + Bundle extras = mDisplayMagnificationPreferenceScreen.getExtras(); + extras.putString(EXTRA_TITLE, getString( + R.string.accessibility_screen_magnification_title)); + extras.putCharSequence(EXTRA_SUMMARY, getActivity().getResources().getText( + R.string.accessibility_screen_magnification_summary)); + extras.putBoolean(EXTRA_CHECKED, Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1); + super.onPreferenceTreeClick(mDisplayMagnificationPreferenceScreen, + mDisplayMagnificationPreferenceScreen); + } + + private void initializeAllPreferences() { + mServicesCategory = (PreferenceCategory) findPreference(SERVICES_CATEGORY); + mSystemsCategory = (PreferenceCategory) findPreference(SYSTEM_CATEGORY); + + // Large text. + mToggleLargeTextPreference = + (CheckBoxPreference) findPreference(TOGGLE_LARGE_TEXT_PREFERENCE); + + // Power button ends calls. + mTogglePowerButtonEndsCallPreference = + (CheckBoxPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE); + if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) + || !Utils.isVoiceCapable(getActivity())) { + mSystemsCategory.removePreference(mTogglePowerButtonEndsCallPreference); + } + + // Lock screen rotation. + mToggleLockScreenRotationPreference = + (CheckBoxPreference) findPreference(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE); + if (!RotationPolicy.isRotationSupported(getActivity())) { + mSystemsCategory.removePreference(mToggleLockScreenRotationPreference); + } + + // Speak passwords. + mToggleSpeakPasswordPreference = + (CheckBoxPreference) findPreference(TOGGLE_SPEAK_PASSWORD_PREFERENCE); + + // Long press timeout. + mSelectLongPressTimeoutPreference = + (ListPreference) findPreference(SELECT_LONG_PRESS_TIMEOUT_PREFERENCE); + mSelectLongPressTimeoutPreference.setOnPreferenceChangeListener(this); + if (mLongPressTimeoutValuetoTitleMap.size() == 0) { + String[] timeoutValues = getResources().getStringArray( + R.array.long_press_timeout_selector_values); + mLongPressTimeoutDefault = Integer.parseInt(timeoutValues[0]); + String[] timeoutTitles = getResources().getStringArray( + R.array.long_press_timeout_selector_titles); + final int timeoutValueCount = timeoutValues.length; + for (int i = 0; i < timeoutValueCount; i++) { + mLongPressTimeoutValuetoTitleMap.put(timeoutValues[i], timeoutTitles[i]); + } + } + + // Captioning. + mCaptioningPreferenceScreen = (PreferenceScreen) findPreference( + CAPTIONING_PREFERENCE_SCREEN); + + // Display magnification. + mDisplayMagnificationPreferenceScreen = (PreferenceScreen) findPreference( + DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN); + + // Global gesture. + mGlobalGesturePreferenceScreen = + (PreferenceScreen) findPreference(ENABLE_ACCESSIBILITY_GESTURE_PREFERENCE_SCREEN); + final int longPressOnPowerBehavior = getActivity().getResources().getInteger( + com.android.internal.R.integer.config_longPressOnPowerBehavior); + final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; + if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) + || longPressOnPowerBehavior != LONG_PRESS_POWER_GLOBAL_ACTIONS) { + // Remove accessibility shortcut if power key is not present + // nor long press power does not show global actions menu. + mSystemsCategory.removePreference(mGlobalGesturePreferenceScreen); + } + } + + private void updateAllPreferences() { + updateServicesPreferences(); + updateSystemPreferences(); + } + + private void updateServicesPreferences() { + // Since services category is auto generated we have to do a pass + // to generate it since services can come and go and then based on + // the global accessibility state to decided whether it is enabled. + + // Generate. + mServicesCategory.removeAll(); + + AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(getActivity()); + + List installedServices = + accessibilityManager.getInstalledAccessibilityServiceList(); + Set enabledServices = AccessibilityUtils.getEnabledServicesFromSettings( + getActivity()); + + final boolean accessibilityEnabled = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 1; + + for (int i = 0, count = installedServices.size(); i < count; ++i) { + AccessibilityServiceInfo info = installedServices.get(i); + + PreferenceScreen preference = getPreferenceManager().createPreferenceScreen( + getActivity()); + String title = info.getResolveInfo().loadLabel(getPackageManager()).toString(); + + ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo; + ComponentName componentName = new ComponentName(serviceInfo.packageName, + serviceInfo.name); + + preference.setKey(componentName.flattenToString()); + + preference.setTitle(title); + final boolean serviceEnabled = accessibilityEnabled + && enabledServices.contains(componentName); + if (serviceEnabled) { + preference.setSummary(getString(R.string.accessibility_feature_state_on)); + } else { + preference.setSummary(getString(R.string.accessibility_feature_state_off)); + } + + preference.setOrder(i); + preference.setFragment(ToggleAccessibilityServicePreferenceFragment.class.getName()); + preference.setPersistent(true); + + Bundle extras = preference.getExtras(); + extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey()); + extras.putBoolean(EXTRA_CHECKED, serviceEnabled); + extras.putString(EXTRA_TITLE, title); + + String description = info.loadDescription(getPackageManager()); + if (TextUtils.isEmpty(description)) { + description = getString(R.string.accessibility_service_default_description); + } + extras.putString(EXTRA_SUMMARY, description); + + String settingsClassName = info.getSettingsActivityName(); + if (!TextUtils.isEmpty(settingsClassName)) { + extras.putString(EXTRA_SETTINGS_TITLE, + getString(R.string.accessibility_menu_item_settings)); + extras.putString(EXTRA_SETTINGS_COMPONENT_NAME, + new ComponentName(info.getResolveInfo().serviceInfo.packageName, + settingsClassName).flattenToString()); + } + + extras.putParcelable(EXTRA_COMPONENT_NAME, componentName); + + mServicesCategory.addPreference(preference); + } + + if (mServicesCategory.getPreferenceCount() == 0) { + if (mNoServicesMessagePreference == null) { + mNoServicesMessagePreference = new Preference(getActivity()) { + @Override + protected void onBindView(View view) { + super.onBindView(view); + TextView summaryView = (TextView) view.findViewById(R.id.summary); + String title = getString(R.string.accessibility_no_services_installed); + summaryView.setText(title); + } + }; + mNoServicesMessagePreference.setPersistent(false); + mNoServicesMessagePreference.setLayoutResource( + R.layout.text_description_preference); + mNoServicesMessagePreference.setSelectable(false); + } + mServicesCategory.addPreference(mNoServicesMessagePreference); + } + } + + private void updateSystemPreferences() { + // Large text. + try { + mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration()); + } catch (RemoteException re) { + /* ignore */ + } + mToggleLargeTextPreference.setChecked(mCurConfig.fontScale == LARGE_FONT_SCALE); + + // Power button ends calls. + if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER) + && Utils.isVoiceCapable(getActivity())) { + final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, + Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT); + final boolean powerButtonEndsCall = + (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP); + mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall); + } + + // Auto-rotate screen + updateLockScreenRotationCheckbox(); + + // Speak passwords. + final boolean speakPasswordEnabled = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_SPEAK_PASSWORD, 0) != 0; + mToggleSpeakPasswordPreference.setChecked(speakPasswordEnabled); + + // Long press timeout. + final int longPressTimeout = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.LONG_PRESS_TIMEOUT, mLongPressTimeoutDefault); + String value = String.valueOf(longPressTimeout); + mSelectLongPressTimeoutPreference.setValue(value); + mSelectLongPressTimeoutPreference.setSummary(mLongPressTimeoutValuetoTitleMap.get(value)); + + // Captioning. + final boolean captioningEnabled = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, 0) == 1; + if (captioningEnabled) { + mCaptioningPreferenceScreen.setSummary(R.string.accessibility_feature_state_on); + } else { + mCaptioningPreferenceScreen.setSummary(R.string.accessibility_feature_state_off); + } + + // Screen magnification. + final boolean magnificationEnabled = Settings.Secure.getInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1; + if (magnificationEnabled) { + mDisplayMagnificationPreferenceScreen.setSummary( + R.string.accessibility_feature_state_on); + } else { + mDisplayMagnificationPreferenceScreen.setSummary( + R.string.accessibility_feature_state_off); + } + + // Global gesture + final boolean globalGestureEnabled = Settings.Global.getInt(getContentResolver(), + Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, 0) == 1; + if (globalGestureEnabled) { + mGlobalGesturePreferenceScreen.setSummary( + R.string.accessibility_global_gesture_preference_summary_on); + } else { + mGlobalGesturePreferenceScreen.setSummary( + R.string.accessibility_global_gesture_preference_summary_off); + } + } + + private void updateLockScreenRotationCheckbox() { + Context context = getActivity(); + if (context != null) { + mToggleLockScreenRotationPreference.setChecked( + !RotationPolicy.isRotationLocked(context)); + } + } + + private void offerInstallAccessibilitySerivceOnce() { + // There is always one preference - if no services it is just a message. + if (mServicesCategory.getPreference(0) != mNoServicesMessagePreference) { + return; + } + SharedPreferences preferences = getActivity().getPreferences(Context.MODE_PRIVATE); + final boolean offerInstallService = !preferences.getBoolean( + KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, false); + if (offerInstallService) { + String screenreaderMarketLink = SystemProperties.get( + SYSTEM_PROPERTY_MARKET_URL, + DEFAULT_SCREENREADER_MARKET_LINK); + Uri marketUri = Uri.parse(screenreaderMarketLink); + Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri); + + if (getPackageManager().resolveActivity(marketIntent, 0) == null) { + // Don't show the dialog if no market app is found/installed. + return; + } + + preferences.edit().putBoolean(KEY_INSTALL_ACCESSIBILITY_SERVICE_OFFERED_ONCE, + true).commit(); + // Notify user that they do not have any accessibility + // services installed and direct them to Market to get TalkBack. + showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); + } + } + + @Override + public Dialog onCreateDialog(int dialogId) { + switch (dialogId) { + case DIALOG_ID_NO_ACCESSIBILITY_SERVICES: + return new AlertDialog.Builder(getActivity()) + .setTitle(R.string.accessibility_service_no_apps_title) + .setMessage(R.string.accessibility_service_no_apps_message) + .setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // dismiss the dialog before launching + // the activity otherwise the dialog + // removal occurs after + // onSaveInstanceState which triggers an + // exception + removeDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES); + String screenreaderMarketLink = SystemProperties.get( + SYSTEM_PROPERTY_MARKET_URL, + DEFAULT_SCREENREADER_MARKET_LINK); + Uri marketUri = Uri.parse(screenreaderMarketLink); + Intent marketIntent = new Intent(Intent.ACTION_VIEW, + marketUri); + try { + startActivity(marketIntent); + } catch (ActivityNotFoundException anfe) { + Log.w(LOG_TAG, "Couldn't start play store activity", + anfe); + } + } + }) + .setNegativeButton(android.R.string.cancel, null) + .create(); + default: + return null; + } + } + + private void loadInstalledServices() { + Set installedServices = sInstalledServices; + installedServices.clear(); + + List installedServiceInfos = + AccessibilityManager.getInstance(getActivity()) + .getInstalledAccessibilityServiceList(); + if (installedServiceInfos == null) { + return; + } + + final int installedServiceInfoCount = installedServiceInfos.size(); + for (int i = 0; i < installedServiceInfoCount; i++) { + ResolveInfo resolveInfo = installedServiceInfos.get(i).getResolveInfo(); + ComponentName installedService = new ComponentName( + resolveInfo.serviceInfo.packageName, + resolveInfo.serviceInfo.name); + installedServices.add(installedService); + } + } +} diff --git a/src/com/android/settings/accessibility/AccessibilityUtils.java b/src/com/android/settings/accessibility/AccessibilityUtils.java new file mode 100644 index 00000000000..7282bce827e --- /dev/null +++ b/src/com/android/settings/accessibility/AccessibilityUtils.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.ComponentName; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.provider.Settings; +import android.text.TextUtils.SimpleStringSplitter; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +/** + * Utility methods used within accessibility settings. + */ +class AccessibilityUtils { + /** + * @return the set of enabled accessibility services. If there are not services + * it returned the unmodifiable {@link Collections#emptySet()}. + */ + static Set getEnabledServicesFromSettings(Context context) { + final String enabledServicesSetting = Settings.Secure.getString( + context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + if (enabledServicesSetting == null) { + return Collections.emptySet(); + } + + final Set enabledServices = new HashSet(); + final SimpleStringSplitter colonSplitter = AccessibilitySettings.sStringColonSplitter; + colonSplitter.setString(enabledServicesSetting); + + while (colonSplitter.hasNext()) { + final String componentNameString = colonSplitter.next(); + final ComponentName enabledService = ComponentName.unflattenFromString( + componentNameString); + if (enabledService != null) { + enabledServices.add(enabledService); + } + } + + return enabledServices; + } + + /** + * @return a localized version of the text resource specified by resId + */ + static CharSequence getTextForLocale(Context context, Locale locale, int resId) { + final Resources res = context.getResources(); + final Configuration config = res.getConfiguration(); + final Locale prevLocale = config.locale; + try { + config.locale = locale; + res.updateConfiguration(config, null); + return res.getText(resId); + } finally { + config.locale = prevLocale; + res.updateConfiguration(config, null); + } + } +} diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java new file mode 100644 index 00000000000..b010ca8c8c1 --- /dev/null +++ b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.os.Bundle; +import android.preference.ListPreference; +import android.preference.Preference; +import android.preference.PreferenceCategory; +import android.preference.Preference.OnPreferenceChangeListener; +import android.provider.Settings; +import android.view.accessibility.CaptioningManager; +import android.view.accessibility.CaptioningManager.CaptionStyle; + +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener; + +/** + * Settings fragment containing captioning properties. + */ +public class CaptionPropertiesFragment extends SettingsPreferenceFragment + implements OnPreferenceChangeListener, OnValueChangedListener { + private ToggleCaptioningPreferenceFragment mParent; + private CaptioningManager mCaptioningManager; + + // Standard options. + private LocalePreference mLocale; + private ListPreference mFontSize; + private PresetPreference mPreset; + + // Custom options. + private ListPreference mTypeface; + private ColorPreference mForegroundColor; + private EdgeTypePreference mEdgeType; + private ColorPreference mEdgeColor; + private ColorPreference mBackgroundColor; + private ColorPreference mBackgroundOpacity; + private PreferenceCategory mCustom; + + private boolean mShowingCustom; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + mCaptioningManager = (CaptioningManager) getSystemService(Context.CAPTIONING_SERVICE); + + addPreferencesFromResource(R.xml.captioning_settings); + initializeAllPreferences(); + updateAllPreferences(); + refreshShowingCustom(); + installUpdateListeners(); + } + + /** + * Sets the parent fragment, which is used to update the live preview. + * + * @param parent the parent fragment + */ + public void setParent(ToggleCaptioningPreferenceFragment parent) { + mParent = parent; + } + + private void initializeAllPreferences() { + mLocale = (LocalePreference) findPreference("captioning_locale"); + mFontSize = (ListPreference) findPreference("captioning_font_size"); + + final Resources res = getResources(); + final int[] presetValues = res.getIntArray(R.array.captioning_preset_selector_values); + final String[] presetTitles = res.getStringArray(R.array.captioning_preset_selector_titles); + mPreset = (PresetPreference) findPreference("captioning_preset"); + mPreset.setValues(presetValues); + mPreset.setTitles(presetTitles); + + mCustom = (PreferenceCategory) findPreference("custom"); + mShowingCustom = true; + + final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values); + final String[] colorTitles = res.getStringArray(R.array.captioning_color_selector_titles); + mForegroundColor = (ColorPreference) mCustom.findPreference("captioning_foreground_color"); + mForegroundColor.setTitles(colorTitles); + mForegroundColor.setValues(colorValues); + mEdgeColor = (ColorPreference) mCustom.findPreference("captioning_edge_color"); + mEdgeColor.setTitles(colorTitles); + mEdgeColor.setValues(colorValues); + + // Add "none" as an additional option for backgrounds. + final int[] bgColorValues = new int[colorValues.length + 1]; + final String[] bgColorTitles = new String[colorTitles.length + 1]; + System.arraycopy(colorValues, 0, bgColorValues, 1, colorValues.length); + System.arraycopy(colorTitles, 0, bgColorTitles, 1, colorTitles.length); + bgColorValues[0] = Color.TRANSPARENT; + bgColorTitles[0] = getString(R.string.color_none); + mBackgroundColor = (ColorPreference) mCustom.findPreference("captioning_background_color"); + mBackgroundColor.setTitles(bgColorTitles); + mBackgroundColor.setValues(bgColorValues); + + final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values); + final String[] opacityTitles = res.getStringArray( + R.array.captioning_opacity_selector_titles); + mBackgroundOpacity = (ColorPreference) mCustom.findPreference( + "captioning_background_opacity"); + mBackgroundOpacity.setTitles(opacityTitles); + mBackgroundOpacity.setValues(opacityValues); + + mEdgeType = (EdgeTypePreference) mCustom.findPreference("captioning_edge_type"); + mTypeface = (ListPreference) mCustom.findPreference("captioning_typeface"); + } + + private void installUpdateListeners() { + mPreset.setOnValueChangedListener(this); + mForegroundColor.setOnValueChangedListener(this); + mEdgeColor.setOnValueChangedListener(this); + mBackgroundColor.setOnValueChangedListener(this); + mBackgroundOpacity.setOnValueChangedListener(this); + mEdgeType.setOnValueChangedListener(this); + + mTypeface.setOnPreferenceChangeListener(this); + mFontSize.setOnPreferenceChangeListener(this); + mLocale.setOnPreferenceChangeListener(this); + } + + private void updateAllPreferences() { + final int preset = mCaptioningManager.getRawUserStyle(); + mPreset.setValue(preset); + + final float fontSize = mCaptioningManager.getFontScale(); + mFontSize.setValue(Float.toString(fontSize)); + + final ContentResolver cr = getContentResolver(); + final CaptionStyle attrs = CaptionStyle.getCustomStyle(cr); + mForegroundColor.setValue(attrs.foregroundColor); + mEdgeType.setValue(attrs.edgeType); + mEdgeColor.setValue(attrs.edgeColor); + + final int backgroundColor = attrs.backgroundColor; + final int bgColor; + final int bgAlpha; + if (Color.alpha(backgroundColor) == 0) { + bgColor = Color.TRANSPARENT; + bgAlpha = (backgroundColor & 0xFF) << 24; + } else { + bgColor = backgroundColor | 0xFF000000; + bgAlpha = backgroundColor & 0xFF000000; + } + mBackgroundColor.setValue(bgColor); + mBackgroundOpacity.setValue(bgAlpha | 0xFFFFFF); + + final String rawTypeface = attrs.mRawTypeface; + mTypeface.setValue(rawTypeface == null ? "" : rawTypeface); + + final String rawLocale = mCaptioningManager.getRawLocale(); + mLocale.setValue(rawLocale == null ? "" : rawLocale); + } + + private void refreshPreviewText() { + if (mParent != null) { + mParent.refreshPreviewText(); + } + } + + private void refreshShowingCustom() { + final boolean customPreset = mPreset.getValue() == CaptionStyle.PRESET_CUSTOM; + if (!customPreset && mShowingCustom) { + getPreferenceScreen().removePreference(mCustom); + mShowingCustom = false; + } else if (customPreset && !mShowingCustom) { + getPreferenceScreen().addPreference(mCustom); + mShowingCustom = true; + } + } + + @Override + public void onValueChanged(ListDialogPreference preference, int value) { + final ContentResolver cr = getActivity().getContentResolver(); + if (mForegroundColor == preference) { + Settings.Secure.putInt( + cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, value); + } else if (mBackgroundColor == preference || mBackgroundOpacity == preference) { + final int bgColor = mBackgroundColor.getValue(); + final int bgAlpha = mBackgroundOpacity.getValue(); + final int argb; + if (Color.alpha(bgColor) == 0) { + argb = Color.alpha(bgAlpha); + } else { + argb = bgColor & 0x00FFFFFF | bgAlpha & 0xFF000000; + } + Settings.Secure.putInt( + cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, argb); + } else if (mEdgeColor == preference) { + Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, value); + } else if (mPreset == preference) { + Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, value); + refreshShowingCustom(); + } else if (mEdgeType == preference) { + Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, value); + } + + refreshPreviewText(); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object value) { + final ContentResolver cr = getActivity().getContentResolver(); + if (mTypeface == preference) { + Settings.Secure.putString( + cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE, (String) value); + } else if (mFontSize == preference) { + Settings.Secure.putFloat( + cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE, + Float.parseFloat((String) value)); + } else if (mLocale == preference) { + Settings.Secure.putString( + cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE, (String) value); + } + + refreshPreviewText(); + return true; + } +} diff --git a/src/com/android/settings/accessibility/ColorPreference.java b/src/com/android/settings/accessibility/ColorPreference.java new file mode 100644 index 00000000000..f4a5ba7fa1e --- /dev/null +++ b/src/com/android/settings/accessibility/ColorPreference.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.android.settings.R; + +/** + * Grid preference that allows the user to pick a color from a predefined set of + * colors. Optionally shows a preview in the preference item. + */ +public class ColorPreference extends ListDialogPreference { + private ColorDrawable mPreviewColor; + private boolean mPreviewEnabled; + + public ColorPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + setDialogLayoutResource(R.layout.grid_picker_dialog); + setListItemLayoutResource(R.layout.color_picker_item); + } + + /** + * @param enabled whether to show a preview in the preference item + */ + public void setPreviewEnabled(boolean enabled) { + if (mPreviewEnabled != enabled) { + mPreviewEnabled = enabled; + + if (enabled) { + setWidgetLayoutResource(R.layout.preference_color); + } else { + setWidgetLayoutResource(0); + } + } + } + + @Override + public boolean shouldDisableDependents() { + return getValue() == Color.TRANSPARENT || super.shouldDisableDependents(); + } + + @Override + protected CharSequence getTitleAt(int index) { + final CharSequence title = super.getTitleAt(index); + if (title != null) { + return title; + } + + // If no title was supplied, format title using RGB values. + final int value = getValueAt(index); + final int r = Color.red(value); + final int g = Color.green(value); + final int b = Color.blue(value); + return getContext().getString(R.string.color_custom, r, g, b); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + if (mPreviewEnabled) { + final ImageView previewImage = (ImageView) view.findViewById(R.id.color_preview); + final int argb = getValue(); + if (Color.alpha(argb) < 255) { + previewImage.setBackgroundResource(R.drawable.transparency_tileable); + } else { + previewImage.setBackground(null); + } + + if (mPreviewColor == null) { + mPreviewColor = new ColorDrawable(argb); + previewImage.setImageDrawable(mPreviewColor); + } else { + mPreviewColor.setColor(argb); + } + + final CharSequence summary = getSummary(); + if (!TextUtils.isEmpty(summary)) { + previewImage.setContentDescription(summary); + } else { + previewImage.setContentDescription(null); + } + + previewImage.setAlpha(isEnabled() ? 1f : 0.2f); + } + } + + @Override + protected void onBindListItem(View view, int index) { + final int argb = getValueAt(index); + final int alpha = Color.alpha(argb); + + final ImageView swatch = (ImageView) view.findViewById(R.id.color_swatch); + if (alpha < 255) { + swatch.setBackgroundResource(R.drawable.transparency_tileable); + } else { + swatch.setBackground(null); + } + + final Drawable foreground = swatch.getDrawable(); + if (foreground instanceof ColorDrawable) { + ((ColorDrawable) foreground).setColor(argb); + } else { + swatch.setImageDrawable(new ColorDrawable(argb)); + } + + final CharSequence title = getTitleAt(index); + if (title != null) { + final TextView summary = (TextView) view.findViewById(R.id.summary); + summary.setText(title); + } + } +} diff --git a/src/com/android/settings/accessibility/EdgeTypePreference.java b/src/com/android/settings/accessibility/EdgeTypePreference.java new file mode 100644 index 00000000000..ad71a765c7c --- /dev/null +++ b/src/com/android/settings/accessibility/EdgeTypePreference.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.util.AttributeSet; +import android.view.View; +import android.view.accessibility.CaptioningManager.CaptionStyle; +import android.widget.TextView; + +import com.android.internal.widget.SubtitleView; +import com.android.settings.R; + +/** + * Grid preference that allows the user to pick a captioning edge type. + */ +public class EdgeTypePreference extends ListDialogPreference { + private static final int DEFAULT_FOREGROUND_COLOR = Color.WHITE; + private static final int DEFAULT_BACKGROUND_COLOR = Color.TRANSPARENT; + private static final int DEFAULT_EDGE_COLOR = Color.BLACK; + private static final float DEFAULT_FONT_SIZE = 96f; + + public EdgeTypePreference(Context context, AttributeSet attrs) { + super(context, attrs); + + final Resources res = context.getResources(); + setValues(res.getIntArray(R.array.captioning_edge_type_selector_values)); + setTitles(res.getStringArray(R.array.captioning_edge_type_selector_titles)); + setDialogLayoutResource(R.layout.grid_picker_dialog); + setListItemLayoutResource(R.layout.preset_picker_item); + } + + @Override + public boolean shouldDisableDependents() { + return getValue() == CaptionStyle.EDGE_TYPE_NONE || super.shouldDisableDependents(); + } + + @Override + protected void onBindListItem(View view, int index) { + final SubtitleView preview = (SubtitleView) view.findViewById(R.id.preview); + + preview.setForegroundColor(DEFAULT_FOREGROUND_COLOR); + preview.setBackgroundColor(DEFAULT_BACKGROUND_COLOR); + preview.setTextSize(DEFAULT_FONT_SIZE); + + final int value = getValueAt(index); + preview.setEdgeType(value); + preview.setEdgeColor(DEFAULT_EDGE_COLOR); + + final CharSequence title = getTitleAt(index); + if (title != null) { + final TextView summary = (TextView) view.findViewById(R.id.summary); + summary.setText(title); + } + } +} diff --git a/src/com/android/settings/accessibility/ListDialogPreference.java b/src/com/android/settings/accessibility/ListDialogPreference.java new file mode 100644 index 00000000000..a25245413a4 --- /dev/null +++ b/src/com/android/settings/accessibility/ListDialogPreference.java @@ -0,0 +1,322 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.app.AlertDialog.Builder; +import android.app.Dialog; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Parcel; +import android.os.Parcelable; +import android.preference.DialogPreference; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; + +/** + * Abstract dialog preference that displays a set of values and optional titles. + */ +public abstract class ListDialogPreference extends DialogPreference { + private CharSequence[] mEntryTitles; + private int[] mEntryValues; + + private OnValueChangedListener mOnValueChangedListener; + + /** The layout resource to use for grid items. */ + private int mListItemLayout; + + /** The current value of this preference. */ + private int mValue; + + /** The index within the value set of the current value. */ + private int mValueIndex; + + /** Whether the value had been set using {@link #setValue}. */ + private boolean mValueSet; + + public ListDialogPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * Sets a listened to invoke when the value of this preference changes. + * + * @param listener the listener to invoke + */ + public void setOnValueChangedListener(OnValueChangedListener listener) { + mOnValueChangedListener = listener; + } + + /** + * Sets the layout to use for grid items. + * + * @param layoutResId the layout to use for displaying grid items + */ + public void setListItemLayoutResource(int layoutResId) { + mListItemLayout = layoutResId; + } + + /** + * Sets the list of item values. Values must be distinct. + * + * @param values the list of item values + */ + public void setValues(int[] values) { + mEntryValues = values; + } + + /** + * Sets the list of item titles. May be null if no titles are specified, or + * may be shorter than the list of values to leave some titles unspecified. + * + * @param titles the list of item titles + */ + public void setTitles(CharSequence[] titles) { + mEntryTitles = titles; + } + + /** + * Populates a list item view with data for the specified index. + * + * @param view the view to populate + * @param index the index for which to populate the view + * @see #setListItemLayoutResource(int) + * @see #getValueAt(int) + * @see #getTitleAt(int) + */ + protected abstract void onBindListItem(View view, int index); + + /** + * @return the title at the specified index, or null if none specified + */ + protected CharSequence getTitleAt(int index) { + if (mEntryTitles == null || mEntryTitles.length <= index) { + return null; + } + + return mEntryTitles[index]; + } + + /** + * @return the value at the specified index + */ + protected int getValueAt(int index) { + return mEntryValues[index]; + } + + @Override + public CharSequence getSummary() { + if (mValueIndex >= 0) { + return getTitleAt(mValueIndex); + } + + return null; + } + + @Override + protected void onPrepareDialogBuilder(Builder builder) { + super.onPrepareDialogBuilder(builder); + + final Context context = getContext(); + final int dialogLayout = getDialogLayoutResource(); + final View picker = LayoutInflater.from(context).inflate(dialogLayout, null); + final ListPreferenceAdapter adapter = new ListPreferenceAdapter(); + final AbsListView list = (AbsListView) picker.findViewById(android.R.id.list); + list.setAdapter(adapter); + list.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapter, View v, int position, long id) { + if (callChangeListener((int) id)) { + setValue((int) id); + } + + final Dialog dialog = getDialog(); + if (dialog != null) { + dialog.dismiss(); + } + } + }); + + // Set initial selection. + final int selectedPosition = getIndexForValue(mValue); + if (selectedPosition != AbsListView.INVALID_POSITION) { + list.setSelection(selectedPosition); + } + + builder.setView(picker); + builder.setPositiveButton(null, null); + } + + /** + * @return the index of the specified value within the list of entry values, + * or {@link AbsListView#INVALID_POSITION} if not found + */ + protected int getIndexForValue(int value) { + final int[] values = mEntryValues; + final int count = values.length; + for (int i = 0; i < count; i++) { + if (values[i] == value) { + return i; + } + } + + return AbsListView.INVALID_POSITION; + } + + /** + * Sets the current value. If the value exists within the set of entry + * values, updates the selection index. + * + * @param value the value to set + */ + public void setValue(int value) { + final boolean changed = mValue != value; + if (changed || !mValueSet) { + mValue = value; + mValueIndex = getIndexForValue(value); + mValueSet = true; + persistInt(value); + if (changed) { + notifyDependencyChange(shouldDisableDependents()); + notifyChanged(); + } + if (mOnValueChangedListener != null) { + mOnValueChangedListener.onValueChanged(this, value); + } + } + } + + /** + * @return the current value + */ + public int getValue() { + return mValue; + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + return a.getInt(index, 0); + } + + @Override + protected void onSetInitialValue(boolean restoreValue, Object defaultValue) { + setValue(restoreValue ? getPersistedInt(mValue) : (Integer) defaultValue); + } + + @Override + protected Parcelable onSaveInstanceState() { + final Parcelable superState = super.onSaveInstanceState(); + if (isPersistent()) { + // No need to save instance state since it's persistent + return superState; + } + + final SavedState myState = new SavedState(superState); + myState.value = getValue(); + return myState; + } + + @Override + protected void onRestoreInstanceState(Parcelable state) { + if (state == null || !state.getClass().equals(SavedState.class)) { + // Didn't save state for us in onSaveInstanceState + super.onRestoreInstanceState(state); + return; + } + + SavedState myState = (SavedState) state; + super.onRestoreInstanceState(myState.getSuperState()); + setValue(myState.value); + } + + private class ListPreferenceAdapter extends BaseAdapter { + private LayoutInflater mInflater; + + @Override + public int getCount() { + return mEntryValues.length; + } + + @Override + public Integer getItem(int position) { + return mEntryValues[position]; + } + + @Override + public long getItemId(int position) { + return mEntryValues[position]; + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + if (mInflater == null) { + mInflater = LayoutInflater.from(parent.getContext()); + } + convertView = mInflater.inflate(mListItemLayout, parent, false); + } + onBindListItem(convertView, position); + return convertView; + } + } + + private static class SavedState extends BaseSavedState { + public int value; + + public SavedState(Parcel source) { + super(source); + value = source.readInt(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(value); + } + + public SavedState(Parcelable superState) { + super(superState); + } + + @SuppressWarnings({ "hiding", "unused" }) + public static final Creator CREATOR = new Creator() { + @Override + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + public interface OnValueChangedListener { + public void onValueChanged(ListDialogPreference preference, int value); + } +} diff --git a/src/com/android/settings/accessibility/LocalePreference.java b/src/com/android/settings/accessibility/LocalePreference.java new file mode 100644 index 00000000000..41cb1e5fa09 --- /dev/null +++ b/src/com/android/settings/accessibility/LocalePreference.java @@ -0,0 +1,150 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.Context; +import android.content.res.Resources; +import android.preference.ListPreference; +import android.util.AttributeSet; + +import com.android.settings.R; + +import java.text.Collator; +import java.util.Arrays; +import java.util.Locale; + +/** + * List preference that allows the user to pick a locale from the list of + * supported device locales. + */ +public class LocalePreference extends ListPreference { + public LocalePreference(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public LocalePreference(Context context) { + super(context); + init(context); + } + + public void init(Context context) { + final String[] systemLocales = Resources.getSystem().getAssets().getLocales(); + Arrays.sort(systemLocales); + + final Resources resources = context.getResources(); + final String[] specialLocaleCodes = resources.getStringArray( + com.android.internal.R.array.special_locale_codes); + final String[] specialLocaleNames = resources.getStringArray( + com.android.internal.R.array.special_locale_names); + + int finalSize = 0; + + final int origSize = systemLocales.length; + final LocaleInfo[] localeInfos = new LocaleInfo[origSize]; + for (int i = 0; i < origSize; i++) { + final String localeStr = systemLocales[i]; + final int len = localeStr.length(); + if (len != 5) { + continue; + } + + final String language = localeStr.substring(0, 2); + final String country = localeStr.substring(3, 5); + final Locale l = new Locale(language, country); + + if (finalSize == 0) { + localeInfos[finalSize++] = new LocaleInfo(l.getDisplayLanguage(l), l); + } else { + // check previous entry: + // same lang and a country -> upgrade to full name and + // insert ours with full name + // diff lang -> insert ours with lang-only name + final LocaleInfo previous = localeInfos[finalSize - 1]; + if (previous.locale.getLanguage().equals(language) + && !previous.locale.getLanguage().equals("zz")) { + previous.label = getDisplayName( + localeInfos[finalSize - 1].locale, specialLocaleCodes, + specialLocaleNames); + localeInfos[finalSize++] = new LocaleInfo(getDisplayName(l, + specialLocaleCodes, specialLocaleNames), l); + } else { + final String displayName; + if (localeStr.equals("zz_ZZ")) { + displayName = "[Developer] Accented English"; + } else if (localeStr.equals("zz_ZY")) { + displayName = "[Developer] Fake Bi-Directional"; + } else { + displayName = l.getDisplayLanguage(l); + } + localeInfos[finalSize++] = new LocaleInfo(displayName, l); + } + } + } + + final CharSequence[] entries = new CharSequence[finalSize + 1]; + final CharSequence[] entryValues = new CharSequence[finalSize + 1]; + Arrays.sort(localeInfos, 0, finalSize); + + entries[0] = resources.getString(R.string.locale_default); + entryValues[0] = ""; + + for (int i = 0; i < finalSize; i++) { + final LocaleInfo info = localeInfos[i]; + entries[i + 1] = info.toString(); + entryValues[i + 1] = info.locale.toString(); + } + + setEntries(entries); + setEntryValues(entryValues); + } + + private static String getDisplayName( + Locale l, String[] specialLocaleCodes, String[] specialLocaleNames) { + String code = l.toString(); + + for (int i = 0; i < specialLocaleCodes.length; i++) { + if (specialLocaleCodes[i].equals(code)) { + return specialLocaleNames[i]; + } + } + + return l.getDisplayName(l); + } + + private static class LocaleInfo implements Comparable { + private static final Collator sCollator = Collator.getInstance(); + + public String label; + public Locale locale; + + public LocaleInfo(String label, Locale locale) { + this.label = label; + this.locale = locale; + } + + @Override + public String toString() { + return label; + } + + @Override + public int compareTo(LocaleInfo another) { + return sCollator.compare(this.label, another.label); + } + } +} diff --git a/src/com/android/settings/accessibility/PresetPreference.java b/src/com/android/settings/accessibility/PresetPreference.java new file mode 100644 index 00000000000..c091f712cad --- /dev/null +++ b/src/com/android/settings/accessibility/PresetPreference.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.accessibility.CaptioningManager; +import android.view.accessibility.CaptioningManager.CaptionStyle; +import android.widget.TextView; + +import com.android.internal.widget.SubtitleView; +import com.android.settings.R; + +public class PresetPreference extends ListDialogPreference { + private static final float DEFAULT_FONT_SIZE = 96f; + + private final CaptioningManager mCaptioningManager; + + public PresetPreference(Context context, AttributeSet attrs) { + super(context, attrs); + + setDialogLayoutResource(R.layout.grid_picker_dialog); + setListItemLayoutResource(R.layout.preset_picker_item); + + mCaptioningManager = (CaptioningManager) context.getSystemService( + Context.CAPTIONING_SERVICE); + } + + @Override + public boolean shouldDisableDependents() { + return getValue() != CaptionStyle.PRESET_CUSTOM + || super.shouldDisableDependents(); + } + + @Override + protected void onBindListItem(View view, int index) { + final SubtitleView previewText = (SubtitleView) view.findViewById(R.id.preview); + final int value = getValueAt(index); + ToggleCaptioningPreferenceFragment.applyCaptionProperties( + mCaptioningManager, previewText, value); + + previewText.setTextSize(DEFAULT_FONT_SIZE); + + final CharSequence title = getTitleAt(index); + if (title != null) { + final TextView summary = (TextView) view.findViewById(R.id.summary); + summary.setText(title); + } + } +} diff --git a/src/com/android/settings/accessibility/SettingsContentObserver.java b/src/com/android/settings/accessibility/SettingsContentObserver.java new file mode 100644 index 00000000000..c3baec50382 --- /dev/null +++ b/src/com/android/settings/accessibility/SettingsContentObserver.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.ContentResolver; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Handler; +import android.provider.Settings; + +abstract class SettingsContentObserver extends ContentObserver { + public SettingsContentObserver(Handler handler) { + super(handler); + } + + public void register(ContentResolver contentResolver) { + contentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_ENABLED), false, this); + contentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES), false, this); + } + + public void unregister(ContentResolver contentResolver) { + contentResolver.unregisterContentObserver(this); + } + + @Override + public abstract void onChange(boolean selfChange, Uri uri); +} diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java new file mode 100644 index 00000000000..0c568f06301 --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -0,0 +1,318 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.provider.Settings; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.accessibility.AccessibilityManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.android.settings.R; +import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ToggleAccessibilityServicePreferenceFragment + extends ToggleFeaturePreferenceFragment implements DialogInterface.OnClickListener { + + private static final int DIALOG_ID_ENABLE_WARNING = 1; + private static final int DIALOG_ID_DISABLE_WARNING = 2; + + private final SettingsContentObserver mSettingsContentObserver = + new SettingsContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange, Uri uri) { + String settingValue = Settings.Secure.getString(getContentResolver(), + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); + final boolean enabled = settingValue.contains(mComponentName.flattenToString()); + mToggleSwitch.setCheckedInternal(enabled); + } + }; + + private ComponentName mComponentName; + + private int mShownDialogId; + + @Override + public void onResume() { + mSettingsContentObserver.register(getContentResolver()); + super.onResume(); + } + + @Override + public void onPause() { + mSettingsContentObserver.unregister(getContentResolver()); + super.onPause(); + } + + @Override + public void onPreferenceToggled(String preferenceKey, boolean enabled) { + // Parse the enabled services. + Set enabledServices = AccessibilityUtils.getEnabledServicesFromSettings( + getActivity()); + + if (enabledServices == (Set) Collections.emptySet()) { + enabledServices = new HashSet(); + } + + // Determine enabled services and accessibility state. + ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey); + boolean accessibilityEnabled = false; + if (enabled) { + enabledServices.add(toggledService); + // Enabling at least one service enables accessibility. + accessibilityEnabled = true; + } else { + enabledServices.remove(toggledService); + // Check how many enabled and installed services are present. + Set installedServices = AccessibilitySettings.sInstalledServices; + for (ComponentName enabledService : enabledServices) { + if (installedServices.contains(enabledService)) { + // Disabling the last service disables accessibility. + accessibilityEnabled = true; + break; + } + } + } + + // Update the enabled services setting. + StringBuilder enabledServicesBuilder = new StringBuilder(); + // Keep the enabled services even if they are not installed since we + // have no way to know whether the application restore process has + // completed. In general the system should be responsible for the + // clean up not settings. + for (ComponentName enabledService : enabledServices) { + enabledServicesBuilder.append(enabledService.flattenToString()); + enabledServicesBuilder.append( + AccessibilitySettings.ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR); + } + final int enabledServicesBuilderLength = enabledServicesBuilder.length(); + if (enabledServicesBuilderLength > 0) { + enabledServicesBuilder.deleteCharAt(enabledServicesBuilderLength - 1); + } + Settings.Secure.putString(getContentResolver(), + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, + enabledServicesBuilder.toString()); + + // Update accessibility enabled. + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_ENABLED, accessibilityEnabled ? 1 : 0); + } + + // IMPORTANT: Refresh the info since there are dynamically changing + // capabilities. For + // example, before JellyBean MR2 the user was granting the explore by touch + // one. + private AccessibilityServiceInfo getAccessibilityServiceInfo() { + List serviceInfos = AccessibilityManager.getInstance( + getActivity()).getInstalledAccessibilityServiceList(); + final int serviceInfoCount = serviceInfos.size(); + for (int i = 0; i < serviceInfoCount; i++) { + AccessibilityServiceInfo serviceInfo = serviceInfos.get(i); + ResolveInfo resolveInfo = serviceInfo.getResolveInfo(); + if (mComponentName.getPackageName().equals(resolveInfo.serviceInfo.packageName) + && mComponentName.getClassName().equals(resolveInfo.serviceInfo.name)) { + return serviceInfo; + } + } + return null; + } + + @Override + public Dialog onCreateDialog(int dialogId) { + switch (dialogId) { + case DIALOG_ID_ENABLE_WARNING: { + mShownDialogId = DIALOG_ID_ENABLE_WARNING; + AccessibilityServiceInfo info = getAccessibilityServiceInfo(); + if (info == null) { + return null; + } + return new AlertDialog.Builder(getActivity()) + .setTitle(getString(R.string.enable_service_title, + info.getResolveInfo().loadLabel(getPackageManager()))) + .setIconAttribute(android.R.attr.alertDialogIcon) + .setView(createEnableDialogContentView(info)) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); + } + case DIALOG_ID_DISABLE_WARNING: { + mShownDialogId = DIALOG_ID_DISABLE_WARNING; + AccessibilityServiceInfo info = getAccessibilityServiceInfo(); + if (info == null) { + return null; + } + return new AlertDialog.Builder(getActivity()) + .setTitle(getString(R.string.disable_service_title, + info.getResolveInfo().loadLabel(getPackageManager()))) + .setIconAttribute(android.R.attr.alertDialogIcon) + .setMessage(getString(R.string.disable_service_message, + info.getResolveInfo().loadLabel(getPackageManager()))) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); + } + default: { + throw new IllegalArgumentException(); + } + } + } + + private View createEnableDialogContentView(AccessibilityServiceInfo info) { + LayoutInflater inflater = (LayoutInflater) getSystemService( + Context.LAYOUT_INFLATER_SERVICE); + + View content = inflater.inflate(R.layout.enable_accessibility_service_dialog_content, + null); + + TextView capabilitiesHeaderView = (TextView) content.findViewById( + R.id.capabilities_header); + capabilitiesHeaderView.setText(getString(R.string.capabilities_list_title, + info.getResolveInfo().loadLabel(getPackageManager()))); + + LinearLayout capabilitiesView = (LinearLayout) content.findViewById(R.id.capabilities); + + // This capability is implicit for all services. + View capabilityView = inflater.inflate( + com.android.internal.R.layout.app_permission_item_old, null); + + ImageView imageView = (ImageView) capabilityView.findViewById( + com.android.internal.R.id.perm_icon); + imageView.setImageDrawable(getResources().getDrawable( + com.android.internal.R.drawable.ic_text_dot)); + + TextView labelView = (TextView) capabilityView.findViewById( + com.android.internal.R.id.permission_group); + labelView.setText(getString(R.string.capability_title_receiveAccessibilityEvents)); + + TextView descriptionView = (TextView) capabilityView.findViewById( + com.android.internal.R.id.permission_list); + descriptionView.setText(getString(R.string.capability_desc_receiveAccessibilityEvents)); + + List capabilities = + info.getCapabilityInfos(); + + capabilitiesView.addView(capabilityView); + + // Service specific capabilities. + final int capabilityCount = capabilities.size(); + for (int i = 0; i < capabilityCount; i++) { + AccessibilityServiceInfo.CapabilityInfo capability = capabilities.get(i); + + capabilityView = inflater.inflate( + com.android.internal.R.layout.app_permission_item_old, null); + + imageView = (ImageView) capabilityView.findViewById( + com.android.internal.R.id.perm_icon); + imageView.setImageDrawable(getResources().getDrawable( + com.android.internal.R.drawable.ic_text_dot)); + + labelView = (TextView) capabilityView.findViewById( + com.android.internal.R.id.permission_group); + labelView.setText(getString(capability.titleResId)); + + descriptionView = (TextView) capabilityView.findViewById( + com.android.internal.R.id.permission_list); + descriptionView.setText(getString(capability.descResId)); + + capabilitiesView.addView(capabilityView); + } + + return content; + } + + @Override + public void onClick(DialogInterface dialog, int which) { + final boolean checked; + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + checked = (mShownDialogId == DIALOG_ID_ENABLE_WARNING); + mToggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + break; + case DialogInterface.BUTTON_NEGATIVE: + checked = (mShownDialogId == DIALOG_ID_DISABLE_WARNING); + mToggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + break; + default: + throw new IllegalArgumentException(); + } + } + + @Override + protected void onInstallActionBarToggleSwitch() { + super.onInstallActionBarToggleSwitch(); + mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + @Override + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { + if (checked) { + toggleSwitch.setCheckedInternal(false); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, false); + showDialog(DIALOG_ID_ENABLE_WARNING); + } else { + toggleSwitch.setCheckedInternal(true); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, true); + showDialog(DIALOG_ID_DISABLE_WARNING); + } + return true; + } + }); + } + + @Override + protected void onProcessArguments(Bundle arguments) { + super.onProcessArguments(arguments); + // Settings title and intent. + String settingsTitle = arguments.getString(AccessibilitySettings.EXTRA_SETTINGS_TITLE); + String settingsComponentName = arguments.getString( + AccessibilitySettings.EXTRA_SETTINGS_COMPONENT_NAME); + if (!TextUtils.isEmpty(settingsTitle) && !TextUtils.isEmpty(settingsComponentName)) { + Intent settingsIntent = new Intent(Intent.ACTION_MAIN).setComponent( + ComponentName.unflattenFromString(settingsComponentName.toString())); + if (!getPackageManager().queryIntentActivities(settingsIntent, 0).isEmpty()) { + mSettingsTitle = settingsTitle; + mSettingsIntent = settingsIntent; + setHasOptionsMenu(true); + } + } + + mComponentName = arguments.getParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME); + } +} diff --git a/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java new file mode 100644 index 00000000000..f3c8b1ce93e --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleCaptioningPreferenceFragment.java @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.Fragment; +import android.content.ContentResolver; +import android.content.Context; +import android.os.Bundle; +import android.preference.PreferenceFrameLayout; +import android.provider.Settings; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.CaptioningManager; + +import com.android.internal.widget.SubtitleView; +import com.android.settings.R; +import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener; + +import java.util.Locale; + +public class ToggleCaptioningPreferenceFragment extends Fragment { + private static final float DEFAULT_FONT_SIZE = 48f; + + private CaptionPropertiesFragment mPropsFragment; + private SubtitleView mPreviewText; + private CaptioningManager mCaptioningManager; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mCaptioningManager = (CaptioningManager) getActivity() + .getSystemService(Context.CAPTIONING_SERVICE); + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View rootView = inflater.inflate(R.layout.captioning_preview, container, false); + + // We have to do this now because PreferenceFrameLayout looks at it + // only when the view is added. + if (container instanceof PreferenceFrameLayout) { + ((PreferenceFrameLayout.LayoutParams) rootView.getLayoutParams()).removeBorders = true; + } + + return rootView; + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + mPropsFragment = ((CaptionPropertiesFragment) getFragmentManager() + .findFragmentById(R.id.properties_fragment)); + mPropsFragment.setParent(this); + + mPreviewText = (SubtitleView) view.findViewById(R.id.preview_text); + + installActionBarToggleSwitch(); + refreshPreviewText(); + } + + public void refreshPreviewText() { + final SubtitleView preview = mPreviewText; + if (preview != null) { + final Activity activity = getActivity(); + final ContentResolver cr = activity.getContentResolver(); + final int styleId = mCaptioningManager.getRawUserStyle(); + applyCaptionProperties(mCaptioningManager, preview, styleId); + + final Locale locale = mCaptioningManager.getLocale(); + if (locale != null) { + final CharSequence localizedText = AccessibilityUtils.getTextForLocale( + activity, locale, R.string.captioning_preview_text); + preview.setText(localizedText); + } else { + preview.setText(R.string.captioning_preview_text); + } + } + } + + public static void applyCaptionProperties( + CaptioningManager manager, SubtitleView previewText, int styleId) { + previewText.setStyle(styleId); + + final Context context = previewText.getContext(); + final ContentResolver cr = context.getContentResolver(); + final float fontScale = manager.getFontScale(); + previewText.setTextSize(fontScale * DEFAULT_FONT_SIZE); + + final Locale locale = manager.getLocale(); + if (locale != null) { + final CharSequence localizedText = AccessibilityUtils.getTextForLocale( + context, locale, R.string.captioning_preview_characters); + previewText.setText(localizedText); + } else { + previewText.setText(R.string.captioning_preview_characters); + } + } + + private void installActionBarToggleSwitch() { + final Activity activity = getActivity(); + final ToggleSwitch toggleSwitch = new ToggleSwitch(activity); + + final int padding = getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + toggleSwitch.setPaddingRelative(0, 0, padding, 0); + + final ActionBar actionBar = activity.getActionBar(); + actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM); + + final ActionBar.LayoutParams params = new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END); + actionBar.setCustomView(toggleSwitch, params); + + final boolean enabled = mCaptioningManager.isEnabled(); + mPropsFragment.getPreferenceScreen().setEnabled(enabled); + mPreviewText.setVisibility(enabled ? View.VISIBLE : View.INVISIBLE); + toggleSwitch.setCheckedInternal(enabled); + toggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + @Override + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { + toggleSwitch.setCheckedInternal(checked); + Settings.Secure.putInt(getActivity().getContentResolver(), + Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, checked ? 1 : 0); + mPropsFragment.getPreferenceScreen().setEnabled(checked); + mPreviewText.setVisibility(checked ? View.VISIBLE : View.INVISIBLE); + return false; + } + }); + } +} diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java new file mode 100644 index 00000000000..2fbbabdb06c --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceScreen; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityManager; +import android.widget.TextView; + +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +public abstract class ToggleFeaturePreferenceFragment + extends SettingsPreferenceFragment { + + protected ToggleSwitch mToggleSwitch; + + protected String mPreferenceKey; + protected Preference mSummaryPreference; + + protected CharSequence mSettingsTitle; + protected Intent mSettingsIntent; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen( + getActivity()); + setPreferenceScreen(preferenceScreen); + mSummaryPreference = new Preference(getActivity()) { + @Override + protected void onBindView(View view) { + super.onBindView(view); + TextView summaryView = (TextView) view.findViewById(R.id.summary); + summaryView.setText(getSummary()); + sendAccessibilityEvent(summaryView); + } + + private void sendAccessibilityEvent(View view) { + // Since the view is still not attached we create, populate, + // and send the event directly since we do not know when it + // will be attached and posting commands is not as clean. + AccessibilityManager accessibilityManager = + AccessibilityManager.getInstance(getActivity()); + if (accessibilityManager.isEnabled()) { + AccessibilityEvent event = AccessibilityEvent.obtain(); + event.setEventType(AccessibilityEvent.TYPE_VIEW_FOCUSED); + view.onInitializeAccessibilityEvent(event); + view.dispatchPopulateAccessibilityEvent(event); + accessibilityManager.sendAccessibilityEvent(event); + } + } + }; + mSummaryPreference.setPersistent(false); + mSummaryPreference.setLayoutResource(R.layout.text_description_preference); + preferenceScreen.addPreference(mSummaryPreference); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + onInstallActionBarToggleSwitch(); + onProcessArguments(getArguments()); + // Set a transparent drawable to prevent use of the default one. + getListView().setSelector(new ColorDrawable(Color.TRANSPARENT)); + getListView().setDivider(null); + } + + @Override + public void onDestroyView() { + getActivity().getActionBar().setCustomView(null); + mToggleSwitch.setOnBeforeCheckedChangeListener(null); + super.onDestroyView(); + } + + protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled); + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + MenuItem menuItem = menu.add(mSettingsTitle); + menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menuItem.setIntent(mSettingsIntent); + } + + protected void onInstallActionBarToggleSwitch() { + mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity()); + } + + private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { + ToggleSwitch toggleSwitch = new ToggleSwitch(activity); + final int padding = activity.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + toggleSwitch.setPaddingRelative(0, 0, padding, 0); + activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM); + activity.getActionBar().setCustomView(toggleSwitch, + new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, + ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END)); + return toggleSwitch; + } + + protected void onProcessArguments(Bundle arguments) { + // Key. + mPreferenceKey = arguments.getString(AccessibilitySettings.EXTRA_PREFERENCE_KEY); + // Enabled. + final boolean enabled = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED); + mToggleSwitch.setCheckedInternal(enabled); + // Title. + PreferenceActivity activity = (PreferenceActivity) getActivity(); + if (!activity.onIsMultiPane() || activity.onIsHidingHeaders()) { + String title = arguments.getString(AccessibilitySettings.EXTRA_TITLE); + getActivity().setTitle(title); + } + // Summary. + CharSequence summary = arguments.getCharSequence(AccessibilitySettings.EXTRA_SUMMARY); + mSummaryPreference.setSummary(summary); + } +} diff --git a/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java new file mode 100644 index 00000000000..f4ac2ccc29a --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleGlobalGesturePreferenceFragment.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.provider.Settings; + +import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener; + +public class ToggleGlobalGesturePreferenceFragment + extends ToggleFeaturePreferenceFragment { + @Override + protected void onPreferenceToggled(String preferenceKey, boolean enabled) { + Settings.Global.putInt(getContentResolver(), + Settings.Global.ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, enabled ? 1 : 0); + } + + @Override + protected void onInstallActionBarToggleSwitch() { + super.onInstallActionBarToggleSwitch(); + mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + @Override + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { + toggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + return false; + } + }); + } +} diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java new file mode 100644 index 00000000000..27d07d2f0c1 --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.provider.Settings; + +import com.android.settings.accessibility.ToggleSwitch.OnBeforeCheckedChangeListener; + +public class ToggleScreenMagnificationPreferenceFragment + extends ToggleFeaturePreferenceFragment { + @Override + protected void onPreferenceToggled(String preferenceKey, boolean enabled) { + Settings.Secure.putInt(getContentResolver(), + Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled ? 1 : 0); + } + + @Override + protected void onInstallActionBarToggleSwitch() { + super.onInstallActionBarToggleSwitch(); + mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + @Override + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { + toggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + return false; + } + }); + } +} diff --git a/src/com/android/settings/accessibility/ToggleSwitch.java b/src/com/android/settings/accessibility/ToggleSwitch.java new file mode 100644 index 00000000000..e7c39e43a95 --- /dev/null +++ b/src/com/android/settings/accessibility/ToggleSwitch.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.accessibility; + +import android.content.Context; +import android.widget.Switch; + +public class ToggleSwitch extends Switch { + private ToggleSwitch.OnBeforeCheckedChangeListener mOnBeforeListener; + + public static interface OnBeforeCheckedChangeListener { + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked); + } + + public ToggleSwitch(Context context) { + super(context); + } + + public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) { + mOnBeforeListener = listener; + } + + @Override + public void setChecked(boolean checked) { + if (mOnBeforeListener != null + && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) { + return; + } + super.setChecked(checked); + } + + public void setCheckedInternal(boolean checked) { + super.setChecked(checked); + } +} diff --git a/src/com/android/settings/accounts/AuthenticatorHelper.java b/src/com/android/settings/accounts/AuthenticatorHelper.java index eba785bad4d..a164b8be10e 100644 --- a/src/com/android/settings/accounts/AuthenticatorHelper.java +++ b/src/com/android/settings/accounts/AuthenticatorHelper.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.drawable.Drawable; +import android.os.AsyncTask; import android.util.Log; import java.util.ArrayList; @@ -45,6 +46,16 @@ public class AuthenticatorHelper { return mEnabledAccountTypes.toArray(new String[mEnabledAccountTypes.size()]); } + public void preloadDrawableForType(final Context context, final String accountType) { + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + getDrawableForType(context, accountType); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); + } + /** * Gets an icon associated with a particular account type. If none found, return null. * @param accountType the type of account @@ -52,15 +63,19 @@ public class AuthenticatorHelper { */ public Drawable getDrawableForType(Context context, final String accountType) { Drawable icon = null; - if (mAccTypeIconCache.containsKey(accountType)) { - return mAccTypeIconCache.get(accountType); + synchronized (mAccTypeIconCache) { + if (mAccTypeIconCache.containsKey(accountType)) { + return mAccTypeIconCache.get(accountType); + } } if (mTypeToAuthDescription.containsKey(accountType)) { try { AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType); Context authContext = context.createPackageContext(desc.packageName, 0); icon = authContext.getResources().getDrawable(desc.iconId); - mAccTypeIconCache.put(accountType, icon); + synchronized (mAccTypeIconCache) { + mAccTypeIconCache.put(accountType, icon); + } } catch (PackageManager.NameNotFoundException e) { } catch (Resources.NotFoundException e) { } diff --git a/src/com/android/settings/accounts/ManageAccountsSettings.java b/src/com/android/settings/accounts/ManageAccountsSettings.java index 8a093ca6b1f..a7f0f3057db 100644 --- a/src/com/android/settings/accounts/ManageAccountsSettings.java +++ b/src/com/android/settings/accounts/ManageAccountsSettings.java @@ -21,10 +21,7 @@ import android.accounts.AccountManager; import android.accounts.OnAccountsUpdateListener; import android.app.ActionBar; import android.app.Activity; -import android.app.ActivityManager; -import android.app.ActivityManagerNative; import android.content.ContentResolver; -import android.content.Context; import android.content.Intent; import android.content.SyncAdapterType; import android.content.SyncInfo; @@ -36,29 +33,26 @@ import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; -import android.text.format.DateFormat; import android.util.Log; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.CompoundButton; import android.widget.ListView; -import android.widget.Switch; import android.widget.TextView; import com.android.settings.AccountPreference; import com.android.settings.R; -import com.android.settings.Settings; import com.android.settings.Utils; +import com.android.settings.location.LocationSettings; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; +/** Manages settings for Google Account. */ public class ManageAccountsSettings extends AccountPreferenceBase implements OnAccountsUpdateListener { @@ -74,7 +68,6 @@ public class ManageAccountsSettings extends AccountPreferenceBase private String[] mAuthorities; private TextView mErrorInfoView; - private SettingsDialogFragment mDialogFragment; // If an account type is set, then show only accounts of that type private String mAccountType; // Temporary hack, to deal with backward compatibility @@ -354,18 +347,71 @@ public class ManageAccountsSettings extends AccountPreferenceBase } } + /** Listens to a preference click event and starts a fragment */ + private class FragmentStarter + implements Preference.OnPreferenceClickListener { + private final String mClass; + private final int mTitleRes; + + /** + * @param className the class name of the fragment to be started. + * @param title the title resource id of the started preference panel. + */ + public FragmentStarter(String className, int title) { + mClass = className; + mTitleRes = title; + } + + @Override + public boolean onPreferenceClick(Preference preference) { + ((PreferenceActivity) getActivity()).startPreferencePanel( + mClass, null, mTitleRes, null, null, 0); + return true; + } + } + + /** + * Filters through the preference list provided by GoogleLoginService. + * + * This method removes all the invalid intent from the list, adds account name as extra into the + * intent, and hack the location settings to start it as a fragment. + */ private void updatePreferenceIntents(PreferenceScreen prefs) { PackageManager pm = getActivity().getPackageManager(); for (int i = 0; i < prefs.getPreferenceCount();) { - Intent intent = prefs.getPreference(i).getIntent(); + Preference pref = prefs.getPreference(i); + Intent intent = pref.getIntent(); if (intent != null) { - ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); - if (ri == null) { - prefs.removePreference(prefs.getPreference(i)); - continue; + // Hack. Launch "Location" as fragment instead of as activity. + // + // When "Location" is launched as activity via Intent, there's no "Up" button at the + // top left, and if there's another running instance of "Location" activity, the + // back stack would usually point to some other place so the user won't be able to + // go back to the previous page by "back" key. Using fragment is a much easier + // solution to those problems. + // + // If we set Intent to null and assign a fragment to the PreferenceScreen item here, + // in order to make it work as expected, we still need to modify the container + // PreferenceActivity, override onPreferenceStartFragment() and call + // startPreferencePanel() there. In order to inject the title string there, more + // dirty further hack is still needed. It's much easier and cleaner to listen to + // preference click event here directly. + if (intent.getAction().equals( + android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)) { + // The OnPreferenceClickListener overrides the click event completely. No intent + // will get fired. + pref.setOnPreferenceClickListener(new FragmentStarter( + LocationSettings.class.getName(), + R.string.location_settings_title)); } else { - intent.putExtra(ACCOUNT_KEY, mFirstAccount); - intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); + ResolveInfo ri = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + if (ri == null) { + prefs.removePreference(pref); + continue; + } else { + intent.putExtra(ACCOUNT_KEY, mFirstAccount); + intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); + } } } i++; diff --git a/src/com/android/settings/accounts/SyncSettingsActivity.java b/src/com/android/settings/accounts/SyncSettingsActivity.java index ed0089e936a..96f16d684a4 100644 --- a/src/com/android/settings/accounts/SyncSettingsActivity.java +++ b/src/com/android/settings/accounts/SyncSettingsActivity.java @@ -16,9 +16,12 @@ package com.android.settings.accounts; +import android.app.Fragment; import android.content.Intent; import android.preference.PreferenceActivity; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; + /** * Launcher activity for the SyncSettings fragment. * @@ -31,4 +34,10 @@ public class SyncSettingsActivity extends PreferenceActivity { modIntent.putExtra(EXTRA_NO_HEADERS, true); return modIntent; } + + @Override + protected boolean isValidFragment(String fragmentName) { + if (SyncSettings.class.getName().equals(fragmentName)) return true; + return false; + } } \ No newline at end of file diff --git a/src/com/android/settings/applications/AppOpsState.java b/src/com/android/settings/applications/AppOpsState.java index 39eefe21817..c3964793f2a 100644 --- a/src/com/android/settings/applications/AppOpsState.java +++ b/src/com/android/settings/applications/AppOpsState.java @@ -101,12 +101,16 @@ public class AppOpsState { AppOpsManager.OP_FINE_LOCATION, AppOpsManager.OP_GPS, AppOpsManager.OP_WIFI_SCAN, - AppOpsManager.OP_NEIGHBORING_CELLS }, + AppOpsManager.OP_NEIGHBORING_CELLS, + AppOpsManager.OP_MONITOR_LOCATION, + AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION}, new boolean[] { true, true, false, false, - false } + false, + false, + false} ); public static final OpsTemplate PERSONAL_TEMPLATE = new OpsTemplate( @@ -149,29 +153,53 @@ public class AppOpsState { true } ); - public static final OpsTemplate DEVICE_TEMPLATE = new OpsTemplate( + public static final OpsTemplate MEDIA_TEMPLATE = new OpsTemplate( new int[] { AppOpsManager.OP_VIBRATE, - AppOpsManager.OP_POST_NOTIFICATION, + AppOpsManager.OP_CAMERA, + AppOpsManager.OP_RECORD_AUDIO, + AppOpsManager.OP_PLAY_AUDIO, + AppOpsManager.OP_TAKE_MEDIA_BUTTONS, + AppOpsManager.OP_TAKE_AUDIO_FOCUS, + AppOpsManager.OP_AUDIO_MASTER_VOLUME, + AppOpsManager.OP_AUDIO_VOICE_VOLUME, + AppOpsManager.OP_AUDIO_RING_VOLUME, + AppOpsManager.OP_AUDIO_MEDIA_VOLUME, + AppOpsManager.OP_AUDIO_ALARM_VOLUME, + AppOpsManager.OP_AUDIO_NOTIFICATION_VOLUME, + AppOpsManager.OP_AUDIO_BLUETOOTH_VOLUME, }, + new boolean[] { false, + true, + true, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false } + ); + + public static final OpsTemplate DEVICE_TEMPLATE = new OpsTemplate( + new int[] { AppOpsManager.OP_POST_NOTIFICATION, AppOpsManager.OP_ACCESS_NOTIFICATIONS, AppOpsManager.OP_CALL_PHONE, AppOpsManager.OP_WRITE_SETTINGS, AppOpsManager.OP_SYSTEM_ALERT_WINDOW, - AppOpsManager.OP_CAMERA, - AppOpsManager.OP_RECORD_AUDIO, - AppOpsManager.OP_PLAY_AUDIO }, + AppOpsManager.OP_WAKE_LOCK }, new boolean[] { false, - false, true, true, true, true, - true, - true, - true } + true, } ); public static final OpsTemplate[] ALL_TEMPLATES = new OpsTemplate[] { - LOCATION_TEMPLATE, PERSONAL_TEMPLATE, MESSAGING_TEMPLATE, DEVICE_TEMPLATE + LOCATION_TEMPLATE, PERSONAL_TEMPLATE, MESSAGING_TEMPLATE, + MEDIA_TEMPLATE, DEVICE_TEMPLATE }; /** diff --git a/src/com/android/settings/applications/AppOpsSummary.java b/src/com/android/settings/applications/AppOpsSummary.java index b0d9ad158b0..4cee8e583a8 100644 --- a/src/com/android/settings/applications/AppOpsSummary.java +++ b/src/com/android/settings/applications/AppOpsSummary.java @@ -43,6 +43,7 @@ public class AppOpsSummary extends Fragment { AppOpsState.LOCATION_TEMPLATE, AppOpsState.PERSONAL_TEMPLATE, AppOpsState.MESSAGING_TEMPLATE, + AppOpsState.MEDIA_TEMPLATE, AppOpsState.DEVICE_TEMPLATE }; diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index 3e9ba54d059..1b3938c2d74 100644 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -66,6 +66,7 @@ import android.util.Log; import java.lang.ref.WeakReference; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import android.view.LayoutInflater; import android.view.Menu; @@ -143,6 +144,8 @@ public class InstalledAppDetails extends Fragment private PackageMoveObserver mPackageMoveObserver; + private final HashSet mHomePackages = new HashSet(); + private boolean mDisableAfterUninstall; private boolean mHaveSizes = false; @@ -242,10 +245,14 @@ public class InstalledAppDetails extends Fragment } private void initDataButtons() { - if ((mAppEntry.info.flags&(ApplicationInfo.FLAG_SYSTEM - | ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA)) - == ApplicationInfo.FLAG_SYSTEM - || mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) { + // If the app doesn't have its own space management UI + // And it's a system app that doesn't allow clearing user data or is an active admin + // Then disable the Clear Data button. + if (mAppEntry.info.manageSpaceActivityName == null + && ((mAppEntry.info.flags&(ApplicationInfo.FLAG_SYSTEM + | ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA)) + == ApplicationInfo.FLAG_SYSTEM + || mDpm.packageHasActiveAdmins(mPackageInfo.packageName))) { mClearDataButton.setText(R.string.clear_user_data_text); mClearDataButton.setEnabled(false); mCanClearData = false; @@ -316,29 +323,20 @@ public class InstalledAppDetails extends Fragment private boolean handleDisableable(Button button) { boolean disableable = false; - try { - // Try to prevent the user from bricking their phone - // by not allowing disabling of apps signed with the - // system cert and any launcher app in the system. - PackageInfo sys = mPm.getPackageInfo("android", - PackageManager.GET_SIGNATURES); - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_HOME); - intent.setPackage(mAppEntry.info.packageName); - List homes = mPm.queryIntentActivities(intent, 0); - if ((homes != null && homes.size() > 0) || isThisASystemPackage()) { - // Disable button for core system applications. - button.setText(R.string.disable_text); - } else if (mAppEntry.info.enabled) { - button.setText(R.string.disable_text); - disableable = true; - } else { - button.setText(R.string.enable_text); - disableable = true; - } - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Unable to get package info", e); + // Try to prevent the user from bricking their phone + // by not allowing disabling of apps signed with the + // system cert and any launcher app in the system. + if (mHomePackages.contains(mAppEntry.info.packageName) || isThisASystemPackage()) { + // Disable button for core system applications. + button.setText(R.string.disable_text); + } else if (mAppEntry.info.enabled) { + button.setText(R.string.disable_text); + disableable = true; + } else { + button.setText(R.string.enable_text); + disableable = true; } + return disableable; } @@ -634,6 +632,21 @@ public class InstalledAppDetails extends Fragment return packageName; } + private boolean signaturesMatch(String pkg1, String pkg2) { + if (pkg1 != null && pkg2 != null) { + try { + final int match = mPm.checkSignatures(pkg1, pkg2); + if (match >= PackageManager.SIGNATURE_MATCH) { + return true; + } + } catch (Exception e) { + // e.g. named alternate package not found during lookup; + // this is an expected case sometimes + } + } + return false; + } + private boolean refreshUi() { if (mMoveInProgress) { return true; @@ -648,6 +661,25 @@ public class InstalledAppDetails extends Fragment return false; // onCreate must have failed, make sure to exit } + // Get list of "home" apps and trace through any meta-data references + List homeActivities = new ArrayList(); + mPm.getHomeActivities(homeActivities); + mHomePackages.clear(); + for (int i = 0; i< homeActivities.size(); i++) { + ResolveInfo ri = homeActivities.get(i); + final String activityPkg = ri.activityInfo.packageName; + mHomePackages.add(activityPkg); + + // Also make sure to include anything proxying for the home app + final Bundle metadata = ri.activityInfo.metaData; + if (metadata != null) { + final String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE); + if (signaturesMatch(metaPkg, activityPkg)) { + mHomePackages.add(metaPkg); + } + } + } + // Get list of preferred activities List prefActList = new ArrayList(); @@ -1233,8 +1265,8 @@ public class InstalledAppDetails extends Fragment intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName }); intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid); intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid)); - getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null, - Activity.RESULT_CANCELED, null, null); + getActivity().sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT, null, + mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null); } } diff --git a/src/com/android/settings/applications/InstalledAppDetailsTop.java b/src/com/android/settings/applications/InstalledAppDetailsTop.java index 4051aeba767..44a88fb5e4d 100644 --- a/src/com/android/settings/applications/InstalledAppDetailsTop.java +++ b/src/com/android/settings/applications/InstalledAppDetailsTop.java @@ -1,9 +1,13 @@ package com.android.settings.applications; +import android.app.Fragment; import android.content.Intent; import android.preference.PreferenceActivity; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; + public class InstalledAppDetailsTop extends PreferenceActivity { + @Override public Intent getIntent() { Intent modIntent = new Intent(super.getIntent()); @@ -11,4 +15,11 @@ public class InstalledAppDetailsTop extends PreferenceActivity { modIntent.putExtra(EXTRA_NO_HEADERS, true); return modIntent; } + + @Override + protected boolean isValidFragment(String fragmentName) { + if (InstalledAppDetails.class.getName().equals(fragmentName)) return true; + return false; + } + } diff --git a/src/com/android/settings/applications/LinearColorBar.java b/src/com/android/settings/applications/LinearColorBar.java index 74fb02e3757..f374c293b32 100644 --- a/src/com/android/settings/applications/LinearColorBar.java +++ b/src/com/android/settings/applications/LinearColorBar.java @@ -12,30 +12,53 @@ import android.graphics.Rect; import android.graphics.Shader; import android.util.AttributeSet; import android.util.DisplayMetrics; +import android.view.MotionEvent; import android.widget.LinearLayout; public class LinearColorBar extends LinearLayout { static final int LEFT_COLOR = 0xff0099cc; static final int MIDDLE_COLOR = 0xff0099cc; static final int RIGHT_COLOR = 0xff888888; + static final int GRAY_COLOR = 0xff555555; + static final int WHITE_COLOR = 0xffffffff; private float mRedRatio; private float mYellowRatio; private float mGreenRatio; + private int mLeftColor = LEFT_COLOR; + private int mMiddleColor = MIDDLE_COLOR; + private int mRightColor = RIGHT_COLOR; + + private boolean mShowIndicator = true; private boolean mShowingGreen; + private OnRegionTappedListener mOnRegionTappedListener; + private int mColoredRegions = REGION_RED | REGION_YELLOW | REGION_GREEN; + final Rect mRect = new Rect(); final Paint mPaint = new Paint(); int mLastInterestingLeft, mLastInterestingRight; int mLineWidth; + int mLastLeftDiv, mLastRightDiv; + int mLastRegion; + final Path mColorPath = new Path(); final Path mEdgePath = new Path(); final Paint mColorGradientPaint = new Paint(); final Paint mEdgeGradientPaint = new Paint(); + public static final int REGION_RED = 1<<0; + public static final int REGION_YELLOW = 1<<1; + public static final int REGION_GREEN = 1<<2; + public static final int REGION_ALL = REGION_RED | REGION_YELLOW | REGION_GREEN; + + public interface OnRegionTappedListener { + public void onRegionTapped(int region); + } + public LinearColorBar(Context context, AttributeSet attrs) { super(context, attrs); setWillNotDraw(false); @@ -50,6 +73,18 @@ public class LinearColorBar extends LinearLayout { } + public void setOnRegionTappedListener(OnRegionTappedListener listener) { + if (listener != mOnRegionTappedListener) { + mOnRegionTappedListener = listener; + setClickable(listener != null); + } + } + + public void setColoredRegions(int regions) { + mColoredRegions = regions; + invalidate(); + } + public void setRatios(float red, float yellow, float green) { mRedRatio = red; mYellowRatio = yellow; @@ -57,6 +92,20 @@ public class LinearColorBar extends LinearLayout { invalidate(); } + public void setColors(int red, int yellow, int green) { + mLeftColor = red; + mMiddleColor = yellow; + mRightColor = green; + updateIndicator(); + invalidate(); + } + + public void setShowIndicator(boolean showIndicator) { + mShowIndicator = showIndicator; + updateIndicator(); + invalidate(); + } + public void setShowingGreen(boolean showingGreen) { if (mShowingGreen != showingGreen) { mShowingGreen = showingGreen; @@ -70,12 +119,15 @@ public class LinearColorBar extends LinearLayout { if (off < 0) off = 0; mRect.top = off; mRect.bottom = getHeight(); + if (!mShowIndicator) { + return; + } if (mShowingGreen) { mColorGradientPaint.setShader(new LinearGradient( - 0, 0, 0, off-2, RIGHT_COLOR&0xffffff, RIGHT_COLOR, Shader.TileMode.CLAMP)); + 0, 0, 0, off-2, mRightColor &0xffffff, mRightColor, Shader.TileMode.CLAMP)); } else { mColorGradientPaint.setShader(new LinearGradient( - 0, 0, 0, off-2, MIDDLE_COLOR&0xffffff, MIDDLE_COLOR, Shader.TileMode.CLAMP)); + 0, 0, 0, off-2, mMiddleColor&0xffffff, mMiddleColor, Shader.TileMode.CLAMP)); } mEdgeGradientPaint.setShader(new LinearGradient( 0, 0, 0, off/2, 0x00a0a0a0, 0xffa0a0a0, Shader.TileMode.CLAMP)); @@ -87,6 +139,50 @@ public class LinearColorBar extends LinearLayout { updateIndicator(); } + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mOnRegionTappedListener != null) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: { + final int x = (int) event.getX(); + if (x < mLastLeftDiv) { + mLastRegion = REGION_RED; + } else if (x < mLastRightDiv) { + mLastRegion = REGION_YELLOW; + } else { + mLastRegion = REGION_GREEN; + } + invalidate(); + } break; + } + } + return super.onTouchEvent(event); + } + + @Override + protected void dispatchSetPressed(boolean pressed) { + invalidate(); + } + + @Override + public boolean performClick() { + if (mOnRegionTappedListener != null && mLastRegion != 0) { + mOnRegionTappedListener.onRegionTapped(mLastRegion); + mLastRegion = 0; + } + return super.performClick(); + } + + private int pickColor(int color, int region) { + if (isPressed() && (mLastRegion®ion) != 0) { + return WHITE_COLOR; + } + if ((mColoredRegions®ion) == 0) { + return GRAY_COLOR; + } + return color; + } + @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); @@ -111,7 +207,7 @@ public class LinearColorBar extends LinearLayout { if (mLastInterestingLeft != indicatorLeft || mLastInterestingRight != indicatorRight) { mColorPath.reset(); mEdgePath.reset(); - if (indicatorLeft < indicatorRight) { + if (mShowIndicator && indicatorLeft < indicatorRight) { final int midTopY = mRect.top; final int midBottomY = 0; final int xoff = 2; @@ -146,18 +242,21 @@ public class LinearColorBar extends LinearLayout { if (left < right) { mRect.left = left; mRect.right = right; - mPaint.setColor(LEFT_COLOR); + mPaint.setColor(pickColor(mLeftColor, REGION_RED)); canvas.drawRect(mRect, mPaint); width -= (right-left); left = right; } + mLastLeftDiv = right; + mLastRightDiv = right2; + right = right2; if (left < right) { mRect.left = left; mRect.right = right; - mPaint.setColor(MIDDLE_COLOR); + mPaint.setColor(pickColor(mMiddleColor, REGION_YELLOW)); canvas.drawRect(mRect, mPaint); width -= (right-left); left = right; @@ -168,7 +267,7 @@ public class LinearColorBar extends LinearLayout { if (left < right) { mRect.left = left; mRect.right = right; - mPaint.setColor(RIGHT_COLOR); + mPaint.setColor(pickColor(mRightColor, REGION_GREEN)); canvas.drawRect(mRect, mPaint); } } diff --git a/src/com/android/settings/applications/LinearColorPreference.java b/src/com/android/settings/applications/LinearColorPreference.java new file mode 100644 index 00000000000..8d9fb724252 --- /dev/null +++ b/src/com/android/settings/applications/LinearColorPreference.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import android.content.Context; +import android.preference.Preference; +import android.view.View; +import com.android.settings.R; + +public class LinearColorPreference extends Preference { + float mRedRatio; + float mYellowRatio; + float mGreenRatio; + int mColoredRegions = LinearColorBar.REGION_ALL; + LinearColorBar.OnRegionTappedListener mOnRegionTappedListener; + + public LinearColorPreference(Context context) { + super(context); + setLayoutResource(R.layout.preference_linearcolor); + } + + public void setRatios(float red, float yellow, float green) { + mRedRatio = red; + mYellowRatio = yellow; + mGreenRatio = green; + notifyChanged(); + } + + public void setOnRegionTappedListener(LinearColorBar.OnRegionTappedListener listener) { + mOnRegionTappedListener = listener; + notifyChanged(); + } + + public void setColoredRegions(int regions) { + mColoredRegions = regions; + notifyChanged(); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + LinearColorBar colors = (LinearColorBar)view.findViewById( + R.id.linear_color_bar); + colors.setShowIndicator(false); + colors.setColors(0xffaa5030, 0xffaaaa30, 0xff30aa50); + colors.setRatios(mRedRatio, mYellowRatio, mGreenRatio); + colors.setColoredRegions(mColoredRegions); + colors.setOnRegionTappedListener(mOnRegionTappedListener); + } +} diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index d37688c0faf..aa10c9e9d91 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -50,6 +50,7 @@ import android.provider.Settings; import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.ViewPager; +import android.text.BidiFormatter; import android.text.format.Formatter; import android.util.Log; import android.view.LayoutInflater; @@ -385,20 +386,21 @@ public class ManageApplications extends Fragment implements return; } if (mTotalStorage > 0) { + BidiFormatter bidiFormatter = BidiFormatter.getInstance(); mColorBar.setRatios((mTotalStorage-mFreeStorage-mAppStorage)/(float)mTotalStorage, mAppStorage/(float)mTotalStorage, mFreeStorage/(float)mTotalStorage); long usedStorage = mTotalStorage - mFreeStorage; if (mLastUsedStorage != usedStorage) { mLastUsedStorage = usedStorage; - String sizeStr = Formatter.formatShortFileSize( - mOwner.getActivity(), usedStorage); + String sizeStr = bidiFormatter.unicodeWrap( + Formatter.formatShortFileSize(mOwner.getActivity(), usedStorage)); mUsedStorageText.setText(mOwner.getActivity().getResources().getString( R.string.service_foreground_processes, sizeStr)); } if (mLastFreeStorage != mFreeStorage) { mLastFreeStorage = mFreeStorage; - String sizeStr = Formatter.formatShortFileSize( - mOwner.getActivity(), mFreeStorage); + String sizeStr = bidiFormatter.unicodeWrap( + Formatter.formatShortFileSize(mOwner.getActivity(), mFreeStorage)); mFreeStorageText.setText(mOwner.getActivity().getResources().getString( R.string.service_background_processes, sizeStr)); } diff --git a/src/com/android/settings/applications/ProcStatsEntry.java b/src/com/android/settings/applications/ProcStatsEntry.java new file mode 100644 index 00000000000..0821ced2336 --- /dev/null +++ b/src/com/android/settings/applications/ProcStatsEntry.java @@ -0,0 +1,353 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.ArrayMap; +import android.util.Log; +import com.android.internal.app.ProcessStats; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +public final class ProcStatsEntry implements Parcelable { + private static final String TAG = "ProcStatsEntry"; + private static boolean DEBUG = ProcessStatsUi.DEBUG; + + final String mPackage; + final int mUid; + final String mName; + final ArrayList mPackages = new ArrayList(); + final long mDuration; + final long mAvgPss; + final long mMaxPss; + final long mAvgUss; + final long mMaxUss; + final long mWeight; + + String mBestTargetPackage; + + ArrayMap> mServices = new ArrayMap>(1); + + public ApplicationInfo mUiTargetApp; + public String mUiLabel; + public String mUiBaseLabel; + public String mUiPackage; + + public ProcStatsEntry(ProcessStats.ProcessState proc, String packageName, + ProcessStats.ProcessDataCollection tmpTotals, boolean useUss, boolean weightWithTime) { + ProcessStats.computeProcessData(proc, tmpTotals, 0); + mPackage = proc.mPackage; + mUid = proc.mUid; + mName = proc.mName; + mPackages.add(packageName); + mDuration = tmpTotals.totalTime; + mAvgPss = tmpTotals.avgPss; + mMaxPss = tmpTotals.maxPss; + mAvgUss = tmpTotals.avgUss; + mMaxUss = tmpTotals.maxUss; + mWeight = (weightWithTime ? mDuration : 1) * (useUss ? mAvgUss : mAvgPss); + if (DEBUG) Log.d(TAG, "New proc entry " + proc.mName + ": dur=" + mDuration + + " avgpss=" + mAvgPss + " weight=" + mWeight); + } + + public ProcStatsEntry(Parcel in) { + mPackage = in.readString(); + mUid = in.readInt(); + mName = in.readString(); + in.readStringList(mPackages); + mDuration = in.readLong(); + mAvgPss = in.readLong(); + mMaxPss = in.readLong(); + mAvgUss = in.readLong(); + mMaxUss = in.readLong(); + mWeight = in.readLong(); + mBestTargetPackage = in.readString(); + final int N = in.readInt(); + if (N > 0) { + mServices.ensureCapacity(N); + for (int i=0; i value = new ArrayList(); + in.readTypedList(value, Service.CREATOR); + mServices.append(key, value); + } + } + } + + public void addPackage(String packageName) { + mPackages.add(packageName); + } + + public void evaluateTargetPackage(PackageManager pm, ProcessStats stats, + ProcessStats.ProcessDataCollection totals, Comparator compare, + boolean useUss, boolean weightWithTime) { + mBestTargetPackage = null; + if (mPackages.size() == 1) { + if (DEBUG) Log.d(TAG, "Eval pkg of " + mName + ": single pkg " + mPackages.get(0)); + mBestTargetPackage = mPackages.get(0); + } else { + // See if there is one significant package that was running here. + ArrayList subProcs = new ArrayList(); + for (int ipkg=0; ipkg 1) { + Collections.sort(subProcs, compare); + if (subProcs.get(0).mWeight > (subProcs.get(1).mWeight*3)) { + if (DEBUG) Log.d(TAG, "Eval pkg of " + mName + ": best pkg " + + subProcs.get(0).mPackage + " weight " + subProcs.get(0).mWeight + + " better than " + subProcs.get(1).mPackage + + " weight " + subProcs.get(1).mWeight); + mBestTargetPackage = subProcs.get(0).mPackage; + return; + } + // Couldn't find one that is best by weight, let's decide on best another + // way: the one that has the longest running service, accounts for at least + // half of the maximum weight, and has specified an explicit app icon. + long maxWeight = subProcs.get(0).mWeight; + long bestRunTime = -1; + for (int i=0; i subProcServices = null; + for (int isp=0, NSP=mServices.size(); isp subServices = mServices.valueAt(isp); + if (subServices.get(0).mPackage.equals(subProcs.get(i).mPackage)) { + subProcServices = subServices; + break; + } + } + long thisRunTime = 0; + if (subProcServices != null) { + for (int iss=0, NSS=subProcServices.size(); iss thisRunTime) { + if (DEBUG) Log.d(TAG, "Eval pkg of " + mName + ": pkg " + + subProcs.get(i).mPackage + " service " + service.mName + + " run time is " + service.mDuration); + thisRunTime = service.mDuration; + break; + } + } + } + if (thisRunTime > bestRunTime) { + if (DEBUG) Log.d(TAG, "Eval pkg of " + mName + ": pkg " + + subProcs.get(i).mPackage + " new best run time " + thisRunTime); + mBestTargetPackage = subProcs.get(i).mPackage; + bestRunTime = thisRunTime; + } else { + if (DEBUG) Log.d(TAG, "Eval pkg of " + mName + ": pkg " + + subProcs.get(i).mPackage + " run time " + thisRunTime + + " not as good as last " + bestRunTime); + } + } + } else if (subProcs.size() == 1) { + mBestTargetPackage = subProcs.get(0).mPackage; + } + } + } + + public void retrieveUiData(PackageManager pm) { + mUiTargetApp = null; + mUiLabel = mUiBaseLabel = mName; + mUiPackage = mBestTargetPackage; + if (mUiPackage != null) { + // Only one app associated with this process. + try { + mUiTargetApp = pm.getApplicationInfo(mUiPackage, + PackageManager.GET_DISABLED_COMPONENTS | + PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | + PackageManager.GET_UNINSTALLED_PACKAGES); + String name = mUiBaseLabel = mUiTargetApp.loadLabel(pm).toString(); + if (mName.equals(mUiPackage)) { + mUiLabel = name; + } else { + if (mName.startsWith(mUiPackage)) { + int off = mUiPackage.length(); + if (mName.length() > off) { + off++; + } + mUiLabel = name + " (" + mName.substring(off) + ")"; + } else { + mUiLabel = name + " (" + mName + ")"; + } + } + } catch (PackageManager.NameNotFoundException e) { + } + } + if (mUiTargetApp == null) { + String[] packages = pm.getPackagesForUid(mUid); + if (packages != null) { + for (String curPkg : packages) { + try { + final PackageInfo pi = pm.getPackageInfo(curPkg, + PackageManager.GET_DISABLED_COMPONENTS | + PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | + PackageManager.GET_UNINSTALLED_PACKAGES); + if (pi.sharedUserLabel != 0) { + mUiTargetApp = pi.applicationInfo; + final CharSequence nm = pm.getText(curPkg, + pi.sharedUserLabel, pi.applicationInfo); + if (nm != null) { + mUiBaseLabel = nm.toString(); + mUiLabel = mUiBaseLabel + " (" + mName + ")"; + } else { + mUiBaseLabel = mUiTargetApp.loadLabel(pm).toString(); + mUiLabel = mUiBaseLabel + " (" + mName + ")"; + } + break; + } + } catch (PackageManager.NameNotFoundException e) { + } + } + } else { + // no current packages for this uid, typically because of uninstall + Log.i(TAG, "No package for uid " + mUid); + } + } + } + + public void addService(ProcessStats.ServiceState svc) { + ArrayList services = mServices.get(svc.mPackage); + if (services == null) { + services = new ArrayList(); + mServices.put(svc.mPackage, services); + } + services.add(new Service(svc)); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mPackage); + dest.writeInt(mUid); + dest.writeString(mName); + dest.writeStringList(mPackages); + dest.writeLong(mDuration); + dest.writeLong(mAvgPss); + dest.writeLong(mMaxPss); + dest.writeLong(mAvgUss); + dest.writeLong(mMaxUss); + dest.writeLong(mWeight); + dest.writeString(mBestTargetPackage); + final int N = mServices.size(); + dest.writeInt(N); + for (int i=0; i CREATOR + = new Parcelable.Creator() { + public ProcStatsEntry createFromParcel(Parcel in) { + return new ProcStatsEntry(in); + } + + public ProcStatsEntry[] newArray(int size) { + return new ProcStatsEntry[size]; + } + }; + + public static final class Service implements Parcelable { + final String mPackage; + final String mName; + final String mProcess; + final long mDuration; + + public Service(ProcessStats.ServiceState service) { + mPackage = service.mPackage; + mName = service.mName; + mProcess = service.mProcessName; + mDuration = ProcessStats.dumpSingleServiceTime(null, null, service, + ProcessStats.ServiceState.SERVICE_RUN, + ProcessStats.STATE_NOTHING, 0, 0); + } + + public Service(Parcel in) { + mPackage = in.readString(); + mName = in.readString(); + mProcess = in.readString(); + mDuration = in.readLong(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mPackage); + dest.writeString(mName); + dest.writeString(mProcess); + dest.writeLong(mDuration); + } + + public static final Parcelable.Creator CREATOR + = new Parcelable.Creator() { + public Service createFromParcel(Parcel in) { + return new Service(in); + } + + public Service[] newArray(int size) { + return new Service[size]; + } + }; + } +} diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java new file mode 100644 index 00000000000..326ca7bb345 --- /dev/null +++ b/src/com/android/settings/applications/ProcessStatsDetail.java @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.Fragment; +import android.app.admin.DevicePolicyManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.net.Uri; +import android.os.Bundle; +import android.os.Process; +import android.os.UserHandle; +import android.preference.PreferenceActivity; +import android.text.format.Formatter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import com.android.settings.R; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +import static com.android.settings.Utils.prepareCustomPreferencesList; + +public class ProcessStatsDetail extends Fragment implements Button.OnClickListener { + private static final String TAG = "ProcessStatsDetail"; + + public static final int ACTION_FORCE_STOP = 1; + + public static final String EXTRA_ENTRY = "entry"; + public static final String EXTRA_USE_USS = "use_uss"; + public static final String EXTRA_MAX_WEIGHT = "max_weight"; + public static final String EXTRA_TOTAL_TIME = "total_time"; + + private PackageManager mPm; + private DevicePolicyManager mDpm; + + private ProcStatsEntry mEntry; + private boolean mUseUss; + private long mMaxWeight; + private long mTotalTime; + + private View mRootView; + private TextView mTitleView; + private ViewGroup mTwoButtonsPanel; + private Button mForceStopButton; + private Button mReportButton; + private ViewGroup mDetailsParent; + private ViewGroup mServicesParent; + + public static String makePercentString(Resources res, long amount, long total) { + final double percent = (((double)amount) / total) * 100; + return res.getString(R.string.percentage, (int) Math.round(percent)); + } + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + mPm = getActivity().getPackageManager(); + mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE); + final Bundle args = getArguments(); + mEntry = (ProcStatsEntry)args.getParcelable(EXTRA_ENTRY); + mEntry.retrieveUiData(mPm); + mUseUss = args.getBoolean(EXTRA_USE_USS); + mMaxWeight = args.getLong(EXTRA_MAX_WEIGHT); + mTotalTime = args.getLong(EXTRA_TOTAL_TIME); + } + + @Override + public View onCreateView( + LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + final View view = inflater.inflate(R.layout.process_stats_details, container, false); + prepareCustomPreferencesList(container, view, view, false); + + mRootView = view; + createDetails(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + checkForceStop(); + } + + @Override + public void onPause() { + super.onPause(); + } + + private void createDetails() { + final double percentOfWeight = (((double)mEntry.mWeight) / mMaxWeight) * 100; + + int appLevel = (int) Math.ceil(percentOfWeight); + String appLevelText = makePercentString(getResources(), mEntry.mDuration, mTotalTime); + + // Set all values in the header. + final TextView summary = (TextView) mRootView.findViewById(android.R.id.summary); + summary.setText(mEntry.mName); + summary.setVisibility(View.VISIBLE); + mTitleView = (TextView) mRootView.findViewById(android.R.id.title); + mTitleView.setText(mEntry.mUiBaseLabel); + final TextView text1 = (TextView)mRootView.findViewById(android.R.id.text1); + text1.setText(appLevelText); + final ProgressBar progress = (ProgressBar) mRootView.findViewById(android.R.id.progress); + progress.setProgress(appLevel); + final ImageView icon = (ImageView) mRootView.findViewById(android.R.id.icon); + if (mEntry.mUiTargetApp != null) { + icon.setImageDrawable(mEntry.mUiTargetApp.loadIcon(mPm)); + } + + mTwoButtonsPanel = (ViewGroup)mRootView.findViewById(R.id.two_buttons_panel); + mForceStopButton = (Button)mRootView.findViewById(R.id.right_button); + mReportButton = (Button)mRootView.findViewById(R.id.left_button); + mForceStopButton.setEnabled(false); + mReportButton.setVisibility(View.INVISIBLE); + + mDetailsParent = (ViewGroup)mRootView.findViewById(R.id.details); + mServicesParent = (ViewGroup)mRootView.findViewById(R.id.services); + + fillDetailsSection(); + fillServicesSection(); + + if (mEntry.mUid >= android.os.Process.FIRST_APPLICATION_UID) { + mForceStopButton.setText(R.string.force_stop); + mForceStopButton.setTag(ACTION_FORCE_STOP); + mForceStopButton.setOnClickListener(this); + mTwoButtonsPanel.setVisibility(View.VISIBLE); + } else { + mTwoButtonsPanel.setVisibility(View.GONE); + } + } + + public void onClick(View v) { + doAction((Integer) v.getTag()); + } + + private void doAction(int action) { + PreferenceActivity pa = (PreferenceActivity)getActivity(); + switch (action) { + case ACTION_FORCE_STOP: + killProcesses(); + break; + } + } + + private void addPackageHeaderItem(ViewGroup parent, String packageName) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + ViewGroup item = (ViewGroup) inflater.inflate(R.layout.running_processes_item, + null); + parent.addView(item); + final ImageView icon = (ImageView) item.findViewById(R.id.icon); + TextView nameView = (TextView) item.findViewById(R.id.name); + TextView descriptionView = (TextView) item.findViewById(R.id.description); + try { + ApplicationInfo ai = mPm.getApplicationInfo(packageName, 0); + icon.setImageDrawable(ai.loadIcon(mPm)); + nameView.setText(ai.loadLabel(mPm)); + } catch (PackageManager.NameNotFoundException e) { + } + descriptionView.setText(packageName); + } + + private void addDetailsItem(ViewGroup parent, CharSequence label, CharSequence value) { + LayoutInflater inflater = getActivity().getLayoutInflater(); + ViewGroup item = (ViewGroup) inflater.inflate(R.layout.power_usage_detail_item_text, + null); + parent.addView(item); + TextView labelView = (TextView) item.findViewById(R.id.label); + TextView valueView = (TextView) item.findViewById(R.id.value); + labelView.setText(label); + valueView.setText(value); + } + + private void fillDetailsSection() { + addDetailsItem(mDetailsParent, getResources().getText(R.string.process_stats_avg_ram_use), + Formatter.formatShortFileSize(getActivity(), + (mUseUss ? mEntry.mAvgUss : mEntry.mAvgPss) * 1024)); + addDetailsItem(mDetailsParent, getResources().getText(R.string.process_stats_max_ram_use), + Formatter.formatShortFileSize(getActivity(), + (mUseUss ? mEntry.mMaxUss : mEntry.mMaxPss) * 1024)); + addDetailsItem(mDetailsParent, getResources().getText(R.string.process_stats_run_time), + makePercentString(getResources(), mEntry.mDuration, mTotalTime)); + } + + final static Comparator sServiceCompare + = new Comparator() { + @Override + public int compare(ProcStatsEntry.Service lhs, ProcStatsEntry.Service rhs) { + if (lhs.mDuration < rhs.mDuration) { + return 1; + } else if (lhs.mDuration > rhs.mDuration) { + return -1; + } + return 0; + } + }; + + final static Comparator> sServicePkgCompare + = new Comparator>() { + @Override + public int compare(ArrayList lhs, + ArrayList rhs) { + long topLhs = lhs.size() > 0 ? lhs.get(0).mDuration : 0; + long topRhs = rhs.size() > 0 ? rhs.get(0).mDuration : 0; + if (topLhs < topRhs) { + return 1; + } else if (topLhs > topRhs) { + return -1; + } + return 0; + } + }; + + private void fillServicesSection() { + if (mEntry.mServices.size() > 0) { + boolean addPackageSections = false; + // Sort it all. + ArrayList> servicePkgs + = new ArrayList>(); + for (int ip=0; ip services = + (ArrayList)mEntry.mServices.valueAt(ip).clone(); + Collections.sort(services, sServiceCompare); + servicePkgs.add(services); + } + if (mEntry.mServices.size() > 1 + || !mEntry.mServices.valueAt(0).get(0).mPackage.equals(mEntry.mPackage)) { + addPackageSections = true; + // Sort these so that the one(s) with the longest run durations are on top. + Collections.sort(servicePkgs, sServicePkgCompare); + } + for (int ip=0; ip services = servicePkgs.get(ip); + if (addPackageSections) { + addPackageHeaderItem(mServicesParent, services.get(0).mPackage); + } + for (int is=0; is= 0 && tail < (label.length()-1)) { + label = label.substring(tail+1); + } + long duration = service.mDuration; + final double percentOfTime = (((double)duration) / mTotalTime) * 100; + addDetailsItem(mServicesParent, label, getActivity().getResources().getString( + R.string.percentage, (int) Math.ceil(percentOfTime))); + } + } + } + } + + private void killProcesses() { + ActivityManager am = (ActivityManager)getActivity().getSystemService( + Context.ACTIVITY_SERVICE); + am.forceStopPackage(mEntry.mUiPackage); + checkForceStop(); + } + + private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + mForceStopButton.setEnabled(getResultCode() != Activity.RESULT_CANCELED); + } + }; + + private void checkForceStop() { + if (mEntry.mUiPackage == null || mEntry.mUid < Process.FIRST_APPLICATION_UID) { + mForceStopButton.setEnabled(false); + return; + } + if (mDpm.packageHasActiveAdmins(mEntry.mUiPackage)) { + mForceStopButton.setEnabled(false); + return; + } + try { + ApplicationInfo info = mPm.getApplicationInfo(mEntry.mUiPackage, 0); + if ((info.flags&ApplicationInfo.FLAG_STOPPED) == 0) { + mForceStopButton.setEnabled(true); + } + } catch (PackageManager.NameNotFoundException e) { + } + Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART, + Uri.fromParts("package", mEntry.mUiPackage, null)); + intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mEntry.mUiPackage }); + intent.putExtra(Intent.EXTRA_UID, mEntry.mUid); + intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mEntry.mUid)); + getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null, + Activity.RESULT_CANCELED, null, null); + } +} diff --git a/src/com/android/settings/applications/ProcessStatsPreference.java b/src/com/android/settings/applications/ProcessStatsPreference.java new file mode 100644 index 00000000000..bf2676d4357 --- /dev/null +++ b/src/com/android/settings/applications/ProcessStatsPreference.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.preference.Preference; +import android.text.format.Formatter; +import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; +import com.android.settings.R; + +public class ProcessStatsPreference extends Preference { + private final ProcStatsEntry mEntry; + private int mProgress; + private CharSequence mProgressText; + + public ProcessStatsPreference(Context context, Drawable icon, ProcStatsEntry entry) { + super(context); + mEntry = entry; + setLayoutResource(R.layout.app_percentage_item); + setIcon(icon != null ? icon : new ColorDrawable(0)); + } + + public ProcStatsEntry getEntry() { + return mEntry; + } + + public void setPercent(double percentOfWeight, double percentOfTime) { + mProgress = (int) Math.ceil(percentOfWeight); + mProgressText = getContext().getResources().getString( + R.string.percentage, (int) Math.round(percentOfTime)); + notifyChanged(); + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + final ProgressBar progress = (ProgressBar) view.findViewById(android.R.id.progress); + progress.setProgress(mProgress); + + final TextView text1 = (TextView) view.findViewById(android.R.id.text1); + text1.setText(mProgressText); + } +} diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java new file mode 100644 index 00000000000..8322ea3526f --- /dev/null +++ b/src/com/android/settings/applications/ProcessStatsUi.java @@ -0,0 +1,612 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.applications; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.os.ParcelFileDescriptor; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemClock; +import android.os.UserManager; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceFragment; +import android.preference.PreferenceGroup; +import android.preference.PreferenceScreen; +import android.util.Log; +import android.util.SparseArray; +import android.util.TimeUtils; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.SubMenu; +import com.android.internal.app.IProcessStats; +import com.android.internal.app.ProcessMap; +import com.android.internal.app.ProcessStats; +import com.android.settings.R; +import com.android.settings.fuelgauge.Utils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; + +public class ProcessStatsUi extends PreferenceFragment + implements LinearColorBar.OnRegionTappedListener { + static final String TAG = "ProcessStatsUi"; + static final boolean DEBUG = false; + + private static final String KEY_APP_LIST = "app_list"; + private static final String KEY_MEM_STATUS = "mem_status"; + + private static final int NUM_DURATIONS = 4; + + private static final int MENU_STATS_REFRESH = Menu.FIRST; + private static final int MENU_DURATION = Menu.FIRST + 1; + private static final int MENU_SHOW_SYSTEM = MENU_DURATION + NUM_DURATIONS; + private static final int MENU_USE_USS = MENU_SHOW_SYSTEM + 1; + private static final int MENU_TYPE_BACKGROUND = MENU_USE_USS + 1; + private static final int MENU_TYPE_FOREGROUND = MENU_TYPE_BACKGROUND + 1; + private static final int MENU_TYPE_CACHED = MENU_TYPE_FOREGROUND + 1; + private static final int MENU_HELP = MENU_TYPE_CACHED + 1; + + static final int MAX_ITEMS_TO_LIST = 60; + + final static Comparator sEntryCompare = new Comparator() { + @Override + public int compare(ProcStatsEntry lhs, ProcStatsEntry rhs) { + if (lhs.mWeight < rhs.mWeight) { + return 1; + } else if (lhs.mWeight > rhs.mWeight) { + return -1; + } else if (lhs.mDuration < rhs.mDuration) { + return 1; + } else if (lhs.mDuration > rhs.mDuration) { + return -1; + } + return 0; + } + }; + + private static ProcessStats sStatsXfer; + + IProcessStats mProcessStats; + UserManager mUm; + ProcessStats mStats; + int mMemState; + + private long mDuration; + private long mLastDuration; + private boolean mShowSystem; + private boolean mUseUss; + private int mStatsType; + private int mMemRegion; + + private MenuItem[] mDurationMenus = new MenuItem[NUM_DURATIONS]; + private MenuItem mShowSystemMenu; + private MenuItem mUseUssMenu; + private MenuItem mTypeBackgroundMenu; + private MenuItem mTypeForegroundMenu; + private MenuItem mTypeCachedMenu; + + private PreferenceGroup mAppListGroup; + private Preference mMemStatusPref; + + long mMaxWeight; + long mTotalTime; + + // The actual duration value to use for each duration option. Note these + // are lower than the actual duration, since our durations are computed in + // batches of 3 hours so we want to allow the time we use to be slightly + // smaller than the actual time selected instead of bumping up to 3 hours + // beyond it. + private static final long DURATION_QUANTUM = ProcessStats.COMMIT_PERIOD; + private static long[] sDurations = new long[] { + 3*60*60*1000 - DURATION_QUANTUM/2, 6*60*60*1000 - DURATION_QUANTUM/2, + 12*60*60*1000 - DURATION_QUANTUM/2, 24*60*60*1000 - DURATION_QUANTUM/2 + }; + private static int[] sDurationLabels = new int[] { + R.string.menu_duration_3h, R.string.menu_duration_6h, + R.string.menu_duration_12h, R.string.menu_duration_1d + }; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + if (icicle != null) { + mStats = sStatsXfer; + } + + addPreferencesFromResource(R.xml.process_stats_summary); + mProcessStats = IProcessStats.Stub.asInterface( + ServiceManager.getService(ProcessStats.SERVICE_NAME)); + mUm = (UserManager)getActivity().getSystemService(Context.USER_SERVICE); + mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST); + mMemStatusPref = mAppListGroup.findPreference(KEY_MEM_STATUS); + mDuration = icicle != null ? icicle.getLong("duration", sDurations[0]) : sDurations[0]; + mShowSystem = icicle != null ? icicle.getBoolean("show_system") : false; + mUseUss = icicle != null ? icicle.getBoolean("use_uss") : false; + mStatsType = icicle != null ? icicle.getInt("stats_type", MENU_TYPE_BACKGROUND) + : MENU_TYPE_BACKGROUND; + mMemRegion = icicle != null ? icicle.getInt("mem_region", LinearColorBar.REGION_GREEN) + : LinearColorBar.REGION_GREEN; + setHasOptionsMenu(true); + } + + @Override + public void onResume() { + super.onResume(); + refreshStats(); + } + + @Override + public void onPause() { + super.onPause(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putLong("duration", mDuration); + outState.putBoolean("show_system", mShowSystem); + outState.putBoolean("use_uss", mUseUss); + outState.putInt("stats_type", mStatsType); + outState.putInt("mem_region", mMemRegion); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (getActivity().isChangingConfigurations()) { + sStatsXfer = mStats; + } + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { + if (!(preference instanceof ProcessStatsPreference)) { + return false; + } + + ProcessStatsPreference pgp = (ProcessStatsPreference) preference; + Bundle args = new Bundle(); + args.putParcelable(ProcessStatsDetail.EXTRA_ENTRY, pgp.getEntry()); + args.putBoolean(ProcessStatsDetail.EXTRA_USE_USS, mUseUss); + args.putLong(ProcessStatsDetail.EXTRA_MAX_WEIGHT, mMaxWeight); + args.putLong(ProcessStatsDetail.EXTRA_TOTAL_TIME, mTotalTime); + ((PreferenceActivity) getActivity()).startPreferencePanel( + ProcessStatsDetail.class.getName(), args, R.string.details_title, null, null, 0); + + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + MenuItem refresh = menu.add(0, MENU_STATS_REFRESH, 0, R.string.menu_stats_refresh) + .setIcon(R.drawable.ic_menu_refresh_holo_dark) + .setAlphabeticShortcut('r'); + refresh.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | + MenuItem.SHOW_AS_ACTION_WITH_TEXT); + SubMenu subMenu = menu.addSubMenu(R.string.menu_proc_stats_duration); + for (int i=0; i= MENU_DURATION && id < (MENU_DURATION+NUM_DURATIONS)) { + mDuration = sDurations[id-MENU_DURATION]; + refreshStats(); + } + return false; + } + } + + @Override + public void onRegionTapped(int region) { + if (mMemRegion != region) { + mMemRegion = region; + refreshStats(); + } + } + + private void addNotAvailableMessage() { + Preference notAvailable = new Preference(getActivity()); + notAvailable.setTitle(R.string.power_usage_not_available); + mAppListGroup.addPreference(notAvailable); + } + + public static final int[] BACKGROUND_AND_SYSTEM_PROC_STATES = new int[] { + ProcessStats.STATE_PERSISTENT, ProcessStats.STATE_IMPORTANT_FOREGROUND, + ProcessStats.STATE_IMPORTANT_BACKGROUND, ProcessStats.STATE_BACKUP, + ProcessStats.STATE_HEAVY_WEIGHT, ProcessStats.STATE_SERVICE, + ProcessStats.STATE_SERVICE_RESTARTING, ProcessStats.STATE_RECEIVER + }; + + public static final int[] FOREGROUND_PROC_STATES = new int[] { + ProcessStats.STATE_TOP + }; + + public static final int[] CACHED_PROC_STATES = new int[] { + ProcessStats.STATE_CACHED_ACTIVITY, ProcessStats.STATE_CACHED_ACTIVITY_CLIENT, + ProcessStats.STATE_CACHED_EMPTY + }; + + public static final int[] RED_MEM_STATES = new int[] { + ProcessStats.ADJ_MEM_FACTOR_CRITICAL + }; + + public static final int[] YELLOW_MEM_STATES = new int[] { + ProcessStats.ADJ_MEM_FACTOR_CRITICAL, ProcessStats.ADJ_MEM_FACTOR_LOW, + ProcessStats.ADJ_MEM_FACTOR_MODERATE + }; + + private String makeDuration(long time) { + StringBuilder sb = new StringBuilder(32); + TimeUtils.formatDuration(time, sb); + return sb.toString(); + } + + private void refreshStats() { + updateMenus(); + + if (mStats == null || mLastDuration != mDuration) { + load(); + } + + int[] stats; + int statsLabel; + if (mStatsType == MENU_TYPE_FOREGROUND) { + stats = FOREGROUND_PROC_STATES; + statsLabel = R.string.process_stats_type_foreground; + } else if (mStatsType == MENU_TYPE_CACHED) { + stats = CACHED_PROC_STATES; + statsLabel = R.string.process_stats_type_cached; + } else { + stats = mShowSystem ? BACKGROUND_AND_SYSTEM_PROC_STATES + : ProcessStats.BACKGROUND_PROC_STATES; + statsLabel = R.string.process_stats_type_background; + } + + mAppListGroup.removeAll(); + mAppListGroup.setOrderingAsAdded(false); + + mMemStatusPref.setOrder(-2); + mAppListGroup.addPreference(mMemStatusPref); + String durationString = Utils.formatElapsedTime(getActivity(), + mStats.mTimePeriodEndRealtime-mStats.mTimePeriodStartRealtime, false); + CharSequence memString; + CharSequence[] memStatesStr = getResources().getTextArray(R.array.ram_states); + if (mMemState >= 0 && mMemState < memStatesStr.length) { + memString = memStatesStr[mMemState]; + } else { + memString = "?"; + } + mMemStatusPref.setTitle(getActivity().getString(R.string.process_stats_total_duration, + getActivity().getString(statsLabel), durationString)); + mMemStatusPref.setSummary(getActivity().getString(R.string.process_stats_memory_status, + memString)); + /* + mMemStatusPref.setTitle(DateFormat.format(DateFormat.getBestDateTimePattern( + getActivity().getResources().getConfiguration().locale, + "MMMM dd, yyyy h:mm a"), mStats.mTimePeriodStartClock)); + */ + /* + BatteryHistoryPreference hist = new BatteryHistoryPreference(getActivity(), mStats); + hist.setOrder(-1); + mAppListGroup.addPreference(hist); + */ + + long now = SystemClock.uptimeMillis(); + + final PackageManager pm = getActivity().getPackageManager(); + + mTotalTime = ProcessStats.dumpSingleTime(null, null, mStats.mMemFactorDurations, + mStats.mMemFactor, mStats.mStartTime, now); + if (DEBUG) Log.d(TAG, "Total time of stats: " + makeDuration(mTotalTime)); + + long[] memTimes = new long[ProcessStats.ADJ_MEM_FACTOR_COUNT]; + for (int iscreen=0; iscreen entries = new ArrayList(); + + /* + ArrayList rawProcs = mStats.collectProcessesLocked( + ProcessStats.ALL_SCREEN_ADJ, ProcessStats.ALL_MEM_ADJ, + ProcessStats.BACKGROUND_PROC_STATES, now, null); + for (int i=0, N=(rawProcs != null ? rawProcs.size() : 0); i entriesMap = new ProcessMap(); + for (int ipkg=0, N=mStats.mPackages.getMap().size(); ipkg pkgUids + = mStats.mPackages.getMap().valueAt(ipkg); + for (int iu=0; iu 0) { + if (DEBUG) Log.d(TAG, "Adding proc " + proc.mName + "/" + + proc.mUid + ": time=" + makeDuration(ent.mDuration) + " (" + + ((((double)ent.mDuration) / memTotalTime) * 100) + "%)" + + " pss=" + ent.mAvgPss); + entriesMap.put(proc.mName, proc.mUid, ent); + entries.add(ent); + } + } else { + ent.addPackage(st.mPackageName); + } + } + } + } + + if (DEBUG) Log.d(TAG, "-------------------- MAPPING SERVICES"); + + // Add in service info. + if (mStatsType == MENU_TYPE_BACKGROUND) { + for (int ip=0, N=mStats.mPackages.getMap().size(); ip uids = mStats.mPackages.getMap().valueAt(ip); + for (int iu=0; iu> processes + = new SparseArray>(); + for (int ip=0, N=mStats.mProcesses.getMap().size(); ip uids = mStats.mProcesses.getMap().valueAt(ip); + for (int iu=0; iu 0) { + if (DEBUG) Log.d(TAG, "Adding proc " + st.mName + "/" + st.mUid + ": time=" + + makeDuration(ent.mDuration) + " (" + + ((((double)ent.mDuration) / memTotalTime) * 100) + "%)"); + procs.add(ent); + ArrayMap uidProcs = processes.get(ent.mUid); + if (uidProcs == null) { + uidProcs = new ArrayMap(); + processes.put(ent.mUid, uidProcs); + } + uidProcs.put(ent.mName, ent); + } + } + } + */ + + Collections.sort(entries, sEntryCompare); + + long maxWeight = 1; + for (int i=0, N=(entries != null ? entries.size() : 0); i { private int mPhonebookPermissionChoice; + private int mMessagePermissionChoice; + + private final Collection mCallbacks = new ArrayList(); - // Following constants indicate the user's choices of Phone book access settings + // Following constants indicate the user's choices of Phone book/message access settings // User hasn't made any choice or settings app has wiped out the memory - final static int PHONEBOOK_ACCESS_UNKNOWN = 0; + final static int ACCESS_UNKNOWN = 0; // User has accepted the connection and let Settings app remember the decision - final static int PHONEBOOK_ACCESS_ALLOWED = 1; + final static int ACCESS_ALLOWED = 1; // User has rejected the connection and let Settings app remember the decision - final static int PHONEBOOK_ACCESS_REJECTED = 2; + final static int ACCESS_REJECTED = 2; + private final static String PHONEBOOK_PREFS_NAME = "bluetooth_phonebook_permission"; + private final static String MESSAGE_PREFS_NAME = "bluetooth_message_permission"; /** * When we connect to multiple profiles, we only want to display a single @@ -125,6 +130,23 @@ final class CachedBluetoothDevice implements Comparable { return; } mProfileConnectionState.put(profile, newProfileState); + if (newProfileState == BluetoothProfile.STATE_DISCONNECTED) { + // check whether we are disconnected with this device completely + boolean isDisconnected = true; + for (LocalBluetoothProfile pf: mProfileConnectionState.keySet()) { + if (mProfileConnectionState.get(pf) != BluetoothProfile.STATE_DISCONNECTED) { + isDisconnected = false; + break; + } + } + // if disconnected, restore permission choice. + // So ACCESS_REJECTED will take effect until we are disconnected with this device. + if (isDisconnected) { + fetchPhonebookPermissionChoice(); + fetchMessagePermissionChoice(); + } + } + if (newProfileState == BluetoothProfile.STATE_CONNECTED) { if (!mProfiles.contains(profile)) { mRemovedProfiles.remove(profile); @@ -135,6 +157,18 @@ final class CachedBluetoothDevice implements Comparable { mLocalNapRoleConnected = true; } } + if (profile instanceof MapProfile) { + profile.setPreferred(mDevice, true); + refresh(); + } + } else if (profile instanceof MapProfile && + newProfileState == BluetoothProfile.STATE_DISCONNECTED) { + if (mProfiles.contains(profile)) { + mRemovedProfiles.add(profile); + mProfiles.remove(profile); + } + profile.setPreferred(mDevice, false); + refresh(); } else if (mLocalNapRoleConnected && profile instanceof PanProfile && ((PanProfile) profile).isLocalRoleNap(mDevice) && newProfileState == BluetoothProfile.STATE_DISCONNECTED) { @@ -341,6 +375,8 @@ final class CachedBluetoothDevice implements Comparable { for (LocalBluetoothProfile profile :getProfiles()) { mProfileConnectionState.put(profile, BluetoothProfile.STATE_DISCONNECTED); } + fetchPhonebookPermissionChoice(); + fetchMessagePermissionChoice(); } // TODO: do any of these need to run async on a background thread? @@ -349,6 +385,7 @@ final class CachedBluetoothDevice implements Comparable { fetchBtClass(); updateProfiles(); fetchPhonebookPermissionChoice(); + fetchMessagePermissionChoice(); mVisible = false; dispatchAttributesChanged(); @@ -513,7 +550,8 @@ final class CachedBluetoothDevice implements Comparable { if (bondState == BluetoothDevice.BOND_NONE) { mProfiles.clear(); mConnectAfterPairing = false; // cancel auto-connect - setPhonebookPermissionChoice(PHONEBOOK_ACCESS_UNKNOWN); + setPhonebookPermissionChoice(ACCESS_UNKNOWN); + setMessagePermissionChoice(ACCESS_UNKNOWN); } refresh(); @@ -630,22 +668,54 @@ final class CachedBluetoothDevice implements Comparable { } void setPhonebookPermissionChoice(int permissionChoice) { + mPhonebookPermissionChoice = permissionChoice; + + // if user reject it, don't save it to editor. + if (permissionChoice == ACCESS_REJECTED) return; + SharedPreferences.Editor editor = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, Context.MODE_PRIVATE).edit(); - if (permissionChoice == PHONEBOOK_ACCESS_UNKNOWN) { + if (permissionChoice == ACCESS_UNKNOWN) { editor.remove(mDevice.getAddress()); } else { editor.putInt(mDevice.getAddress(), permissionChoice); } editor.commit(); - mPhonebookPermissionChoice = permissionChoice; } private void fetchPhonebookPermissionChoice() { SharedPreferences preference = mContext.getSharedPreferences(PHONEBOOK_PREFS_NAME, Context.MODE_PRIVATE); mPhonebookPermissionChoice = preference.getInt(mDevice.getAddress(), - PHONEBOOK_ACCESS_UNKNOWN); + ACCESS_UNKNOWN); + } + + + int getMessagePermissionChoice() { + return mMessagePermissionChoice; + } + + void setMessagePermissionChoice(int permissionChoice) { + mMessagePermissionChoice = permissionChoice; + + // if user reject it, don't save it to editor. + if (permissionChoice == ACCESS_REJECTED) return; + + SharedPreferences.Editor editor = + mContext.getSharedPreferences(MESSAGE_PREFS_NAME, Context.MODE_PRIVATE).edit(); + if (permissionChoice == ACCESS_UNKNOWN) { + editor.remove(mDevice.getAddress()); + } else { + editor.putInt(mDevice.getAddress(), permissionChoice); + } + editor.commit(); + } + + private void fetchMessagePermissionChoice() { + SharedPreferences preference = mContext.getSharedPreferences(MESSAGE_PREFS_NAME, + Context.MODE_PRIVATE); + mMessagePermissionChoice = preference.getInt(mDevice.getAddress(), + ACCESS_UNKNOWN); } } diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java index 7fc1b65de01..e2faf7fd546 100644 --- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java +++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java @@ -26,6 +26,7 @@ import android.preference.PreferenceScreen; import android.util.Log; import com.android.settings.ProgressCategory; +import com.android.settings.RestrictedSettingsFragment; import com.android.settings.SettingsPreferenceFragment; import java.util.Collection; @@ -39,7 +40,7 @@ import java.util.WeakHashMap; * @see DevicePickerFragment */ public abstract class DeviceListPreferenceFragment extends - SettingsPreferenceFragment implements BluetoothCallback { + RestrictedSettingsFragment implements BluetoothCallback { private static final String TAG = "DeviceListPreferenceFragment"; @@ -58,7 +59,8 @@ public abstract class DeviceListPreferenceFragment extends final WeakHashMap mDevicePreferenceMap = new WeakHashMap(); - DeviceListPreferenceFragment() { + DeviceListPreferenceFragment(String restrictedKey) { + super(restrictedKey); mFilter = BluetoothDeviceFilter.ALL_FILTER; } diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java index 027ceedbe70..4b6a6b04206 100644 --- a/src/com/android/settings/bluetooth/DevicePickerFragment.java +++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java @@ -34,6 +34,10 @@ import com.android.settings.R; */ public final class DevicePickerFragment extends DeviceListPreferenceFragment { + public DevicePickerFragment() { + super(null /* Not tied to any user restrictions. */); + } + private boolean mNeedAuth; private String mLaunchPackage; private String mLaunchClass; diff --git a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java index 6f4a76584fc..f00b80178d4 100644 --- a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java +++ b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java @@ -20,14 +20,15 @@ import android.app.QueuedWork; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.util.Log; /** * LocalBluetoothPreferences provides an interface to the preferences * related to Bluetooth. */ final class LocalBluetoothPreferences { -// private static final String TAG = "LocalBluetoothPreferences"; - + private static final String TAG = "LocalBluetoothPreferences"; + private static final boolean DEBUG = Utils.D; private static final String SHARED_PREFERENCES_NAME = "bluetooth_settings"; // If a device was picked from the device picker or was in discoverable mode @@ -61,6 +62,7 @@ final class LocalBluetoothPreferences { String deviceAddress) { LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context); if (manager == null) { + if(DEBUG) Log.v(TAG, "manager == null - do not show dialog."); return false; } @@ -72,6 +74,7 @@ final class LocalBluetoothPreferences { // If in appliance mode, do not show dialog in foreground. if ((context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_APPLIANCE) == Configuration.UI_MODE_TYPE_APPLIANCE) { + if (DEBUG) Log.v(TAG, "in appliance mode - do not show dialog."); return false; } @@ -109,6 +112,7 @@ final class LocalBluetoothPreferences { } } } + if (DEBUG) Log.v(TAG, "Found no reason to show the dialog - do not show dialog."); return false; } diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java old mode 100755 new mode 100644 index 5d254aec6b8..78d64414360 --- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java +++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java @@ -19,6 +19,7 @@ package com.android.settings.bluetooth; import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothMap; import android.bluetooth.BluetoothInputDevice; import android.bluetooth.BluetoothPan; import android.bluetooth.BluetoothPbap; @@ -44,7 +45,7 @@ import java.util.List; */ final class LocalBluetoothProfileManager { private static final String TAG = "LocalBluetoothProfileManager"; - + private static final boolean DEBUG = Utils.D; /** Singleton instance. */ private static LocalBluetoothProfileManager sInstance; @@ -79,6 +80,7 @@ final class LocalBluetoothProfileManager { private A2dpProfile mA2dpProfile; private HeadsetProfile mHeadsetProfile; + private MapProfile mMapProfile; private final HidProfile mHidProfile; private OppProfile mOppProfile; private final PanProfile mPanProfile; @@ -119,11 +121,17 @@ final class LocalBluetoothProfileManager { addPanProfile(mPanProfile, PanProfile.NAME, BluetoothPan.ACTION_CONNECTION_STATE_CHANGED); + if(DEBUG) Log.d(TAG, "Adding local MAP profile"); + mMapProfile = new MapProfile(mContext, mLocalAdapter, + mDeviceManager, this); + addProfile(mMapProfile, MapProfile.NAME, + BluetoothMap.ACTION_CONNECTION_STATE_CHANGED); + //Create PBAP server profile, but do not add it to list of profiles // as we do not need to monitor the profile as part of profile list mPbapProfile = new PbapServerProfile(context); - Log.d(TAG, "LocalBluetoothProfileManager construction complete"); + if (DEBUG) Log.d(TAG, "LocalBluetoothProfileManager construction complete"); } /** @@ -137,7 +145,7 @@ final class LocalBluetoothProfileManager { // A2DP if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.AudioSource)) { if (mA2dpProfile == null) { - Log.d(TAG, "Adding local A2DP profile"); + if(DEBUG) Log.d(TAG, "Adding local A2DP profile"); mA2dpProfile = new A2dpProfile(mContext, mLocalAdapter, mDeviceManager, this); addProfile(mA2dpProfile, A2dpProfile.NAME, BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); @@ -150,7 +158,7 @@ final class LocalBluetoothProfileManager { if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Handsfree_AG) || BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.HSP_AG)) { if (mHeadsetProfile == null) { - Log.d(TAG, "Adding local HEADSET profile"); + if (DEBUG) Log.d(TAG, "Adding local HEADSET profile"); mHeadsetProfile = new HeadsetProfile(mContext, mLocalAdapter, mDeviceManager, this); addProfile(mHeadsetProfile, HeadsetProfile.NAME, @@ -163,7 +171,7 @@ final class LocalBluetoothProfileManager { // OPP if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush)) { if (mOppProfile == null) { - Log.d(TAG, "Adding local OPP profile"); + if(DEBUG) Log.d(TAG, "Adding local OPP profile"); mOppProfile = new OppProfile(); // Note: no event handler for OPP, only name map. mProfileNameMap.put(OppProfile.NAME, mOppProfile); @@ -301,7 +309,6 @@ final class LocalBluetoothProfileManager { return mPbapProfile; } - /** * Fill in a list of LocalBluetoothProfile objects that are supported by * the local device and the remote device. @@ -346,14 +353,15 @@ final class LocalBluetoothProfileManager { removedProfiles.remove(mOppProfile); } - if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hid) && + if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hid) || + BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hogp)) && mHidProfile != null) { profiles.add(mHidProfile); removedProfiles.remove(mHidProfile); } if(isPanNapConnected) - Log.d(TAG, "Valid PAN-NAP connection exists."); + if(DEBUG) Log.d(TAG, "Valid PAN-NAP connection exists."); if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.NAP) && mPanProfile != null) || isPanNapConnected) { profiles.add(mPanProfile); diff --git a/src/com/android/settings/bluetooth/MapProfile.java b/src/com/android/settings/bluetooth/MapProfile.java new file mode 100644 index 00000000000..fb1b18092df --- /dev/null +++ b/src/com/android/settings/bluetooth/MapProfile.java @@ -0,0 +1,213 @@ +/* + * 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.settings.bluetooth; + +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothClass; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothMap; +import android.bluetooth.BluetoothProfile; +import android.bluetooth.BluetoothUuid; +import android.content.Context; +import android.os.ParcelUuid; +import android.util.Log; + +import com.android.settings.R; + +import java.util.ArrayList; +import java.util.List; + +/** + * MapProfile handles Bluetooth MAP profile. + */ +final class MapProfile implements LocalBluetoothProfile { + private static final String TAG = "MapProfile"; + private static boolean V = true; + + private BluetoothMap mService; + private boolean mIsProfileReady; + + private final LocalBluetoothAdapter mLocalAdapter; + private final CachedBluetoothDeviceManager mDeviceManager; + private final LocalBluetoothProfileManager mProfileManager; + + static final ParcelUuid[] UUIDS = { + BluetoothUuid.MAP, + BluetoothUuid.MNS, + BluetoothUuid.MAS, + }; + + static final String NAME = "MAP"; + + // Order of this profile in device profiles list + + // These callbacks run on the main thread. + private final class MapServiceListener + implements BluetoothProfile.ServiceListener { + + public void onServiceConnected(int profile, BluetoothProfile proxy) { + if (V) Log.d(TAG,"Bluetooth service connected"); + mService = (BluetoothMap) proxy; + // We just bound to the service, so refresh the UI for any connected MAP devices. + List deviceList = mService.getConnectedDevices(); + while (!deviceList.isEmpty()) { + BluetoothDevice nextDevice = deviceList.remove(0); + CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice); + // we may add a new device here, but generally this should not happen + if (device == null) { + Log.w(TAG, "MapProfile found new device: " + nextDevice); + device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice); + } + device.onProfileStateChanged(MapProfile.this, + BluetoothProfile.STATE_CONNECTED); + device.refresh(); + } + + mProfileManager.callServiceConnectedListeners(); + mIsProfileReady=true; + } + + public void onServiceDisconnected(int profile) { + if (V) Log.d(TAG,"Bluetooth service disconnected"); + mProfileManager.callServiceDisconnectedListeners(); + mIsProfileReady=false; + } + } + + public boolean isProfileReady() { + if(V) Log.d(TAG,"isProfileReady(): "+ mIsProfileReady); + return mIsProfileReady; + } + + MapProfile(Context context, LocalBluetoothAdapter adapter, + CachedBluetoothDeviceManager deviceManager, + LocalBluetoothProfileManager profileManager) { + mLocalAdapter = adapter; + mDeviceManager = deviceManager; + mProfileManager = profileManager; + mLocalAdapter.getProfileProxy(context, new MapServiceListener(), + BluetoothProfile.MAP); + } + + public boolean isConnectable() { + return true; + } + + public boolean isAutoConnectable() { + return true; + } + + public boolean connect(BluetoothDevice device) { + if(V)Log.d(TAG,"connect() - should not get called"); + return true; // MAP never connects out + } + + public boolean disconnect(BluetoothDevice device) { + if (mService == null) return false; + List deviceList = mService.getConnectedDevices(); + if (!deviceList.isEmpty() && deviceList.get(0).equals(device)) { + if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + return mService.disconnect(device); + } else { + return false; + } + } + + public int getConnectionStatus(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.STATE_DISCONNECTED; + List deviceList = mService.getConnectedDevices(); + if(V) Log.d(TAG,"getConnectionStatus: status is: "+ mService.getConnectionState(device)); + + return !deviceList.isEmpty() && deviceList.get(0).equals(device) + ? mService.getConnectionState(device) + : BluetoothProfile.STATE_DISCONNECTED; + } + + public boolean isPreferred(BluetoothDevice device) { + if (mService == null) return false; + return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + } + + public int getPreferred(BluetoothDevice device) { + if (mService == null) return BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device); + } + + public void setPreferred(BluetoothDevice device, boolean preferred) { + if (mService == null) return; + if (preferred) { + if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) { + mService.setPriority(device, BluetoothProfile.PRIORITY_ON); + } + } else { + mService.setPriority(device, BluetoothProfile.PRIORITY_OFF); + } + } + + public List getConnectedDevices() { + if (mService == null) return new ArrayList(0); + return mService.getDevicesMatchingConnectionStates( + new int[] {BluetoothProfile.STATE_CONNECTED, + BluetoothProfile.STATE_CONNECTING, + BluetoothProfile.STATE_DISCONNECTING}); + } + + public String toString() { + return NAME; + } + + public int getOrdinal() { + return BluetoothProfile.MAP; + } + + public int getNameResource(BluetoothDevice device) { + return R.string.bluetooth_profile_map; + } + + public int getSummaryResourceForDevice(BluetoothDevice device) { + int state = getConnectionStatus(device); + switch (state) { + case BluetoothProfile.STATE_DISCONNECTED: + return R.string.bluetooth_map_profile_summary_use_for; + + case BluetoothProfile.STATE_CONNECTED: + return R.string.bluetooth_map_profile_summary_connected; + + default: + return Utils.getConnectionStateSummary(state); + } + } + + public int getDrawableResource(BluetoothClass btClass) { + return R.drawable.ic_bt_cellphone; + } + + protected void finalize() { + if (V) Log.d(TAG, "finalize()"); + if (mService != null) { + try { + BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.MAP, + mService); + mService = null; + }catch (Throwable t) { + Log.w(TAG, "Error cleaning up MAP proxy", t); + } + } + } +} diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java index d03f6dc414e..999611d12d2 100644 --- a/src/com/android/settings/deviceinfo/Memory.java +++ b/src/com/android/settings/deviceinfo/Memory.java @@ -19,6 +19,7 @@ package com.android.settings.deviceinfo; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; +import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -223,7 +224,11 @@ public class Memory extends SettingsPreferenceFragment { if (intent != null) { // Don't go across app boundary if monkey is running if (!Utils.isMonkeyRunning()) { - startActivity(intent); + try { + startActivity(intent); + } catch (ActivityNotFoundException anfe) { + Log.w(TAG, "No activity found for intent " + intent); + } } return true; } diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java index 61188ec1c2c..4e5bd63f47c 100644 --- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java +++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java @@ -34,6 +34,7 @@ import android.os.storage.StorageManager; import android.os.storage.StorageVolume; import android.preference.Preference; import android.preference.PreferenceCategory; +import android.provider.MediaStore; import android.text.format.Formatter; import com.android.settings.R; @@ -137,6 +138,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { public void init() { final Context context = getContext(); + removeAll(); + final UserInfo currentUser; try { currentUser = ActivityManagerNative.getDefault().getCurrentUser(); @@ -242,9 +245,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { mItemAvailable.setTitle(R.string.memory_available_read_only); - if (mFormatPreference != null) { - removePreference(mFormatPreference); - } } else { mItemAvailable.setTitle(R.string.memory_available); } @@ -269,9 +269,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { removePreference(mUsageBarPreference); removePreference(mItemTotal); removePreference(mItemAvailable); - if (mFormatPreference != null) { - removePreference(mFormatPreference); - } } if (mUsbConnected && (UsbManager.USB_FUNCTION_MTP.equals(mUsbFunction) || @@ -374,6 +371,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { } public void onStorageStateChanged() { + init(); measure(); } @@ -440,8 +438,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { } else if (pref == mItemDcim) { intent = new Intent(Intent.ACTION_VIEW); intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); - // TODO Create a Videos category, type = vnd.android.cursor.dir/video - intent.setType("vnd.android.cursor.dir/image"); + // TODO Create a Videos category, MediaStore.Video.Media.EXTERNAL_CONTENT_URI + intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); } else if (pref == mItemMisc) { Context context = getContext().getApplicationContext(); intent = new Intent(context, MiscFilesHandler.class); diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java index 51457891212..55a0457470f 100644 --- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java +++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java @@ -340,7 +340,7 @@ public class BatteryHistoryChart extends View { long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, BatteryStats.STATS_SINCE_CHARGED); mStatsPeriod = uSecTime; - String durationString = Utils.formatElapsedTime(getContext(), mStatsPeriod / 1000); + String durationString = Utils.formatElapsedTime(getContext(), mStatsPeriod / 1000, true); mDurationString = getContext().getString(R.string.battery_stats_on_battery, durationString); mChargingLabel = getContext().getString(R.string.battery_stats_charging_label); @@ -382,7 +382,7 @@ public class BatteryHistoryChart extends View { mHavePhoneSignal = true; } if (mHistEnd <= mHistStart) mHistEnd = mHistStart+1; - mTotalDurationString = Utils.formatElapsedTime(getContext(), mHistEnd - mHistStart); + mTotalDurationString = Utils.formatElapsedTime(getContext(), mHistEnd - mHistStart, true); } @Override @@ -654,19 +654,26 @@ public class BatteryHistoryChart extends View { @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - + final int width = getWidth(); final int height = getHeight(); - + final boolean layoutRtl = isLayoutRtl(); + final int textStartX = layoutRtl ? width : 0; + mTextPaint.setTextAlign(layoutRtl ? Paint.Align.RIGHT : Paint.Align.LEFT); + canvas.drawPath(mBatLevelPath, mBatteryBackgroundPaint); if (mLargeMode) { - canvas.drawText(mDurationString, 0, -mTextAscent + (mLineWidth/2), + int durationHalfWidth = mTotalDurationStringWidth / 2; + if (layoutRtl) durationHalfWidth = -durationHalfWidth; + canvas.drawText(mDurationString, textStartX, -mTextAscent + (mLineWidth / 2), mTextPaint); - canvas.drawText(mTotalDurationString, (width/2) - (mTotalDurationStringWidth/2), + canvas.drawText(mTotalDurationString, (width / 2) - durationHalfWidth, mLevelBottom - mTextAscent + mThinLineWidth, mTextPaint); } else { - canvas.drawText(mDurationString, (width/2) - (mDurationStringWidth/2), - (height/2) - ((mTextDescent-mTextAscent)/2) - mTextAscent, mTextPaint); + int durationHalfWidth = mDurationStringWidth / 2; + if (layoutRtl) durationHalfWidth = -durationHalfWidth; + canvas.drawText(mDurationString, (width / 2) - durationHalfWidth, + (height / 2) - ((mTextDescent - mTextAscent) / 2) - mTextAscent, mTextPaint); } if (!mBatGoodPath.isEmpty()) { canvas.drawPath(mBatGoodPath, mBatteryGoodPaint); @@ -703,22 +710,22 @@ public class BatteryHistoryChart extends View { if (mLargeMode) { if (mHavePhoneSignal) { - canvas.drawText(mPhoneSignalLabel, 0, + canvas.drawText(mPhoneSignalLabel, textStartX, height - mPhoneSignalOffset - mTextDescent, mTextPaint); } if (mHaveGps) { - canvas.drawText(mGpsOnLabel, 0, + canvas.drawText(mGpsOnLabel, textStartX, height - mGpsOnOffset - mTextDescent, mTextPaint); } if (mHaveWifi) { - canvas.drawText(mWifiRunningLabel, 0, + canvas.drawText(mWifiRunningLabel, textStartX, height - mWifiRunningOffset - mTextDescent, mTextPaint); } - canvas.drawText(mWakeLockLabel, 0, + canvas.drawText(mWakeLockLabel, textStartX, height - mWakeLockOffset - mTextDescent, mTextPaint); - canvas.drawText(mChargingLabel, 0, + canvas.drawText(mChargingLabel, textStartX, height - mChargingOffset - mTextDescent, mTextPaint); - canvas.drawText(mScreenOnLabel, 0, + canvas.drawText(mScreenOnLabel, textStartX, height - mScreenOnOffset - mTextDescent, mTextPaint); canvas.drawLine(0, mLevelBottom+(mThinLineWidth/2), width, mLevelBottom+(mThinLineWidth/2), mTextPaint); diff --git a/src/com/android/settings/fuelgauge/BatterySipper.java b/src/com/android/settings/fuelgauge/BatterySipper.java index 9a8e7835c01..fcc8f697044 100644 --- a/src/com/android/settings/fuelgauge/BatterySipper.java +++ b/src/com/android/settings/fuelgauge/BatterySipper.java @@ -30,7 +30,11 @@ import android.os.BatteryStats.Uid; import java.util.ArrayList; import java.util.HashMap; -class BatterySipper implements Comparable { +/** + * Contains information about package name, icon image, power usage about an + * application or a system service. + */ +public class BatterySipper implements Comparable { final Context mContext; /* Cache cleared when PowerUsageSummary is destroyed */ static final HashMap sUidCache = new HashMap(); @@ -49,11 +53,14 @@ class BatterySipper implements Comparable { long wifiRunningTime; long cpuFgTime; long wakeLockTime; - long tcpBytesReceived; - long tcpBytesSent; + long mobileRxBytes; + long mobileTxBytes; + long wifiRxBytes; + long wifiTxBytes; double percent; double noCoveragePercent; String defaultPackageName; + String[] mPackages; static class UidToDetail { String name; @@ -88,15 +95,38 @@ class BatterySipper implements Comparable { return values; } - Drawable getIcon() { + public Drawable getIcon() { return icon; } + /** + * Gets the application name + */ + public String getLabel() { + return name; + } + + @Override public int compareTo(BatterySipper other) { // Return the flipped value because we want the items in descending order return Double.compare(other.getSortValue(), getSortValue()); } + /** + * Gets a list of packages associated with the current user + */ + public String[] getPackages() { + return mPackages; + } + + public int getUid() { + // Bail out if the current sipper is not an App sipper. + if (uidObj == null) { + return 0; + } + return uidObj.getUid(); + } + void getQuickNameIconForUid(Uid uidObj) { final int uid = uidObj.getUid(); final String uidString = Integer.toString(uid); @@ -123,27 +153,36 @@ class BatterySipper implements Comparable { } else { //name = packages[0]; } - synchronized (mRequestQueue) { - mRequestQueue.add(this); + if (mHandler != null) { + synchronized (mRequestQueue) { + mRequestQueue.add(this); + } } } + public static void clearUidCache() { + sUidCache.clear(); + } + /** - * Sets name and icon - * @param uid Uid of the application + * Loads the app label and icon image and stores into the cache. */ - void getNameIcon() { + public void loadNameAndIcon() { + // Bail out if the current sipper is not an App sipper. + if (uidObj == null) { + return; + } PackageManager pm = mContext.getPackageManager(); final int uid = uidObj.getUid(); final Drawable defaultActivityIcon = pm.getDefaultActivityIcon(); - String[] packages = pm.getPackagesForUid(uid); - if (packages == null) { + mPackages = pm.getPackagesForUid(uid); + if (mPackages == null) { name = Integer.toString(uid); return; } - String[] packageLabels = new String[packages.length]; - System.arraycopy(packages, 0, packageLabels, 0, packages.length); + String[] packageLabels = new String[mPackages.length]; + System.arraycopy(mPackages, 0, packageLabels, 0, mPackages.length); int preferredIndex = -1; // Convert package names to user-facing labels where possible @@ -157,7 +196,7 @@ class BatterySipper implements Comparable { packageLabels[i] = label.toString(); } if (ai.icon != 0) { - defaultPackageName = packages[i]; + defaultPackageName = mPackages[i]; icon = ai.loadIcon(pm); break; } @@ -170,7 +209,7 @@ class BatterySipper implements Comparable { name = packageLabels[0]; } else { // Look for an official name for this UID. - for (String pkgName : packages) { + for (String pkgName : mPackages) { try { final PackageInfo pi = pm.getPackageInfo(pkgName, 0); if (pi.sharedUserLabel != 0) { @@ -195,6 +234,9 @@ class BatterySipper implements Comparable { utd.icon = icon; utd.packageName = defaultPackageName; sUidCache.put(uidString, utd); - mHandler.sendMessage(mHandler.obtainMessage(PowerUsageSummary.MSG_UPDATE_NAME_ICON, this)); + if (mHandler != null) { + mHandler.sendMessage( + mHandler.obtainMessage(BatteryStatsHelper.MSG_UPDATE_NAME_ICON, this)); + } } -} \ No newline at end of file +} diff --git a/src/com/android/settings/fuelgauge/BatteryStatsHelper.java b/src/com/android/settings/fuelgauge/BatteryStatsHelper.java new file mode 100644 index 00000000000..71c69a3328f --- /dev/null +++ b/src/com/android/settings/fuelgauge/BatteryStatsHelper.java @@ -0,0 +1,827 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.fuelgauge; + +import static android.os.BatteryStats.NETWORK_MOBILE_RX_BYTES; +import static android.os.BatteryStats.NETWORK_MOBILE_TX_BYTES; +import static android.os.BatteryStats.NETWORK_WIFI_RX_BYTES; +import static android.os.BatteryStats.NETWORK_WIFI_TX_BYTES; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.UserInfo; +import android.graphics.drawable.Drawable; +import android.hardware.Sensor; +import android.hardware.SensorManager; +import android.os.BatteryStats; +import android.os.BatteryStats.Uid; +import android.os.Bundle; +import android.os.Handler; +import android.os.Parcel; +import android.os.Process; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemClock; +import android.os.UserHandle; +import android.os.UserManager; +import android.preference.PreferenceActivity; +import android.telephony.SignalStrength; +import android.util.Log; +import android.util.SparseArray; + +import com.android.internal.app.IBatteryStats; +import com.android.internal.os.BatteryStatsImpl; +import com.android.internal.os.PowerProfile; +import com.android.internal.util.FastPrintWriter; +import com.android.settings.R; +import com.android.settings.fuelgauge.PowerUsageDetail.DrainType; +import com.android.settings.users.UserUtils; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * A helper class for retrieving the power usage information for all applications and services. + * + * The caller must initialize this class as soon as activity object is ready to use (for example, in + * onAttach() for Fragment), call create() in onCreate() and call destroy() in onDestroy(). + */ +public class BatteryStatsHelper { + + private static final boolean DEBUG = false; + + private static final String TAG = BatteryStatsHelper.class.getSimpleName(); + + private static BatteryStatsImpl sStatsXfer; + private IBatteryStats mBatteryInfo; + private UserManager mUm; + private BatteryStatsImpl mStats; + private PowerProfile mPowerProfile; + + private final List mUsageList = new ArrayList(); + private final List mWifiSippers = new ArrayList(); + private final List mBluetoothSippers = new ArrayList(); + private final SparseArray> mUserSippers + = new SparseArray>(); + private final SparseArray mUserPower = new SparseArray(); + + private int mStatsType = BatteryStats.STATS_SINCE_CHARGED; + + private long mStatsPeriod = 0; + private double mMaxPower = 1; + private double mTotalPower; + private double mWifiPower; + private double mBluetoothPower; + + // How much the apps together have left WIFI running. + private long mAppWifiRunning; + + /** Queue for fetching name and icon for an application */ + private ArrayList mRequestQueue = new ArrayList(); + + private Activity mActivity; + private Handler mHandler; + + private class NameAndIconLoader extends Thread { + private boolean mAbort = false; + + public NameAndIconLoader() { + super("BatteryUsage Icon Loader"); + } + + public void abort() { + mAbort = true; + } + + @Override + public void run() { + while (true) { + BatterySipper bs; + synchronized (mRequestQueue) { + if (mRequestQueue.isEmpty() || mAbort) { + mHandler.sendEmptyMessage(MSG_REPORT_FULLY_DRAWN); + return; + } + bs = mRequestQueue.remove(0); + } + bs.loadNameAndIcon(); + } + } + } + + private NameAndIconLoader mRequestThread; + + public BatteryStatsHelper(Activity activity, Handler handler) { + mActivity = activity; + mHandler = handler; + } + + /** Clears the current stats and forces recreating for future use. */ + public void clearStats() { + mStats = null; + } + + public BatteryStatsImpl getStats() { + if (mStats == null) { + load(); + } + return mStats; + } + + public PowerProfile getPowerProfile() { + return mPowerProfile; + } + + public void create(Bundle icicle) { + if (icicle != null) { + mStats = sStatsXfer; + } + mBatteryInfo = IBatteryStats.Stub.asInterface( + ServiceManager.getService(BatteryStats.SERVICE_NAME)); + mUm = (UserManager) mActivity.getSystemService(Context.USER_SERVICE); + mPowerProfile = new PowerProfile(mActivity); + } + + public void pause() { + if (mRequestThread != null) { + mRequestThread.abort(); + } + } + + public void destroy() { + if (mActivity.isChangingConfigurations()) { + sStatsXfer = mStats; + } else { + BatterySipper.sUidCache.clear(); + } + } + + public void startBatteryDetailPage( + PreferenceActivity caller, BatterySipper sipper, boolean showLocationButton) { + // Initialize mStats if necessary. + getStats(); + + Bundle args = new Bundle(); + args.putString(PowerUsageDetail.EXTRA_TITLE, sipper.name); + args.putInt(PowerUsageDetail.EXTRA_PERCENT, (int) + Math.ceil(sipper.getSortValue() * 100 / mTotalPower)); + args.putInt(PowerUsageDetail.EXTRA_GAUGE, (int) + Math.ceil(sipper.getSortValue() * 100 / mMaxPower)); + args.putLong(PowerUsageDetail.EXTRA_USAGE_DURATION, mStatsPeriod); + args.putString(PowerUsageDetail.EXTRA_ICON_PACKAGE, sipper.defaultPackageName); + args.putInt(PowerUsageDetail.EXTRA_ICON_ID, sipper.iconId); + args.putDouble(PowerUsageDetail.EXTRA_NO_COVERAGE, sipper.noCoveragePercent); + if (sipper.uidObj != null) { + args.putInt(PowerUsageDetail.EXTRA_UID, sipper.uidObj.getUid()); + } + args.putSerializable(PowerUsageDetail.EXTRA_DRAIN_TYPE, sipper.drainType); + args.putBoolean(PowerUsageDetail.EXTRA_SHOW_LOCATION_BUTTON, showLocationButton); + + int[] types; + double[] values; + switch (sipper.drainType) { + case APP: + case USER: + { + Uid uid = sipper.uidObj; + types = new int[] { + R.string.usage_type_cpu, + R.string.usage_type_cpu_foreground, + R.string.usage_type_wake_lock, + R.string.usage_type_gps, + R.string.usage_type_wifi_running, + R.string.usage_type_data_recv, + R.string.usage_type_data_send, + R.string.usage_type_data_wifi_recv, + R.string.usage_type_data_wifi_send, + R.string.usage_type_audio, + R.string.usage_type_video, + }; + values = new double[] { + sipper.cpuTime, + sipper.cpuFgTime, + sipper.wakeLockTime, + sipper.gpsTime, + sipper.wifiRunningTime, + sipper.mobileRxBytes, + sipper.mobileTxBytes, + sipper.wifiRxBytes, + sipper.wifiTxBytes, + 0, + 0 + }; + + if (sipper.drainType == DrainType.APP) { + Writer result = new StringWriter(); + PrintWriter printWriter = new FastPrintWriter(result, false, 1024); + mStats.dumpLocked(printWriter, "", mStatsType, uid.getUid()); + printWriter.flush(); + args.putString(PowerUsageDetail.EXTRA_REPORT_DETAILS, result.toString()); + + result = new StringWriter(); + printWriter = new FastPrintWriter(result, false, 1024); + mStats.dumpCheckinLocked(printWriter, mStatsType, uid.getUid()); + printWriter.flush(); + args.putString(PowerUsageDetail.EXTRA_REPORT_CHECKIN_DETAILS, + result.toString()); + } + } + break; + case CELL: + { + types = new int[] { + R.string.usage_type_on_time, + R.string.usage_type_no_coverage + }; + values = new double[] { + sipper.usageTime, + sipper.noCoveragePercent + }; + } + break; + case WIFI: + { + types = new int[] { + R.string.usage_type_wifi_running, + R.string.usage_type_cpu, + R.string.usage_type_cpu_foreground, + R.string.usage_type_wake_lock, + R.string.usage_type_data_recv, + R.string.usage_type_data_send, + R.string.usage_type_data_wifi_recv, + R.string.usage_type_data_wifi_send, + }; + values = new double[] { + sipper.usageTime, + sipper.cpuTime, + sipper.cpuFgTime, + sipper.wakeLockTime, + sipper.mobileRxBytes, + sipper.mobileTxBytes, + sipper.wifiRxBytes, + sipper.wifiTxBytes, + }; + } break; + case BLUETOOTH: + { + types = new int[] { + R.string.usage_type_on_time, + R.string.usage_type_cpu, + R.string.usage_type_cpu_foreground, + R.string.usage_type_wake_lock, + R.string.usage_type_data_recv, + R.string.usage_type_data_send, + R.string.usage_type_data_wifi_recv, + R.string.usage_type_data_wifi_send, + }; + values = new double[] { + sipper.usageTime, + sipper.cpuTime, + sipper.cpuFgTime, + sipper.wakeLockTime, + sipper.mobileRxBytes, + sipper.mobileTxBytes, + sipper.wifiRxBytes, + sipper.wifiTxBytes, + }; + } break; + default: + { + types = new int[] { + R.string.usage_type_on_time + }; + values = new double[] { + sipper.usageTime + }; + } + } + args.putIntArray(PowerUsageDetail.EXTRA_DETAIL_TYPES, types); + args.putDoubleArray(PowerUsageDetail.EXTRA_DETAIL_VALUES, values); + caller.startPreferencePanel(PowerUsageDetail.class.getName(), args, + R.string.details_title, null, null, 0); + } + + /** + * Refreshes the power usage list. + * @param includeZeroConsumption whether includes those applications which have consumed very + * little power up till now. + */ + public void refreshStats(boolean includeZeroConsumption) { + // Initialize mStats if necessary. + getStats(); + + mMaxPower = 0; + mTotalPower = 0; + mWifiPower = 0; + mBluetoothPower = 0; + mAppWifiRunning = 0; + + mUsageList.clear(); + mWifiSippers.clear(); + mBluetoothSippers.clear(); + mUserSippers.clear(); + mUserPower.clear(); + + processAppUsage(includeZeroConsumption); + processMiscUsage(); + + Collections.sort(mUsageList); + + if (mHandler != null) { + synchronized (mRequestQueue) { + if (!mRequestQueue.isEmpty()) { + if (mRequestThread != null) { + mRequestThread.abort(); + } + mRequestThread = new NameAndIconLoader(); + mRequestThread.setPriority(Thread.MIN_PRIORITY); + mRequestThread.start(); + mRequestQueue.notify(); + } + } + } + } + + private void processAppUsage(boolean includeZeroConsumption) { + SensorManager sensorManager = (SensorManager) mActivity.getSystemService( + Context.SENSOR_SERVICE); + final int which = mStatsType; + final int speedSteps = mPowerProfile.getNumSpeedSteps(); + final double[] powerCpuNormal = new double[speedSteps]; + final long[] cpuSpeedStepTimes = new long[speedSteps]; + for (int p = 0; p < speedSteps; p++) { + powerCpuNormal[p] = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE, p); + } + final double mobilePowerPerByte = getMobilePowerPerByte(); + final double wifiPowerPerByte = getWifiPowerPerByte(); + long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which); + long appWakelockTime = 0; + BatterySipper osApp = null; + mStatsPeriod = uSecTime; + SparseArray uidStats = mStats.getUidStats(); + final int NU = uidStats.size(); + for (int iu = 0; iu < NU; iu++) { + Uid u = uidStats.valueAt(iu); + double p; // in mAs + double power = 0; // in mAs + double highestDrain = 0; + String packageWithHighestDrain = null; + //mUsageList.add(new AppUsage(u.getUid(), new double[] {power})); + Map processStats = u.getProcessStats(); + long cpuTime = 0; + long cpuFgTime = 0; + long wakelockTime = 0; + long gpsTime = 0; + if (DEBUG) Log.i(TAG, "UID " + u.getUid()); + if (processStats.size() > 0) { + // Process CPU time + for (Map.Entry ent + : processStats.entrySet()) { + Uid.Proc ps = ent.getValue(); + final long userTime = ps.getUserTime(which); + final long systemTime = ps.getSystemTime(which); + final long foregroundTime = ps.getForegroundTime(which); + cpuFgTime += foregroundTime * 10; // convert to millis + final long tmpCpuTime = (userTime + systemTime) * 10; // convert to millis + int totalTimeAtSpeeds = 0; + // Get the total first + for (int step = 0; step < speedSteps; step++) { + cpuSpeedStepTimes[step] = ps.getTimeAtCpuSpeedStep(step, which); + totalTimeAtSpeeds += cpuSpeedStepTimes[step]; + } + if (totalTimeAtSpeeds == 0) totalTimeAtSpeeds = 1; + // Then compute the ratio of time spent at each speed + double processPower = 0; + for (int step = 0; step < speedSteps; step++) { + double ratio = (double) cpuSpeedStepTimes[step] / totalTimeAtSpeeds; + processPower += ratio * tmpCpuTime * powerCpuNormal[step]; + } + cpuTime += tmpCpuTime; + if (DEBUG && processPower != 0) { + Log.i(TAG, String.format("process %s, cpu power=%.2f", + ent.getKey(), processPower / 1000)); + } + power += processPower; + if (packageWithHighestDrain == null + || packageWithHighestDrain.startsWith("*")) { + highestDrain = processPower; + packageWithHighestDrain = ent.getKey(); + } else if (highestDrain < processPower + && !ent.getKey().startsWith("*")) { + highestDrain = processPower; + packageWithHighestDrain = ent.getKey(); + } + } + } + if (cpuFgTime > cpuTime) { + if (DEBUG && cpuFgTime > cpuTime + 10000) { + Log.i(TAG, "WARNING! Cputime is more than 10 seconds behind Foreground time"); + } + cpuTime = cpuFgTime; // Statistics may not have been gathered yet. + } + power /= 1000; + if (DEBUG && power != 0) Log.i(TAG, String.format("total cpu power=%.2f", power)); + + // Process wake lock usage + Map wakelockStats = u.getWakelockStats(); + for (Map.Entry wakelockEntry + : wakelockStats.entrySet()) { + Uid.Wakelock wakelock = wakelockEntry.getValue(); + // Only care about partial wake locks since full wake locks + // are canceled when the user turns the screen off. + BatteryStats.Timer timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL); + if (timer != null) { + wakelockTime += timer.getTotalTimeLocked(uSecTime, which); + } + } + wakelockTime /= 1000; // convert to millis + appWakelockTime += wakelockTime; + + // Add cost of holding a wake lock + p = (wakelockTime + * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000; + power += p; + if (DEBUG && p != 0) Log.i(TAG, String.format("wakelock power=%.2f", p)); + + // Add cost of mobile traffic + final long mobileRx = u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, mStatsType); + final long mobileTx = u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, mStatsType); + p = (mobileRx + mobileTx) * mobilePowerPerByte; + power += p; + if (DEBUG && p != 0) Log.i(TAG, String.format("mobile power=%.2f", p)); + + // Add cost of wifi traffic + final long wifiRx = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, mStatsType); + final long wifiTx = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, mStatsType); + p = (wifiRx + wifiTx) * wifiPowerPerByte; + power += p; + if (DEBUG && p != 0) Log.i(TAG, String.format("wifi power=%.2f", p)); + + // Add cost of keeping WIFI running. + long wifiRunningTimeMs = u.getWifiRunningTime(uSecTime, which) / 1000; + mAppWifiRunning += wifiRunningTimeMs; + p = (wifiRunningTimeMs + * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ON)) / 1000; + power += p; + if (DEBUG && p != 0) Log.i(TAG, String.format("wifi running power=%.2f", p)); + + // Add cost of WIFI scans + long wifiScanTimeMs = u.getWifiScanTime(uSecTime, which) / 1000; + p = (wifiScanTimeMs + * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_SCAN)) / 1000; + power += p; + if (DEBUG && p != 0) Log.i(TAG, String.format("wifi scanning power=%.2f", p)); + + // Process Sensor usage + Map sensorStats = u.getSensorStats(); + for (Map.Entry sensorEntry + : sensorStats.entrySet()) { + Uid.Sensor sensor = sensorEntry.getValue(); + int sensorHandle = sensor.getHandle(); + BatteryStats.Timer timer = sensor.getSensorTime(); + long sensorTime = timer.getTotalTimeLocked(uSecTime, which) / 1000; + double multiplier = 0; + switch (sensorHandle) { + case Uid.Sensor.GPS: + multiplier = mPowerProfile.getAveragePower(PowerProfile.POWER_GPS_ON); + gpsTime = sensorTime; + break; + default: + List sensorList = sensorManager.getSensorList( + android.hardware.Sensor.TYPE_ALL); + for (android.hardware.Sensor s : sensorList) { + if (s.getHandle() == sensorHandle) { + multiplier = s.getPower(); + break; + } + } + } + p = (multiplier * sensorTime) / 1000; + power += p; + if (DEBUG && p != 0) { + Log.i(TAG, String.format("sensor %s power=%.2f", sensor.toString(), p)); + } + } + + if (DEBUG) Log.i(TAG, String.format("UID %d total power=%.2f", u.getUid(), power)); + + // Add the app to the list if it is consuming power + boolean isOtherUser = false; + final int userId = UserHandle.getUserId(u.getUid()); + if (power != 0 || includeZeroConsumption || u.getUid() == 0) { + BatterySipper app = new BatterySipper(mActivity, mRequestQueue, mHandler, + packageWithHighestDrain, DrainType.APP, 0, u, + new double[] {power}); + app.cpuTime = cpuTime; + app.gpsTime = gpsTime; + app.wifiRunningTime = wifiRunningTimeMs; + app.cpuFgTime = cpuFgTime; + app.wakeLockTime = wakelockTime; + app.mobileRxBytes = mobileRx; + app.mobileTxBytes = mobileTx; + app.wifiRxBytes = wifiRx; + app.wifiTxBytes = wifiTx; + if (u.getUid() == Process.WIFI_UID) { + mWifiSippers.add(app); + } else if (u.getUid() == Process.BLUETOOTH_UID) { + mBluetoothSippers.add(app); + } else if (userId != UserHandle.myUserId() + && UserHandle.getAppId(u.getUid()) >= Process.FIRST_APPLICATION_UID) { + isOtherUser = true; + List list = mUserSippers.get(userId); + if (list == null) { + list = new ArrayList(); + mUserSippers.put(userId, list); + } + list.add(app); + } else { + mUsageList.add(app); + } + if (u.getUid() == 0) { + osApp = app; + } + } + if (power != 0 || includeZeroConsumption) { + if (u.getUid() == Process.WIFI_UID) { + mWifiPower += power; + } else if (u.getUid() == Process.BLUETOOTH_UID) { + mBluetoothPower += power; + } else if (isOtherUser) { + Double userPower = mUserPower.get(userId); + if (userPower == null) { + userPower = power; + } else { + userPower += power; + } + mUserPower.put(userId, userPower); + } else { + if (power > mMaxPower) mMaxPower = power; + mTotalPower += power; + } + } + } + + // The device has probably been awake for longer than the screen on + // time and application wake lock time would account for. Assign + // this remainder to the OS, if possible. + if (osApp != null) { + long wakeTimeMillis = mStats.computeBatteryUptime( + SystemClock.uptimeMillis() * 1000, which) / 1000; + wakeTimeMillis -= appWakelockTime + (mStats.getScreenOnTime( + SystemClock.elapsedRealtime(), which) / 1000); + if (wakeTimeMillis > 0) { + double power = (wakeTimeMillis + * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000; + if (DEBUG) Log.i(TAG, "OS wakeLockTime " + wakeTimeMillis + " power " + power); + osApp.wakeLockTime += wakeTimeMillis; + osApp.value += power; + osApp.values[0] += power; + if (osApp.value > mMaxPower) mMaxPower = osApp.value; + mTotalPower += power; + } + } + } + + private void addPhoneUsage(long uSecNow) { + long phoneOnTimeMs = mStats.getPhoneOnTime(uSecNow, mStatsType) / 1000; + double phoneOnPower = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE) + * phoneOnTimeMs / 1000; + addEntry(mActivity.getString(R.string.power_phone), DrainType.PHONE, phoneOnTimeMs, + R.drawable.ic_settings_voice_calls, phoneOnPower); + } + + private void addScreenUsage(long uSecNow) { + double power = 0; + long screenOnTimeMs = mStats.getScreenOnTime(uSecNow, mStatsType) / 1000; + power += screenOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_ON); + final double screenFullPower = + mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL); + for (int i = 0; i < BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS; i++) { + double screenBinPower = screenFullPower * (i + 0.5f) + / BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS; + long brightnessTime = mStats.getScreenBrightnessTime(i, uSecNow, mStatsType) / 1000; + power += screenBinPower * brightnessTime; + if (DEBUG) { + Log.i(TAG, "Screen bin power = " + (int) screenBinPower + ", time = " + + brightnessTime); + } + } + power /= 1000; // To seconds + addEntry(mActivity.getString(R.string.power_screen), DrainType.SCREEN, screenOnTimeMs, + R.drawable.ic_settings_display, power); + } + + private void addRadioUsage(long uSecNow) { + double power = 0; + final int BINS = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; + long signalTimeMs = 0; + for (int i = 0; i < BINS; i++) { + long strengthTimeMs = mStats.getPhoneSignalStrengthTime(i, uSecNow, mStatsType) / 1000; + power += strengthTimeMs / 1000 + * mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ON, i); + signalTimeMs += strengthTimeMs; + } + long scanningTimeMs = mStats.getPhoneSignalScanningTime(uSecNow, mStatsType) / 1000; + power += scanningTimeMs / 1000 * mPowerProfile.getAveragePower( + PowerProfile.POWER_RADIO_SCANNING); + BatterySipper bs = + addEntry(mActivity.getString(R.string.power_cell), DrainType.CELL, + signalTimeMs, R.drawable.ic_settings_cell_standby, power); + if (signalTimeMs != 0) { + bs.noCoveragePercent = mStats.getPhoneSignalStrengthTime(0, uSecNow, mStatsType) + / 1000 * 100.0 / signalTimeMs; + } + } + + private void aggregateSippers(BatterySipper bs, List from, String tag) { + for (int i=0; i sippers = mUserSippers.valueAt(i); + UserInfo info = mUm.getUserInfo(userId); + Drawable icon; + String name; + if (info != null) { + icon = UserUtils.getUserIcon(mActivity, mUm, info, mActivity.getResources()); + name = info != null ? info.name : null; + if (name == null) { + name = Integer.toString(info.id); + } + name = mActivity.getResources().getString( + R.string.running_process_item_user_label, name); + } else { + icon = null; + name = mActivity.getResources().getString( + R.string.running_process_item_removed_user_label); + } + Double userPower = mUserPower.get(userId); + double power = (userPower != null) ? userPower : 0.0; + BatterySipper bs = addEntry(name, DrainType.USER, 0, 0, power); + bs.icon = icon; + aggregateSippers(bs, sippers, "User"); + } + } + + /** + * Return estimated power (in mAs) of sending a byte with the mobile radio. + */ + private double getMobilePowerPerByte() { + final long MOBILE_BPS = 200000; // TODO: Extract average bit rates from system + final double MOBILE_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE) + / 3600; + + final long mobileRx = mStats.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, mStatsType); + final long mobileTx = mStats.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, mStatsType); + final long mobileData = mobileRx + mobileTx; + + final long radioDataUptimeMs = mStats.getRadioDataUptime() / 1000; + final long mobileBps = radioDataUptimeMs != 0 + ? mobileData * 8 * 1000 / radioDataUptimeMs + : MOBILE_BPS; + + return MOBILE_POWER / (mobileBps / 8); + } + + /** + * Return estimated power (in mAs) of sending a byte with the Wi-Fi radio. + */ + private double getWifiPowerPerByte() { + final long WIFI_BPS = 1000000; // TODO: Extract average bit rates from system + final double WIFI_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE) + / 3600; + return WIFI_POWER / (WIFI_BPS / 8); + } + + private void processMiscUsage() { + final int which = mStatsType; + long uSecTime = SystemClock.elapsedRealtime() * 1000; + final long uSecNow = mStats.computeBatteryRealtime(uSecTime, which); + final long timeSinceUnplugged = uSecNow; + if (DEBUG) { + Log.i(TAG, "Uptime since last unplugged = " + (timeSinceUnplugged / 1000)); + } + + addUserUsage(); + addPhoneUsage(uSecNow); + addScreenUsage(uSecNow); + addWiFiUsage(uSecNow); + addBluetoothUsage(uSecNow); + addIdleUsage(uSecNow); // Not including cellular idle power + // Don't compute radio usage if it's a wifi-only device + if (!com.android.settings.Utils.isWifiOnly(mActivity)) { + addRadioUsage(uSecNow); + } + } + + private BatterySipper addEntry(String label, DrainType drainType, long time, int iconId, + double power) { + if (power > mMaxPower) mMaxPower = power; + mTotalPower += power; + BatterySipper bs = new BatterySipper(mActivity, mRequestQueue, mHandler, + label, drainType, iconId, null, new double[] {power}); + bs.usageTime = time; + bs.iconId = iconId; + mUsageList.add(bs); + return bs; + } + + public List getUsageList() { + return mUsageList; + } + + static final int MSG_UPDATE_NAME_ICON = 1; + static final int MSG_REPORT_FULLY_DRAWN = 2; + + public double getMaxPower() { + return mMaxPower; + } + + public double getTotalPower() { + return mTotalPower; + } + + private void load() { + try { + byte[] data = mBatteryInfo.getStatistics(); + Parcel parcel = Parcel.obtain(); + parcel.unmarshall(data, 0, data.length); + parcel.setDataPosition(0); + mStats = com.android.internal.os.BatteryStatsImpl.CREATOR + .createFromParcel(parcel); + mStats.distributeWorkLocked(BatteryStats.STATS_SINCE_CHARGED); + } catch (RemoteException e) { + Log.e(TAG, "RemoteException:", e); + } + } +} diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index 8ecc659f329..45e45165528 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -36,6 +36,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Process; +import android.os.UserHandle; import android.preference.PreferenceActivity; import android.provider.Settings; import android.text.TextUtils; @@ -49,11 +50,11 @@ import android.widget.ProgressBar; import android.widget.TextView; import com.android.settings.DisplaySettings; -import com.android.settings.LocationSettings; import com.android.settings.R; import com.android.settings.WirelessSettings; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.bluetooth.BluetoothSettings; +import com.android.settings.location.LocationSettings; import com.android.settings.wifi.WifiSettings; public class PowerUsageDetail extends Fragment implements Button.OnClickListener { @@ -107,6 +108,7 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener public static final String EXTRA_ICON_PACKAGE = "iconPackage"; // String public static final String EXTRA_NO_COVERAGE = "noCoverage"; public static final String EXTRA_ICON_ID = "iconId"; // Int + public static final String EXTRA_SHOW_LOCATION_BUTTON = "showLocationButton"; // Boolean private PackageManager mPm; private DevicePolicyManager mDpm; @@ -128,13 +130,14 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener private double mNoCoverage; // Percentage of time that there was no coverage private boolean mUsesGps; + private boolean mShowLocationButton; private static final String TAG = "PowerUsageDetail"; private String[] mPackages; ApplicationInfo mApp; ComponentName mInstaller; - + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -176,6 +179,7 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener mNoCoverage = args.getDouble(EXTRA_NO_COVERAGE, 0); String iconPackage = args.getString(EXTRA_ICON_PACKAGE); int iconId = args.getInt(EXTRA_ICON_ID, 0); + mShowLocationButton = args.getBoolean(EXTRA_SHOW_LOCATION_BUTTON); if (!TextUtils.isEmpty(iconPackage)) { try { final PackageManager pm = getActivity().getPackageManager(); @@ -316,6 +320,8 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener switch (mTypes[i]) { case R.string.usage_type_data_recv: case R.string.usage_type_data_send: + case R.string.usage_type_data_wifi_recv: + case R.string.usage_type_data_wifi_send: final long bytes = (long) (mValues[i]); value = Formatter.formatFileSize(getActivity(), bytes); break; @@ -327,7 +333,7 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener mUsesGps = true; // Fall through default: - value = Utils.formatElapsedTime(getActivity(), mValues[i]); + value = Utils.formatElapsedTime(getActivity(), mValues[i], true); } ViewGroup item = (ViewGroup) inflater.inflate(R.layout.power_usage_detail_item_text, null); @@ -348,20 +354,21 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener pi = packages != null ? pm.getPackageInfo(packages[0], 0) : null; } catch (NameNotFoundException nnfe) { /* Nothing */ } ApplicationInfo ai = pi != null? pi.applicationInfo : null; - boolean isSystem = ai != null? (ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0 : false; boolean removeHeader = true; switch (mDrainType) { case APP: - // If it is a Java application and it's not a system application - if (packages != null && !isSystem) { + // If it is a Java application and only one package is associated with the Uid + if (packages != null && packages.length == 1) { addControl(R.string.battery_action_app_details, R.string.battery_sugg_apps_info, ACTION_APP_DETAILS); removeHeader = false; // If the application has a settings screen, jump to that // TODO: } - if (mUsesGps) { + // If power usage detail page is launched from location page, suppress "Location" + // button to prevent circular loops. + if (mUsesGps && mShowLocationButton) { addControl(R.string.location_settings_title, R.string.battery_sugg_apps_gps, ACTION_LOCATION_SETTINGS); removeHeader = false; @@ -464,7 +471,7 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener Uri.fromParts("package", mPackages[0], null)); intent.putExtra(Intent.EXTRA_PACKAGES, mPackages); intent.putExtra(Intent.EXTRA_UID, mUid); - intent.putExtra(Intent.EXTRA_USER_HANDLE, mUid); + intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mUid)); getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 2a3d5f86eef..dc86b8de210 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -16,61 +16,37 @@ package com.android.settings.fuelgauge; +import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.pm.UserInfo; -import android.graphics.drawable.Drawable; -import android.hardware.Sensor; -import android.hardware.SensorManager; -import android.net.Uri; import android.os.BatteryStats; -import android.os.BatteryStats.Uid; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Parcel; -import android.os.Process; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.os.SystemClock; -import android.os.UserHandle; -import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; -import android.telephony.SignalStrength; import android.text.TextUtils; -import android.util.Log; -import android.util.SparseArray; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import com.android.internal.app.IBatteryStats; -import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.PowerProfile; import com.android.settings.HelpUtils; import com.android.settings.R; -import com.android.settings.fuelgauge.PowerUsageDetail.DrainType; -import com.android.settings.users.UserUtils; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Map; /** * Displays a list of apps and subsystems that consume power, ordered by how much power was * consumed since the last time it was unplugged. */ -public class PowerUsageSummary extends PreferenceFragment implements Runnable { +public class PowerUsageSummary extends PreferenceFragment { private static final boolean DEBUG = false; @@ -83,18 +59,6 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { private static final int MENU_STATS_REFRESH = Menu.FIRST + 1; private static final int MENU_HELP = Menu.FIRST + 2; - private static BatteryStatsImpl sStatsXfer; - - IBatteryStats mBatteryInfo; - UserManager mUm; - BatteryStatsImpl mStats; - private final List mUsageList = new ArrayList(); - private final List mWifiSippers = new ArrayList(); - private final List mBluetoothSippers = new ArrayList(); - private final SparseArray> mUserSippers - = new SparseArray>(); - private final SparseArray mUserPower = new SparseArray(); - private PreferenceGroup mAppListGroup; private Preference mBatteryStatusPref; @@ -103,20 +67,7 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { private static final int MIN_POWER_THRESHOLD = 5; private static final int MAX_ITEMS_TO_LIST = 10; - private long mStatsPeriod = 0; - private double mMaxPower = 1; - private double mTotalPower; - private double mWifiPower; - private double mBluetoothPower; - private PowerProfile mPowerProfile; - - // How much the apps together have left WIFI running. - private long mAppWifiRunning; - - /** Queue for fetching name and icon for an application */ - private ArrayList mRequestQueue = new ArrayList(); - private Thread mRequestThread; - private boolean mAbort; + private BatteryStatsHelper mStatsHelper; private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() { @@ -130,34 +81,32 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { String batterySummary = context.getResources().getString( R.string.power_usage_level_and_status, batteryLevel, batteryStatus); mBatteryStatusPref.setTitle(batterySummary); - mStats = null; + mStatsHelper.clearStats(); refreshStats(); } } }; + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + mStatsHelper = new BatteryStatsHelper(activity, mHandler); + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - - if (icicle != null) { - mStats = sStatsXfer; - } + mStatsHelper.create(icicle); addPreferencesFromResource(R.xml.power_usage_summary); - mBatteryInfo = IBatteryStats.Stub.asInterface( - ServiceManager.getService("batteryinfo")); - mUm = (UserManager)getActivity().getSystemService(Context.USER_SERVICE); mAppListGroup = (PreferenceGroup) findPreference(KEY_APP_LIST); mBatteryStatusPref = mAppListGroup.findPreference(KEY_BATTERY_STATUS); - mPowerProfile = new PowerProfile(getActivity()); setHasOptionsMenu(true); } @Override public void onResume() { super.onResume(); - mAbort = false; getActivity().registerReceiver(mBatteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); refreshStats(); @@ -165,10 +114,8 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { @Override public void onPause() { - synchronized (mRequestQueue) { - mAbort = true; - } - mHandler.removeMessages(MSG_UPDATE_NAME_ICON); + mStatsHelper.pause(); + mHandler.removeMessages(BatteryStatsHelper.MSG_UPDATE_NAME_ICON); getActivity().unregisterReceiver(mBatteryInfoReceiver); super.onPause(); } @@ -176,18 +123,14 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { @Override public void onDestroy() { super.onDestroy(); - if (getActivity().isChangingConfigurations()) { - sStatsXfer = mStats; - } else { - BatterySipper.sUidCache.clear(); - } + mStatsHelper.destroy(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference instanceof BatteryHistoryPreference) { Parcel hist = Parcel.obtain(); - mStats.writeToParcelWithoutUids(hist, 0); + mStatsHelper.getStats().writeToParcelWithoutUids(hist, 0); byte[] histData = hist.marshall(); Bundle args = new Bundle(); args.putByteArray(BatteryHistoryDetail.EXTRA_STATS, histData); @@ -201,131 +144,7 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { } PowerGaugePreference pgp = (PowerGaugePreference) preference; BatterySipper sipper = pgp.getInfo(); - Bundle args = new Bundle(); - args.putString(PowerUsageDetail.EXTRA_TITLE, sipper.name); - args.putInt(PowerUsageDetail.EXTRA_PERCENT, (int) - Math.ceil(sipper.getSortValue() * 100 / mTotalPower)); - args.putInt(PowerUsageDetail.EXTRA_GAUGE, (int) - Math.ceil(sipper.getSortValue() * 100 / mMaxPower)); - args.putLong(PowerUsageDetail.EXTRA_USAGE_DURATION, mStatsPeriod); - args.putString(PowerUsageDetail.EXTRA_ICON_PACKAGE, sipper.defaultPackageName); - args.putInt(PowerUsageDetail.EXTRA_ICON_ID, sipper.iconId); - args.putDouble(PowerUsageDetail.EXTRA_NO_COVERAGE, sipper.noCoveragePercent); - if (sipper.uidObj != null) { - args.putInt(PowerUsageDetail.EXTRA_UID, sipper.uidObj.getUid()); - } - args.putSerializable(PowerUsageDetail.EXTRA_DRAIN_TYPE, sipper.drainType); - - int[] types; - double[] values; - switch (sipper.drainType) { - case APP: - case USER: - { - Uid uid = sipper.uidObj; - types = new int[] { - R.string.usage_type_cpu, - R.string.usage_type_cpu_foreground, - R.string.usage_type_wake_lock, - R.string.usage_type_gps, - R.string.usage_type_wifi_running, - R.string.usage_type_data_send, - R.string.usage_type_data_recv, - R.string.usage_type_audio, - R.string.usage_type_video, - }; - values = new double[] { - sipper.cpuTime, - sipper.cpuFgTime, - sipper.wakeLockTime, - sipper.gpsTime, - sipper.wifiRunningTime, - sipper.tcpBytesSent, - sipper.tcpBytesReceived, - 0, - 0 - }; - - if (sipper.drainType == DrainType.APP) { - Writer result = new StringWriter(); - PrintWriter printWriter = new PrintWriter(result); - mStats.dumpLocked(printWriter, "", mStatsType, uid.getUid()); - args.putString(PowerUsageDetail.EXTRA_REPORT_DETAILS, result.toString()); - - result = new StringWriter(); - printWriter = new PrintWriter(result); - mStats.dumpCheckinLocked(printWriter, mStatsType, uid.getUid()); - args.putString(PowerUsageDetail.EXTRA_REPORT_CHECKIN_DETAILS, - result.toString()); - } - } - break; - case CELL: - { - types = new int[] { - R.string.usage_type_on_time, - R.string.usage_type_no_coverage - }; - values = new double[] { - sipper.usageTime, - sipper.noCoveragePercent - }; - } - break; - case WIFI: - { - types = new int[] { - R.string.usage_type_wifi_running, - R.string.usage_type_cpu, - R.string.usage_type_cpu_foreground, - R.string.usage_type_wake_lock, - R.string.usage_type_data_send, - R.string.usage_type_data_recv, - }; - values = new double[] { - sipper.usageTime, - sipper.cpuTime, - sipper.cpuFgTime, - sipper.wakeLockTime, - sipper.tcpBytesSent, - sipper.tcpBytesReceived, - }; - } break; - case BLUETOOTH: - { - types = new int[] { - R.string.usage_type_on_time, - R.string.usage_type_cpu, - R.string.usage_type_cpu_foreground, - R.string.usage_type_wake_lock, - R.string.usage_type_data_send, - R.string.usage_type_data_recv, - }; - values = new double[] { - sipper.usageTime, - sipper.cpuTime, - sipper.cpuFgTime, - sipper.wakeLockTime, - sipper.tcpBytesSent, - sipper.tcpBytesReceived, - }; - } break; - default: - { - types = new int[] { - R.string.usage_type_on_time - }; - values = new double[] { - sipper.usageTime - }; - } - } - args.putIntArray(PowerUsageDetail.EXTRA_DETAIL_TYPES, types); - args.putDoubleArray(PowerUsageDetail.EXTRA_DETAIL_VALUES, values); - PreferenceActivity pa = (PreferenceActivity)getActivity(); - pa.startPreferencePanel(PowerUsageDetail.class.getName(), args, - R.string.details_title, null, null, 0); - + mStatsHelper.startBatteryDetailPage((PreferenceActivity) getActivity(), sipper, true); return super.onPreferenceTreeClick(preferenceScreen, preference); } @@ -361,7 +180,7 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { refreshStats(); return true; case MENU_STATS_REFRESH: - mStats = null; + mStatsHelper.clearStats(); refreshStats(); return true; default: @@ -376,43 +195,32 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { } private void refreshStats() { - if (mStats == null) { - load(); - } - mMaxPower = 0; - mTotalPower = 0; - mWifiPower = 0; - mBluetoothPower = 0; - mAppWifiRunning = 0; - mAppListGroup.removeAll(); - mUsageList.clear(); - mWifiSippers.clear(); - mBluetoothSippers.clear(); - mUserSippers.clear(); - mUserPower.clear(); mAppListGroup.setOrderingAsAdded(false); mBatteryStatusPref.setOrder(-2); mAppListGroup.addPreference(mBatteryStatusPref); - BatteryHistoryPreference hist = new BatteryHistoryPreference(getActivity(), mStats); + BatteryHistoryPreference hist = new BatteryHistoryPreference( + getActivity(), mStatsHelper.getStats()); hist.setOrder(-1); mAppListGroup.addPreference(hist); - - if (mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL) < 10) { + + if (mStatsHelper.getPowerProfile().getAveragePower( + PowerProfile.POWER_SCREEN_FULL) < 10) { addNotAvailableMessage(); return; } - processAppUsage(); - processMiscUsage(); - - Collections.sort(mUsageList); - for (BatterySipper sipper : mUsageList) { + mStatsHelper.refreshStats(false); + List usageList = mStatsHelper.getUsageList(); + for (BatterySipper sipper : usageList) { if (sipper.getSortValue() < MIN_POWER_THRESHOLD) continue; - final double percentOfTotal = ((sipper.getSortValue() / mTotalPower) * 100); + final double percentOfTotal = + ((sipper.getSortValue() / mStatsHelper.getTotalPower()) * 100); if (percentOfTotal < 1) continue; - PowerGaugePreference pref = new PowerGaugePreference(getActivity(), sipper.getIcon(), sipper); - final double percentOfMax = (sipper.getSortValue() * 100) / mMaxPower; + PowerGaugePreference pref = + new PowerGaugePreference(getActivity(), sipper.getIcon(), sipper); + final double percentOfMax = + (sipper.getSortValue() * 100) / mStatsHelper.getMaxPower(); sipper.percent = percentOfTotal; pref.setTitle(sipper.name); pref.setOrder(Integer.MAX_VALUE - (int) sipper.getSortValue()); // Invert the order @@ -423,474 +231,16 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { mAppListGroup.addPreference(pref); if (mAppListGroup.getPreferenceCount() > (MAX_ITEMS_TO_LIST+1)) break; } - synchronized (mRequestQueue) { - if (!mRequestQueue.isEmpty()) { - if (mRequestThread == null) { - mRequestThread = new Thread(this, "BatteryUsage Icon Loader"); - mRequestThread.setPriority(Thread.MIN_PRIORITY); - mRequestThread.start(); - } - mRequestQueue.notify(); - } - } } - private void processAppUsage() { - SensorManager sensorManager = (SensorManager)getActivity().getSystemService( - Context.SENSOR_SERVICE); - final int which = mStatsType; - final int speedSteps = mPowerProfile.getNumSpeedSteps(); - final double[] powerCpuNormal = new double[speedSteps]; - final long[] cpuSpeedStepTimes = new long[speedSteps]; - for (int p = 0; p < speedSteps; p++) { - powerCpuNormal[p] = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE, p); - } - final double averageCostPerByte = getAverageDataCost(); - long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which); - long appWakelockTime = 0; - BatterySipper osApp = null; - mStatsPeriod = uSecTime; - SparseArray uidStats = mStats.getUidStats(); - final int NU = uidStats.size(); - for (int iu = 0; iu < NU; iu++) { - Uid u = uidStats.valueAt(iu); - double p; - double power = 0; - double highestDrain = 0; - String packageWithHighestDrain = null; - //mUsageList.add(new AppUsage(u.getUid(), new double[] {power})); - Map processStats = u.getProcessStats(); - long cpuTime = 0; - long cpuFgTime = 0; - long wakelockTime = 0; - long gpsTime = 0; - if (DEBUG) Log.i(TAG, "UID " + u.getUid()); - if (processStats.size() > 0) { - // Process CPU time - for (Map.Entry ent - : processStats.entrySet()) { - Uid.Proc ps = ent.getValue(); - final long userTime = ps.getUserTime(which); - final long systemTime = ps.getSystemTime(which); - final long foregroundTime = ps.getForegroundTime(which); - cpuFgTime += foregroundTime * 10; // convert to millis - final long tmpCpuTime = (userTime + systemTime) * 10; // convert to millis - int totalTimeAtSpeeds = 0; - // Get the total first - for (int step = 0; step < speedSteps; step++) { - cpuSpeedStepTimes[step] = ps.getTimeAtCpuSpeedStep(step, which); - totalTimeAtSpeeds += cpuSpeedStepTimes[step]; - } - if (totalTimeAtSpeeds == 0) totalTimeAtSpeeds = 1; - // Then compute the ratio of time spent at each speed - double processPower = 0; - for (int step = 0; step < speedSteps; step++) { - double ratio = (double) cpuSpeedStepTimes[step] / totalTimeAtSpeeds; - processPower += ratio * tmpCpuTime * powerCpuNormal[step]; - } - cpuTime += tmpCpuTime; - if (DEBUG && processPower != 0) { - Log.i(TAG, String.format("process %s, cpu power=%.2f", - ent.getKey(), processPower / 1000)); - } - power += processPower; - if (packageWithHighestDrain == null - || packageWithHighestDrain.startsWith("*")) { - highestDrain = processPower; - packageWithHighestDrain = ent.getKey(); - } else if (highestDrain < processPower - && !ent.getKey().startsWith("*")) { - highestDrain = processPower; - packageWithHighestDrain = ent.getKey(); - } - } - } - if (cpuFgTime > cpuTime) { - if (DEBUG && cpuFgTime > cpuTime + 10000) { - Log.i(TAG, "WARNING! Cputime is more than 10 seconds behind Foreground time"); - } - cpuTime = cpuFgTime; // Statistics may not have been gathered yet. - } - power /= 1000; - if (DEBUG && power != 0) Log.i(TAG, String.format("total cpu power=%.2f", power)); - - // Process wake lock usage - Map wakelockStats = u.getWakelockStats(); - for (Map.Entry wakelockEntry - : wakelockStats.entrySet()) { - Uid.Wakelock wakelock = wakelockEntry.getValue(); - // Only care about partial wake locks since full wake locks - // are canceled when the user turns the screen off. - BatteryStats.Timer timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL); - if (timer != null) { - wakelockTime += timer.getTotalTimeLocked(uSecTime, which); - } - } - wakelockTime /= 1000; // convert to millis - appWakelockTime += wakelockTime; - - // Add cost of holding a wake lock - p = (wakelockTime - * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000; - power += p; - if (DEBUG && p != 0) Log.i(TAG, String.format("wakelock power=%.2f", p)); - - // Add cost of data traffic - long tcpBytesReceived = u.getTcpBytesReceived(mStatsType); - long tcpBytesSent = u.getTcpBytesSent(mStatsType); - p = (tcpBytesReceived+tcpBytesSent) * averageCostPerByte; - power += p; - if (DEBUG && p != 0) Log.i(TAG, String.format("tcp power=%.2f", p)); - - // Add cost of keeping WIFI running. - long wifiRunningTimeMs = u.getWifiRunningTime(uSecTime, which) / 1000; - mAppWifiRunning += wifiRunningTimeMs; - p = (wifiRunningTimeMs - * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ON)) / 1000; - power += p; - if (DEBUG && p != 0) Log.i(TAG, String.format("wifi running power=%.2f", p)); - - // Add cost of WIFI scans - long wifiScanTimeMs = u.getWifiScanTime(uSecTime, which) / 1000; - p = (wifiScanTimeMs - * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_SCAN)) / 1000; - power += p; - if (DEBUG && p != 0) Log.i(TAG, String.format("wifi scanning power=%.2f", p)); - - // Process Sensor usage - Map sensorStats = u.getSensorStats(); - for (Map.Entry sensorEntry - : sensorStats.entrySet()) { - Uid.Sensor sensor = sensorEntry.getValue(); - int sensorHandle = sensor.getHandle(); - BatteryStats.Timer timer = sensor.getSensorTime(); - long sensorTime = timer.getTotalTimeLocked(uSecTime, which) / 1000; - double multiplier = 0; - switch (sensorHandle) { - case Uid.Sensor.GPS: - multiplier = mPowerProfile.getAveragePower(PowerProfile.POWER_GPS_ON); - gpsTime = sensorTime; - break; - default: - List sensorList = sensorManager.getSensorList( - android.hardware.Sensor.TYPE_ALL); - for (android.hardware.Sensor s : sensorList) { - if (s.getHandle() == sensorHandle) { - multiplier = s.getPower(); - break; - } - } - } - p = (multiplier * sensorTime) / 1000; - power += p; - if (DEBUG && p != 0) { - Log.i(TAG, String.format("sensor %s power=%.2f", sensor.toString(), p)); - } - } - - if (DEBUG) Log.i(TAG, String.format("UID %d total power=%.2f", u.getUid(), power)); - - // Add the app to the list if it is consuming power - boolean isOtherUser = false; - final int userId = UserHandle.getUserId(u.getUid()); - if (power != 0 || u.getUid() == 0) { - BatterySipper app = new BatterySipper(getActivity(), mRequestQueue, mHandler, - packageWithHighestDrain, DrainType.APP, 0, u, - new double[] {power}); - app.cpuTime = cpuTime; - app.gpsTime = gpsTime; - app.wifiRunningTime = wifiRunningTimeMs; - app.cpuFgTime = cpuFgTime; - app.wakeLockTime = wakelockTime; - app.tcpBytesReceived = tcpBytesReceived; - app.tcpBytesSent = tcpBytesSent; - if (u.getUid() == Process.WIFI_UID) { - mWifiSippers.add(app); - } else if (u.getUid() == Process.BLUETOOTH_UID) { - mBluetoothSippers.add(app); - } else if (userId != UserHandle.myUserId() - && UserHandle.getAppId(u.getUid()) >= Process.FIRST_APPLICATION_UID) { - isOtherUser = true; - List list = mUserSippers.get(userId); - if (list == null) { - list = new ArrayList(); - mUserSippers.put(userId, list); - } - list.add(app); - } else { - mUsageList.add(app); - } - if (u.getUid() == 0) { - osApp = app; - } - } - if (power != 0) { - if (u.getUid() == Process.WIFI_UID) { - mWifiPower += power; - } else if (u.getUid() == Process.BLUETOOTH_UID) { - mBluetoothPower += power; - } else if (isOtherUser) { - Double userPower = mUserPower.get(userId); - if (userPower == null) { - userPower = power; - } else { - userPower += power; - } - mUserPower.put(userId, userPower); - } else { - if (power > mMaxPower) mMaxPower = power; - mTotalPower += power; - } - } - } - - // The device has probably been awake for longer than the screen on - // time and application wake lock time would account for. Assign - // this remainder to the OS, if possible. - if (osApp != null) { - long wakeTimeMillis = mStats.computeBatteryUptime( - SystemClock.uptimeMillis() * 1000, which) / 1000; - wakeTimeMillis -= appWakelockTime + (mStats.getScreenOnTime( - SystemClock.elapsedRealtime(), which) / 1000); - if (wakeTimeMillis > 0) { - double power = (wakeTimeMillis - * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / 1000; - if (DEBUG) Log.i(TAG, "OS wakeLockTime " + wakeTimeMillis + " power " + power); - osApp.wakeLockTime += wakeTimeMillis; - osApp.value += power; - osApp.values[0] += power; - if (osApp.value > mMaxPower) mMaxPower = osApp.value; - mTotalPower += power; - } - } - } - - private void addPhoneUsage(long uSecNow) { - long phoneOnTimeMs = mStats.getPhoneOnTime(uSecNow, mStatsType) / 1000; - double phoneOnPower = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE) - * phoneOnTimeMs / 1000; - addEntry(getActivity().getString(R.string.power_phone), DrainType.PHONE, phoneOnTimeMs, - R.drawable.ic_settings_voice_calls, phoneOnPower); - } - - private void addScreenUsage(long uSecNow) { - double power = 0; - long screenOnTimeMs = mStats.getScreenOnTime(uSecNow, mStatsType) / 1000; - power += screenOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_ON); - final double screenFullPower = - mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL); - for (int i = 0; i < BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS; i++) { - double screenBinPower = screenFullPower * (i + 0.5f) - / BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS; - long brightnessTime = mStats.getScreenBrightnessTime(i, uSecNow, mStatsType) / 1000; - power += screenBinPower * brightnessTime; - if (DEBUG) { - Log.i(TAG, "Screen bin power = " + (int) screenBinPower + ", time = " - + brightnessTime); - } - } - power /= 1000; // To seconds - addEntry(getActivity().getString(R.string.power_screen), DrainType.SCREEN, screenOnTimeMs, - R.drawable.ic_settings_display, power); - } - - private void addRadioUsage(long uSecNow) { - double power = 0; - final int BINS = SignalStrength.NUM_SIGNAL_STRENGTH_BINS; - long signalTimeMs = 0; - for (int i = 0; i < BINS; i++) { - long strengthTimeMs = mStats.getPhoneSignalStrengthTime(i, uSecNow, mStatsType) / 1000; - power += strengthTimeMs / 1000 - * mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ON, i); - signalTimeMs += strengthTimeMs; - } - long scanningTimeMs = mStats.getPhoneSignalScanningTime(uSecNow, mStatsType) / 1000; - power += scanningTimeMs / 1000 * mPowerProfile.getAveragePower( - PowerProfile.POWER_RADIO_SCANNING); - BatterySipper bs = - addEntry(getActivity().getString(R.string.power_cell), DrainType.CELL, - signalTimeMs, R.drawable.ic_settings_cell_standby, power); - if (signalTimeMs != 0) { - bs.noCoveragePercent = mStats.getPhoneSignalStrengthTime(0, uSecNow, mStatsType) - / 1000 * 100.0 / signalTimeMs; - } - } - - private void aggregateSippers(BatterySipper bs, List from, String tag) { - for (int i=0; i sippers = mUserSippers.valueAt(i); - UserInfo info = mUm.getUserInfo(userId); - Drawable icon; - String name; - if (info != null) { - icon = UserUtils.getUserIcon(mUm, info, getResources()); - name = info != null ? info.name : null; - if (name == null) { - name = Integer.toString(info.id); - } - name = getActivity().getResources().getString( - R.string.running_process_item_user_label, name); - } else { - icon = null; - name = getActivity().getResources().getString( - R.string.running_process_item_removed_user_label); - } - double power = mUserPower.get(userId); - BatterySipper bs = addEntry(name, DrainType.USER, 0, 0, power); - bs.icon = icon; - aggregateSippers(bs, sippers, "User"); - } - } - - private double getAverageDataCost() { - final long WIFI_BPS = 1000000; // TODO: Extract average bit rates from system - final long MOBILE_BPS = 200000; // TODO: Extract average bit rates from system - final double WIFI_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE) - / 3600; - final double MOBILE_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE) - / 3600; - final long mobileData = mStats.getMobileTcpBytesReceived(mStatsType) + - mStats.getMobileTcpBytesSent(mStatsType); - final long wifiData = mStats.getTotalTcpBytesReceived(mStatsType) + - mStats.getTotalTcpBytesSent(mStatsType) - mobileData; - final long radioDataUptimeMs = mStats.getRadioDataUptime() / 1000; - final long mobileBps = radioDataUptimeMs != 0 - ? mobileData * 8 * 1000 / radioDataUptimeMs - : MOBILE_BPS; - - double mobileCostPerByte = MOBILE_POWER / (mobileBps / 8); - double wifiCostPerByte = WIFI_POWER / (WIFI_BPS / 8); - if (wifiData + mobileData != 0) { - return (mobileCostPerByte * mobileData + wifiCostPerByte * wifiData) - / (mobileData + wifiData); - } else { - return 0; - } - } - - private void processMiscUsage() { - final int which = mStatsType; - long uSecTime = SystemClock.elapsedRealtime() * 1000; - final long uSecNow = mStats.computeBatteryRealtime(uSecTime, which); - final long timeSinceUnplugged = uSecNow; - if (DEBUG) { - Log.i(TAG, "Uptime since last unplugged = " + (timeSinceUnplugged / 1000)); - } - - addUserUsage(); - addPhoneUsage(uSecNow); - addScreenUsage(uSecNow); - addWiFiUsage(uSecNow); - addBluetoothUsage(uSecNow); - addIdleUsage(uSecNow); // Not including cellular idle power - // Don't compute radio usage if it's a wifi-only device - if (!com.android.settings.Utils.isWifiOnly(getActivity())) { - addRadioUsage(uSecNow); - } - } - - private BatterySipper addEntry(String label, DrainType drainType, long time, int iconId, - double power) { - if (power > mMaxPower) mMaxPower = power; - mTotalPower += power; - BatterySipper bs = new BatterySipper(getActivity(), mRequestQueue, mHandler, - label, drainType, iconId, null, new double[] {power}); - bs.usageTime = time; - bs.iconId = iconId; - mUsageList.add(bs); - return bs; - } - - private void load() { - try { - byte[] data = mBatteryInfo.getStatistics(); - Parcel parcel = Parcel.obtain(); - parcel.unmarshall(data, 0, data.length); - parcel.setDataPosition(0); - mStats = com.android.internal.os.BatteryStatsImpl.CREATOR - .createFromParcel(parcel); - mStats.distributeWorkLocked(BatteryStats.STATS_SINCE_CHARGED); - } catch (RemoteException e) { - Log.e(TAG, "RemoteException:", e); - } - } - - public void run() { - while (true) { - BatterySipper bs; - synchronized (mRequestQueue) { - if (mRequestQueue.isEmpty() || mAbort) { - mRequestThread = null; - return; - } - bs = mRequestQueue.remove(0); - } - bs.getNameIcon(); - } - } - - static final int MSG_UPDATE_NAME_ICON = 1; - Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { - case MSG_UPDATE_NAME_ICON: + case BatteryStatsHelper.MSG_UPDATE_NAME_ICON: BatterySipper bs = (BatterySipper) msg.obj; - PowerGaugePreference pgp = + PowerGaugePreference pgp = (PowerGaugePreference) findPreference( Integer.toString(bs.uidObj.getUid())); if (pgp != null) { @@ -898,6 +248,12 @@ public class PowerUsageSummary extends PreferenceFragment implements Runnable { pgp.setTitle(bs.name); } break; + case BatteryStatsHelper.MSG_REPORT_FULLY_DRAWN: + Activity activity = getActivity(); + if (activity != null) { + activity.reportFullyDrawn(); + } + break; } super.handleMessage(msg); } diff --git a/src/com/android/settings/fuelgauge/Utils.java b/src/com/android/settings/fuelgauge/Utils.java index 5c99a86d643..1ff358ea1b2 100644 --- a/src/com/android/settings/fuelgauge/Utils.java +++ b/src/com/android/settings/fuelgauge/Utils.java @@ -35,9 +35,13 @@ public class Utils { * @param millis the elapsed time in milli seconds * @return the formatted elapsed time */ - public static String formatElapsedTime(Context context, double millis) { + public static String formatElapsedTime(Context context, double millis, boolean inclSeconds) { StringBuilder sb = new StringBuilder(); int seconds = (int) Math.floor(millis / 1000); + if (!inclSeconds) { + // Round up. + seconds += 30; + } int days = 0, hours = 0, minutes = 0; if (seconds > SECONDS_PER_DAY) { @@ -52,15 +56,28 @@ public class Utils { minutes = seconds / SECONDS_PER_MINUTE; seconds -= minutes * SECONDS_PER_MINUTE; } - if (days > 0) { - sb.append(context.getString(R.string.battery_history_days, - days, hours, minutes, seconds)); - } else if (hours > 0) { - sb.append(context.getString(R.string.battery_history_hours, hours, minutes, seconds)); - } else if (minutes > 0) { - sb.append(context.getString(R.string.battery_history_minutes, minutes, seconds)); + if (inclSeconds) { + if (days > 0) { + sb.append(context.getString(R.string.battery_history_days, + days, hours, minutes, seconds)); + } else if (hours > 0) { + sb.append(context.getString(R.string.battery_history_hours, + hours, minutes, seconds)); + } else if (minutes > 0) { + sb.append(context.getString(R.string.battery_history_minutes, minutes, seconds)); + } else { + sb.append(context.getString(R.string.battery_history_seconds, seconds)); + } } else { - sb.append(context.getString(R.string.battery_history_seconds, seconds)); + if (days > 0) { + sb.append(context.getString(R.string.battery_history_days_no_seconds, + days, hours, minutes)); + } else if (hours > 0) { + sb.append(context.getString(R.string.battery_history_hours_no_seconds, + hours, minutes)); + } else { + sb.append(context.getString(R.string.battery_history_minutes_no_seconds, minutes)); + } } return sb.toString(); } diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java index 2a5adb1d0c9..a2700cfc44e 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java +++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java @@ -20,10 +20,12 @@ import com.android.settings.R; import com.android.settings.Settings.KeyboardLayoutPickerActivity; import com.android.settings.Settings.SpellCheckersSettingsActivity; import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.UserDictionarySettings; import com.android.settings.Utils; import com.android.settings.VoiceInputOutputSettings; import android.app.Activity; +import android.app.Fragment; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -38,6 +40,8 @@ import android.os.Handler; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; +import android.preference.Preference.OnPreferenceChangeListener; +import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; import android.provider.Settings; @@ -46,6 +50,7 @@ import android.text.TextUtils; import android.view.InputDevice; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; +import android.widget.BaseAdapter; import java.util.ArrayList; import java.util.Collections; @@ -83,12 +88,23 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment new ArrayList(); private InputManager mIm; private InputMethodManager mImm; - private List mImis; private boolean mIsOnlyImeSettings; private Handler mHandler; - @SuppressWarnings("unused") private SettingsObserver mSettingsObserver; private Intent mIntentWaitingForResult; + private InputMethodSettingValuesWrapper mInputMethodSettingValues; + + private final OnPreferenceChangeListener mOnImePreferenceChangedListener = + new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference arg0, Object arg1) { + InputMethodSettingValuesWrapper.getInstance( + arg0.getContext()).refreshAllInputMethodAndSubtypes(); + ((BaseAdapter)getPreferenceScreen().getRootAdapter()).notifyDataSetChanged(); + updateInputMethodPreferenceViews(); + return true; + } + }; @Override public void onCreate(Bundle icicle) { @@ -140,7 +156,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment // Build IME preference category. mImm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - mImis = mImm.getInputMethodList(); + mInputMethodSettingValues = InputMethodSettingValuesWrapper.getInstance(getActivity()); mKeyboardSettingsCategory.removeAll(); if (!mIsOnlyImeSettings) { @@ -150,18 +166,22 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment mKeyboardSettingsCategory.addPreference(currentIme); } - mInputMethodPreferenceList.clear(); - final int N = (mImis == null ? 0 : mImis.size()); - for (int i = 0; i < N; ++i) { - final InputMethodInfo imi = mImis.get(i); - final InputMethodPreference pref = getInputMethodPreference(imi, N); - mInputMethodPreferenceList.add(pref); - } - - if (!mInputMethodPreferenceList.isEmpty()) { - Collections.sort(mInputMethodPreferenceList); + synchronized (mInputMethodPreferenceList) { + mInputMethodPreferenceList.clear(); + final List imis = mInputMethodSettingValues.getInputMethodList(); + final int N = (imis == null ? 0 : imis.size()); for (int i = 0; i < N; ++i) { - mKeyboardSettingsCategory.addPreference(mInputMethodPreferenceList.get(i)); + final InputMethodInfo imi = imis.get(i); + final InputMethodPreference pref = getInputMethodPreference(imi); + pref.setOnImePreferenceChangeListener(mOnImePreferenceChangedListener); + mInputMethodPreferenceList.add(pref); + } + + if (!mInputMethodPreferenceList.isEmpty()) { + Collections.sort(mInputMethodPreferenceList); + for (int i = 0; i < N; ++i) { + mKeyboardSettingsCategory.addPreference(mInputMethodPreferenceList.get(i)); + } } } @@ -193,31 +213,41 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment private void updateUserDictionaryPreference(Preference userDictionaryPreference) { final Activity activity = getActivity(); - final TreeSet localeList = UserDictionaryList.getUserDictionaryLocalesSet(activity); - if (null == localeList) { + final TreeSet localeSet = UserDictionaryList.getUserDictionaryLocalesSet(activity); + if (null == localeSet) { // The locale list is null if and only if the user dictionary service is // not present or disabled. In this case we need to remove the preference. getPreferenceScreen().removePreference(userDictionaryPreference); - } else if (localeList.size() <= 1) { - final Intent intent = - new Intent(UserDictionaryList.USER_DICTIONARY_SETTINGS_INTENT_ACTION); - userDictionaryPreference.setTitle(R.string.user_dict_single_settings_title); - userDictionaryPreference.setIntent(intent); - userDictionaryPreference.setFragment( - com.android.settings.UserDictionarySettings.class.getName()); - // If the size of localeList is 0, we don't set the locale parameter in the - // extras. This will be interpreted by the UserDictionarySettings class as - // meaning "the current locale". - // Note that with the current code for UserDictionaryList#getUserDictionaryLocalesSet() - // the locale list always has at least one element, since it always includes the current - // locale explicitly. @see UserDictionaryList.getUserDictionaryLocalesSet(). - if (localeList.size() == 1) { - final String locale = (String)localeList.toArray()[0]; - userDictionaryPreference.getExtras().putString("locale", locale); - } } else { - userDictionaryPreference.setTitle(R.string.user_dict_multiple_settings_title); - userDictionaryPreference.setFragment(UserDictionaryList.class.getName()); + userDictionaryPreference.setOnPreferenceClickListener( + new OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference arg0) { + // Redirect to UserDictionarySettings if the user needs only one + // language. + final Bundle extras = new Bundle(); + final Class targetFragment; + if (localeSet.size() <= 1) { + if (!localeSet.isEmpty()) { + // If the size of localeList is 0, we don't set the locale + // parameter in the extras. This will be interpreted by the + // UserDictionarySettings class as meaning + // "the current locale". Note that with the current code for + // UserDictionaryList#getUserDictionaryLocalesSet() + // the locale list always has at least one element, since it + // always includes the current locale explicitly. + // @see UserDictionaryList.getUserDictionaryLocalesSet(). + extras.putString("locale", localeSet.first()); + } + targetFragment = UserDictionarySettings.class; + } else { + targetFragment = UserDictionaryList.class; + } + startFragment(InputMethodAndLanguageSettings.this, + targetFragment.getCanonicalName(), -1, extras); + return true; + } + }); } } @@ -278,10 +308,14 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment updateInputDevices(); - // IME + // Refresh internal states in mInputMethodSettingValues to keep the latest + // "InputMethodInfo"s and "InputMethodSubtype"s + mInputMethodSettingValues.refreshAllInputMethodAndSubtypes(); + // TODO: Consolidate the logic to InputMethodSettingsWrapper InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( - this, getContentResolver(), mImis, null); - updateActiveInputMethodsSummary(); + this, getContentResolver(), + mInputMethodSettingValues.getInputMethodList(), null); + updateInputMethodPreferenceViews(); } @Override @@ -294,8 +328,10 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (SHOW_INPUT_METHOD_SWITCHER_SETTINGS) { mShowInputMethodSelectorPref.setOnPreferenceChangeListener(null); } + // TODO: Consolidate the logic to InputMethodSettingsWrapper InputMethodAndSubtypeUtil.saveInputMethodSubtypeList( - this, getContentResolver(), mImis, !mHardKeyboardPreferenceList.isEmpty()); + this, getContentResolver(), mInputMethodSettingValues.getInputMethodList(), + !mHardKeyboardPreferenceList.isEmpty()); } @Override @@ -389,10 +425,12 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment return false; } - private void updateActiveInputMethodsSummary() { - for (Preference pref : mInputMethodPreferenceList) { - if (pref instanceof InputMethodPreference) { - ((InputMethodPreference)pref).updateSummary(); + private void updateInputMethodPreferenceViews() { + synchronized (mInputMethodPreferenceList) { + for (Preference pref : mInputMethodPreferenceList) { + if (pref instanceof InputMethodPreference) { + ((InputMethodPreference) pref).updatePreferenceViews(); + } } } updateCurrentImeName(); @@ -403,8 +441,8 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment if (context == null || mImm == null) return; final Preference curPref = getPreferenceScreen().findPreference(KEY_CURRENT_INPUT_METHOD); if (curPref != null) { - final CharSequence curIme = InputMethodAndSubtypeUtil.getCurrentInputMethodName( - context, getContentResolver(), mImm, mImis, getPackageManager()); + final CharSequence curIme = + mInputMethodSettingValues.getCurrentInputMethodName(context); if (!TextUtils.isEmpty(curIme)) { synchronized(this) { curPref.setSummary(curIme); @@ -413,7 +451,7 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment } } - private InputMethodPreference getInputMethodPreference(InputMethodInfo imi, int imiSize) { + private InputMethodPreference getInputMethodPreference(InputMethodInfo imi) { final PackageManager pm = getPackageManager(); final CharSequence label = imi.loadLabel(pm); // IME settings @@ -427,7 +465,8 @@ public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment } // Add a check box for enabling/disabling IME - InputMethodPreference pref = new InputMethodPreference(this, intent, mImm, imi, imiSize); + final InputMethodPreference pref = + new InputMethodPreference(this, intent, mImm, imi); pref.setKey(imi.getId()); pref.setTitle(label); return pref; diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java index f3addf367cf..419a8774996 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnabler.java @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; +import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; @@ -106,6 +107,10 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { @Override public void onResume() { super.onResume(); + // Refresh internal states in mInputMethodSettingValues to keep the latest + // "InputMethodInfo"s and "InputMethodSubtype"s + InputMethodSettingValuesWrapper + .getInstance(getActivity()).refreshAllInputMethodAndSubtypes(); InputMethodAndSubtypeUtil.loadInputMethodSubtypeList( this, getContentResolver(), mInputMethodProperties, mInputMethodAndSubtypePrefsMap); updateAutoSelectionCB(); @@ -145,7 +150,7 @@ public class InputMethodAndSubtypeEnabler extends SettingsPreferenceFragment { InputMethodInfo imi = mInputMethodProperties.get(i); if (id.equals(imi.getId())) { selImi = imi; - if (InputMethodAndSubtypeUtil.isSystemIme(imi)) { + if (InputMethodUtils.isSystemIme(imi)) { InputMethodAndSubtypeUtil.setSubtypesPreferenceEnabled( this, mInputMethodProperties, id, true); // This is a built-in IME, so no need to warn. diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java index d70d5e44192..5693e209ed2 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeEnablerActivity.java @@ -15,9 +15,12 @@ */ package com.android.settings.inputmethod; +import android.app.Fragment; import android.content.Intent; import android.preference.PreferenceActivity; +import com.android.settings.ChooseLockPassword.ChooseLockPasswordFragment; + public class InputMethodAndSubtypeEnablerActivity extends PreferenceActivity { @Override public Intent getIntent() { @@ -28,4 +31,11 @@ public class InputMethodAndSubtypeEnablerActivity extends PreferenceActivity { } return modIntent; } + + @Override + protected boolean isValidFragment(String fragmentName) { + if (InputMethodAndSubtypeEnabler.class.getName().equals(fragmentName)) return true; + return false; + } + } diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java index c7d8c8941a3..561302ab35a 100644 --- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java +++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java @@ -16,13 +16,10 @@ package com.android.settings.inputmethod; +import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.SettingsPreferenceFragment; import android.content.ContentResolver; -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.res.Resources; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceScreen; @@ -31,13 +28,11 @@ import android.provider.Settings.SettingNotFoundException; import android.text.TextUtils; import android.util.Log; import android.view.inputmethod.InputMethodInfo; -import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodSubtype; import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.Map; public class InputMethodAndSubtypeUtil { @@ -48,7 +43,6 @@ public class InputMethodAndSubtypeUtil { private static final char INPUT_METHOD_SEPARATER = ':'; private static final char INPUT_METHOD_SUBTYPE_SEPARATER = ';'; private static final int NOT_A_SUBTYPE_ID = -1; - private static final Locale ENGLISH_LOCALE = new Locale("en"); private static final TextUtils.SimpleStringSplitter sStringInputMethodSplitter = new TextUtils.SimpleStringSplitter(INPUT_METHOD_SEPARATER); @@ -154,28 +148,6 @@ public class InputMethodAndSubtypeUtil { return set; } - public static CharSequence getCurrentInputMethodName(Context context, ContentResolver resolver, - InputMethodManager imm, List imis, PackageManager pm) { - if (resolver == null || imis == null) return null; - final String currentInputMethodId = Settings.Secure.getString(resolver, - Settings.Secure.DEFAULT_INPUT_METHOD); - if (TextUtils.isEmpty(currentInputMethodId)) return null; - for (InputMethodInfo imi : imis) { - if (currentInputMethodId.equals(imi.getId())) { - final InputMethodSubtype subtype = imm.getCurrentInputMethodSubtype(); - final CharSequence imiLabel = imi.loadLabel(pm); - final CharSequence summary = subtype != null - ? TextUtils.concat(subtype.getDisplayName(context, - imi.getPackageName(), imi.getServiceInfo().applicationInfo), - (TextUtils.isEmpty(imiLabel) ? - "" : " - " + imiLabel)) - : imiLabel; - return summary; - } - } - return null; - } - public static void saveInputMethodSubtypeList(SettingsPreferenceFragment context, ContentResolver resolver, List inputMethodInfos, boolean hasHardKeyboard) { @@ -198,8 +170,9 @@ public class InputMethodAndSubtypeUtil { ((CheckBoxPreference) pref).isChecked() : enabledIMEAndSubtypesMap.containsKey(imiId); final boolean isCurrentInputMethod = imiId.equals(currentInputMethodId); - final boolean systemIme = isSystemIme(imi); - if ((!hasHardKeyboard && isAlwaysCheckedIme(imi, context.getActivity(), imiCount)) + final boolean systemIme = InputMethodUtils.isSystemIme(imi); + if ((!hasHardKeyboard && InputMethodSettingValuesWrapper.getInstance( + context.getActivity()).isAlwaysCheckedIme(imi, context.getActivity())) || isImeChecked) { if (!enabledIMEAndSubtypesMap.containsKey(imiId)) { // imiId has just been enabled @@ -367,56 +340,4 @@ public class InputMethodAndSubtypeUtil { } } } - - public static boolean isSystemIme(InputMethodInfo property) { - return (property.getServiceInfo().applicationInfo.flags - & ApplicationInfo.FLAG_SYSTEM) != 0; - } - - public static boolean isAuxiliaryIme(InputMethodInfo imi) { - return imi.isAuxiliaryIme(); - } - - public static boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context, int imiCount) { - if (imiCount <= 1) { - return true; - } - if (!isSystemIme(imi)) { - return false; - } - if (isAuxiliaryIme(imi)) { - return false; - } - if (isValidDefaultIme(imi, context)) { - return true; - } - return containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage()); - } - - private static boolean isValidDefaultIme(InputMethodInfo imi, Context context) { - if (imi.getIsDefaultResourceId() != 0) { - try { - Resources res = context.createPackageContext( - imi.getPackageName(), 0).getResources(); - if (res.getBoolean(imi.getIsDefaultResourceId()) - && containsSubtypeOf(imi, context.getResources().getConfiguration(). - locale.getLanguage())) { - return true; - } - } catch (PackageManager.NameNotFoundException ex) { - } catch (Resources.NotFoundException ex) { - } - } - return false; - } - - private static boolean containsSubtypeOf(InputMethodInfo imi, String language) { - final int N = imi.getSubtypeCount(); - for (int i = 0; i < N; ++i) { - if (imi.getSubtypeAt(i).getLocale().startsWith(language)) { - return true; - } - } - return false; - } } diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java index 56b6e673850..aa6430fc903 100644 --- a/src/com/android/settings/inputmethod/InputMethodPreference.java +++ b/src/com/android/settings/inputmethod/InputMethodPreference.java @@ -16,6 +16,7 @@ package com.android.settings.inputmethod; +import com.android.internal.inputmethod.InputMethodUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; @@ -23,6 +24,7 @@ import com.android.settings.Utils; import android.app.AlertDialog; import android.app.Fragment; import android.content.ActivityNotFoundException; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; @@ -44,7 +46,6 @@ import android.widget.TextView; import android.widget.Toast; import java.text.Collator; -import java.util.Comparator; import java.util.List; public class InputMethodPreference extends CheckBoxPreference { @@ -52,8 +53,8 @@ public class InputMethodPreference extends CheckBoxPreference { private final SettingsPreferenceFragment mFragment; private final InputMethodInfo mImi; private final InputMethodManager mImm; + private final boolean mIsValidSystemNonAuxAsciiCapableIme; private final Intent mSettingsIntent; - private final boolean mAlwaysChecked; private final boolean mIsSystemIme; private final Collator mCollator; @@ -62,6 +63,7 @@ public class InputMethodPreference extends CheckBoxPreference { private TextView mTitleText; private TextView mSummaryText; private View mInputMethodPref; + private OnPreferenceChangeListener mOnImePreferenceChangeListener; private final OnClickListener mPrefOnclickListener = new OnClickListener() { @Override @@ -82,7 +84,7 @@ public class InputMethodPreference extends CheckBoxPreference { }; public InputMethodPreference(SettingsPreferenceFragment fragment, Intent settingsIntent, - InputMethodManager imm, InputMethodInfo imi, int imiCount) { + InputMethodManager imm, InputMethodInfo imi) { super(fragment.getActivity(), null, R.style.InputMethodPreferenceStyle); setLayoutResource(R.layout.preference_inputmethod); setWidgetLayoutResource(R.layout.preference_inputmethod_widget); @@ -90,14 +92,12 @@ public class InputMethodPreference extends CheckBoxPreference { mSettingsIntent = settingsIntent; mImm = imm; mImi = imi; - updateSummary(); - mAlwaysChecked = InputMethodAndSubtypeUtil.isAlwaysCheckedIme( - imi, fragment.getActivity(), imiCount); - mIsSystemIme = InputMethodAndSubtypeUtil.isSystemIme(imi); - if (mAlwaysChecked) { - setEnabled(false); - } + mIsSystemIme = InputMethodUtils.isSystemIme(imi); mCollator = Collator.getInstance(fragment.getResources().getConfiguration().locale); + final Context context = fragment.getActivity(); + mIsValidSystemNonAuxAsciiCapableIme = InputMethodSettingValuesWrapper + .getInstance(context).isValidSystemNonAuxAsciiCapableIme(imi, context); + updatePreferenceViews(); } @Override @@ -157,9 +157,8 @@ public class InputMethodPreference extends CheckBoxPreference { } if (mSettingsIntent == null) { mInputMethodSettingsButton.setVisibility(View.GONE); - } else { - updatePreferenceViews(); } + updatePreferenceViews(); } @Override @@ -168,7 +167,16 @@ public class InputMethodPreference extends CheckBoxPreference { updatePreferenceViews(); } - private void updatePreferenceViews() { + public void updatePreferenceViews() { + final boolean isAlwaysChecked = + InputMethodSettingValuesWrapper.getInstance(getContext()).isAlwaysCheckedIme( + mImi, getContext()); + if (isAlwaysChecked) { + super.setChecked(true); + super.setEnabled(false); + } else { + super.setEnabled(true); + } final boolean checked = isChecked(); if (mInputMethodSettingsButton != null) { mInputMethodSettingsButton.setEnabled(checked); @@ -193,6 +201,7 @@ public class InputMethodPreference extends CheckBoxPreference { mInputMethodPref.setBackgroundColor(0); } } + updateSummary(); } public static boolean startFragment( @@ -210,7 +219,7 @@ public class InputMethodPreference extends CheckBoxPreference { } } - public String getSummaryString() { + private String getSummaryString() { final StringBuilder builder = new StringBuilder(); final List subtypes = mImm.getEnabledInputMethodSubtypeList(mImi, true); for (InputMethodSubtype subtype : subtypes) { @@ -224,7 +233,7 @@ public class InputMethodPreference extends CheckBoxPreference { return builder.toString(); } - public void updateSummary() { + private void updateSummary() { final String summary = getSummaryString(); if (TextUtils.isEmpty(summary)) { return; @@ -237,17 +246,19 @@ public class InputMethodPreference extends CheckBoxPreference { * @param checked whether to check the box * @param save whether to save IME settings */ - public void setChecked(boolean checked, boolean save) { + private void setChecked(boolean checked, boolean save) { + final boolean wasChecked = isChecked(); super.setChecked(checked); if (save) { saveImeSettings(); + if (wasChecked != checked && mOnImePreferenceChangeListener != null) { + mOnImePreferenceChangeListener.onPreferenceChange(this, checked); + } } - updateSummary(); } - @Override - public void setChecked(boolean checked) { - setChecked(checked, false); + public void setOnImePreferenceChangeListener(OnPreferenceChangeListener listener) { + mOnImePreferenceChangeListener = listener; } private void showSecurityWarnDialog(InputMethodInfo imi, final InputMethodPreference chkPref) { @@ -284,8 +295,8 @@ public class InputMethodPreference extends CheckBoxPreference { return super.compareTo(p); } final InputMethodPreference imp = (InputMethodPreference) p; - final boolean priority0 = mIsSystemIme && mAlwaysChecked; - final boolean priority1 = imp.mIsSystemIme && imp.mAlwaysChecked; + final boolean priority0 = mIsSystemIme && mIsValidSystemNonAuxAsciiCapableIme; + final boolean priority1 = imp.mIsSystemIme && imp.mIsValidSystemNonAuxAsciiCapableIme; if (priority0 == priority1) { final CharSequence t0 = getTitle(); final CharSequence t1 = imp.getTitle(); diff --git a/src/com/android/settings/inputmethod/InputMethodSettingValuesWrapper.java b/src/com/android/settings/inputmethod/InputMethodSettingValuesWrapper.java new file mode 100644 index 00000000000..ccba143a0d4 --- /dev/null +++ b/src/com/android/settings/inputmethod/InputMethodSettingValuesWrapper.java @@ -0,0 +1,204 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.inputmethod; + +import com.android.internal.inputmethod.InputMethodUtils; +import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings; + +import android.app.ActivityManagerNative; +import android.content.Context; +import android.os.RemoteException; +import android.util.Log; +import android.util.Slog; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodSubtype; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; + +/** + * This class is a wrapper for InputMethodSettings. You need to refresh internal states + * manually on some events when "InputMethodInfo"s and "InputMethodSubtype"s can be + * changed. + */ +public class InputMethodSettingValuesWrapper { + private static final String TAG = InputMethodSettingValuesWrapper.class.getSimpleName(); + private static final Locale ENGLISH_LOCALE = new Locale("en"); + + private static volatile InputMethodSettingValuesWrapper sInstance; + private final ArrayList mMethodList = new ArrayList(); + private final HashMap mMethodMap = + new HashMap(); + private final InputMethodSettings mSettings; + private final InputMethodManager mImm; + private final HashSet mAsciiCapableEnabledImis = + new HashSet(); + + public static InputMethodSettingValuesWrapper getInstance(Context context) { + if (sInstance == null) { + synchronized(TAG) { + if (sInstance == null) { + sInstance = new InputMethodSettingValuesWrapper(context); + } + } + } + return sInstance; + } + + private static int getDefaultCurrentUserId() { + try { + return ActivityManagerNative.getDefault().getCurrentUser().id; + } catch (RemoteException e) { + Slog.w(TAG, "Couldn't get current user ID; guessing it's 0", e); + } + return 0; + } + + // Ensure singleton + private InputMethodSettingValuesWrapper(Context context) { + mSettings = + new InputMethodSettings(context.getResources(), context.getContentResolver(), + mMethodMap, mMethodList, getDefaultCurrentUserId()); + mImm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + refreshAllInputMethodAndSubtypes(); + } + + public void refreshAllInputMethodAndSubtypes() { + synchronized (mMethodMap) { + mMethodList.clear(); + mMethodMap.clear(); + final List imms = mImm.getInputMethodList(); + mMethodList.addAll(imms); + for (InputMethodInfo imi : imms) { + mMethodMap.put(imi.getId(), imi); + } + updateAsciiCapableEnabledImis(); + } + } + + // TODO: Add a cts to ensure at least one AsciiCapableSubtypeEnabledImis exist + private void updateAsciiCapableEnabledImis() { + synchronized (mMethodMap) { + mAsciiCapableEnabledImis.clear(); + final List enabledImis = mSettings.getEnabledInputMethodListLocked(); + for (final InputMethodInfo imi : enabledImis) { + final int subtypeCount = imi.getSubtypeCount(); + for (int i = 0; i < subtypeCount; ++i) { + final InputMethodSubtype subtype = imi.getSubtypeAt(i); + if (InputMethodUtils.SUBTYPE_MODE_KEYBOARD.equalsIgnoreCase(subtype.getMode()) + && subtype.isAsciiCapable()) { + mAsciiCapableEnabledImis.add(imi); + break; + } + } + } + } + } + + public List getInputMethodList() { + synchronized (mMethodMap) { + return mMethodList; + } + } + + public CharSequence getCurrentInputMethodName(Context context) { + synchronized (mMethodMap) { + final InputMethodInfo imi = mMethodMap.get(mSettings.getSelectedInputMethod()); + if (imi == null) { + Log.w(TAG, "Invalid selected imi: " + mSettings.getSelectedInputMethod()); + return ""; + } + final InputMethodSubtype subtype = mImm.getCurrentInputMethodSubtype(); + return InputMethodUtils.getImeAndSubtypeDisplayName(context, imi, subtype); + } + } + + public boolean isAlwaysCheckedIme(InputMethodInfo imi, Context context) { + final boolean isEnabled = isEnabledImi(imi); + synchronized (mMethodMap) { + if (mSettings.getEnabledInputMethodListLocked().size() <= 1 && isEnabled) { + return true; + } + } + + final int enabledValidSystemNonAuxAsciiCapableImeCount = + getEnabledValidSystemNonAuxAsciiCapableImeCount(context); + if (enabledValidSystemNonAuxAsciiCapableImeCount > 1) { + return false; + } + + if (enabledValidSystemNonAuxAsciiCapableImeCount == 1 && !isEnabled) { + return false; + } + + if (!InputMethodUtils.isSystemIme(imi)) { + return false; + } + return isValidSystemNonAuxAsciiCapableIme(imi, context); + } + + private int getEnabledValidSystemNonAuxAsciiCapableImeCount(Context context) { + int count = 0; + final List enabledImis; + synchronized(mMethodMap) { + enabledImis = mSettings.getEnabledInputMethodListLocked(); + } + for (final InputMethodInfo imi : enabledImis) { + if (isValidSystemNonAuxAsciiCapableIme(imi, context)) { + ++count; + } + } + if (count == 0) { + Log.w(TAG, "No \"enabledValidSystemNonAuxAsciiCapableIme\"s found."); + } + return count; + } + + private boolean isEnabledImi(InputMethodInfo imi) { + final List enabledImis; + synchronized(mMethodMap) { + enabledImis = mSettings.getEnabledInputMethodListLocked(); + } + for (final InputMethodInfo tempImi : enabledImis) { + if (tempImi.getId().equals(imi.getId())) { + return true; + } + } + return false; + } + + public boolean isValidSystemNonAuxAsciiCapableIme(InputMethodInfo imi, + Context context) { + if (imi.isAuxiliaryIme()) { + return false; + } + if (InputMethodUtils.isValidSystemDefaultIme(true /* isSystemReady */, imi, context)) { + return true; + } + if (mAsciiCapableEnabledImis.isEmpty()) { + Log.w(TAG, "ascii capable subtype enabled imi not found. Fall back to English" + + " Keyboard subtype."); + return InputMethodUtils.containsSubtypeOf(imi, ENGLISH_LOCALE.getLanguage(), + InputMethodUtils.SUBTYPE_MODE_KEYBOARD); + } + return mAsciiCapableEnabledImis.contains(imi); + } +} diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java index 1bf68ce47ad..2901673cfe3 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordActivity.java @@ -28,8 +28,6 @@ import android.view.View; public class UserDictionaryAddWordActivity extends Activity { - private static final String STATE_KEY_IS_OPEN = "isOpen"; - public static final String MODE_EDIT_ACTION = "com.android.settings.USER_DICTIONARY_EDIT"; public static final String MODE_INSERT_ACTION = "com.android.settings.USER_DICTIONARY_INSERT"; diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java index 3251216d3c2..d81703ea1c9 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java @@ -57,6 +57,8 @@ public class UserDictionaryAddWordContents { private String mLocale; private final String mOldWord; private final String mOldShortcut; + private String mSavedWord; + private String mSavedShortcut; /* package */ UserDictionaryAddWordContents(final View view, final Bundle args) { mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text); @@ -64,7 +66,9 @@ public class UserDictionaryAddWordContents { final String word = args.getString(EXTRA_WORD); if (null != word) { mWordEditText.setText(word); - mWordEditText.setSelection(word.length()); + // Use getText in case the edit text modified the text we set. This happens when + // it's too long to be edited. + mWordEditText.setSelection(mWordEditText.getText().length()); } final String shortcut = args.getString(EXTRA_SHORTCUT); if (null != shortcut && null != mShortcutEditText) { @@ -76,6 +80,16 @@ public class UserDictionaryAddWordContents { updateLocale(args.getString(EXTRA_LOCALE)); } + /* package */ UserDictionaryAddWordContents(final View view, + final UserDictionaryAddWordContents oldInstanceToBeEdited) { + mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text); + mShortcutEditText = (EditText)view.findViewById(R.id.user_dictionary_add_shortcut); + mMode = MODE_EDIT; + mOldWord = oldInstanceToBeEdited.mSavedWord; + mOldShortcut = oldInstanceToBeEdited.mSavedShortcut; + updateLocale(mLocale); + } + // locale may be null, this means default locale // It may also be the empty string, which means "all locales" /* package */ void updateLocale(final String locale) { @@ -126,6 +140,8 @@ public class UserDictionaryAddWordContents { // If the word is somehow empty, don't insert it. return UserDictionaryAddWordActivity.CODE_CANCEL; } + mSavedWord = newWord; + mSavedShortcut = newShortcut; // If there is no shortcut, and the word already exists in the database, then we // should not insert, because either A. the word exists with no shortcut, in which // case the exact same thing we want to insert is already there, or B. the word @@ -237,4 +253,8 @@ public class UserDictionaryAddWordContents { localesList.add(new LocaleRenderer(activity, null)); // meaning: select another locale return localesList; } + + public String getCurrentUserDictionaryLocale() { + return mLocale; + } } diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java index e33333b56f8..86c3e79d88c 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java +++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordFragment.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.settings.inputmethod; import android.app.Fragment; @@ -26,7 +27,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; -import android.widget.Spinner; import com.android.settings.R; import com.android.settings.inputmethod.UserDictionaryAddWordContents.LocaleRenderer; @@ -51,23 +51,39 @@ public class UserDictionaryAddWordFragment extends Fragment private boolean mIsDeleting = false; @Override - public void onActivityCreated(Bundle savedInstanceState) { + public void onActivityCreated(final Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setHasOptionsMenu(true); + getActivity().getActionBar().setTitle(R.string.user_dict_settings_title); + // Keep the instance so that we remember mContents when configuration changes (eg rotation) + setRetainInstance(true); } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { + public View onCreateView(final LayoutInflater inflater, final ViewGroup container, + final Bundle savedState) { mRootView = inflater.inflate(R.layout.user_dictionary_add_word_fullscreen, null); mIsDeleting = false; + // If we have a non-null mContents object, it's the old value before a configuration + // change (eg rotation) so we need to use its values. Otherwise, read from the arguments. if (null == mContents) { mContents = new UserDictionaryAddWordContents(mRootView, getArguments()); + } else { + // We create a new mContents object to account for the new situation : a word has + // been added to the user dictionary when we started rotating, and we are now editing + // it. That means in particular if the word undergoes any change, the old version should + // be updated, so the mContents object needs to switch to EDIT mode if it was in + // INSERT mode. + mContents = new UserDictionaryAddWordContents(mRootView, + mContents /* oldInstanceToBeEdited */); } + getActivity().getActionBar().setSubtitle(UserDictionarySettingsUtils.getLocaleDisplayName( + getActivity(), mContents.getCurrentUserDictionaryLocale())); return mRootView; } @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { MenuItem actionItem = menu.add(0, OPTIONS_MENU_DELETE, 0, R.string.delete) .setIcon(android.R.drawable.ic_menu_delete); actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | @@ -102,13 +118,9 @@ public class UserDictionaryAddWordFragment extends Fragment private void updateSpinner() { final ArrayList localesList = mContents.getLocalesList(getActivity()); - final Spinner localeSpinner = - (Spinner)mRootView.findViewById(R.id.user_dictionary_add_locale); final ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, localesList); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - localeSpinner.setAdapter(adapter); - localeSpinner.setOnItemSelectedListener(this); } @Override diff --git a/src/com/android/settings/inputmethod/UserDictionaryList.java b/src/com/android/settings/inputmethod/UserDictionaryList.java index 5390be602ef..24acb4aea8f 100644 --- a/src/com/android/settings/inputmethod/UserDictionaryList.java +++ b/src/com/android/settings/inputmethod/UserDictionaryList.java @@ -21,45 +21,104 @@ import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceGroup; import android.provider.UserDictionary; +import android.text.TextUtils; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodSubtype; +import java.util.List; import java.util.Locale; import java.util.TreeSet; public class UserDictionaryList extends SettingsPreferenceFragment { - public static final String USER_DICTIONARY_SETTINGS_INTENT_ACTION = "android.settings.USER_DICTIONARY_SETTINGS"; + private String mLocale; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity())); + getActivity().getActionBar().setTitle(R.string.user_dict_settings_title); } - static TreeSet getUserDictionaryLocalesSet(Activity activity) { + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + final Intent intent = getActivity().getIntent(); + final String localeFromIntent = + null == intent ? null : intent.getStringExtra("locale"); + + final Bundle arguments = getArguments(); + final String localeFromArguments = + null == arguments ? null : arguments.getString("locale"); + + final String locale; + if (null != localeFromArguments) { + locale = localeFromArguments; + } else if (null != localeFromIntent) { + locale = localeFromIntent; + } else { + locale = null; + } + mLocale = locale; + } + + public static TreeSet getUserDictionaryLocalesSet(Activity activity) { @SuppressWarnings("deprecation") final Cursor cursor = activity.managedQuery(UserDictionary.Words.CONTENT_URI, new String[] { UserDictionary.Words.LOCALE }, null, null, null); - final TreeSet localeList = new TreeSet(); + final TreeSet localeSet = new TreeSet(); if (null == cursor) { // The user dictionary service is not present or disabled. Return null. return null; } else if (cursor.moveToFirst()) { final int columnIndex = cursor.getColumnIndex(UserDictionary.Words.LOCALE); do { - String locale = cursor.getString(columnIndex); - localeList.add(null != locale ? locale : ""); + final String locale = cursor.getString(columnIndex); + localeSet.add(null != locale ? locale : ""); } while (cursor.moveToNext()); } - localeList.add(Locale.getDefault().toString()); - return localeList; + // CAVEAT: Keep this for consistency of the implementation between Keyboard and Settings + // if (!UserDictionarySettings.IS_SHORTCUT_API_SUPPORTED) { + // // For ICS, we need to show "For all languages" in case that the keyboard locale + // // is different from the system locale + // localeSet.add(""); + // } + + final InputMethodManager imm = + (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); + final List imis = imm.getEnabledInputMethodList(); + for (final InputMethodInfo imi : imis) { + final List subtypes = + imm.getEnabledInputMethodSubtypeList( + imi, true /* allowsImplicitlySelectedSubtypes */); + for (InputMethodSubtype subtype : subtypes) { + final String locale = subtype.getLocale(); + if (!TextUtils.isEmpty(locale)) { + localeSet.add(locale); + } + } + } + + // We come here after we have collected locales from existing user dictionary entries and + // enabled subtypes. If we already have the locale-without-country version of the system + // locale, we don't add the system locale to avoid confusion even though it's technically + // correct to add it. + if (!localeSet.contains(Locale.getDefault().getLanguage().toString())) { + localeSet.add(Locale.getDefault().toString()); + } + + return localeSet; } /** @@ -69,13 +128,23 @@ public class UserDictionaryList extends SettingsPreferenceFragment { protected void createUserDictSettings(PreferenceGroup userDictGroup) { final Activity activity = getActivity(); userDictGroup.removeAll(); - final TreeSet localeList = + final TreeSet localeSet = UserDictionaryList.getUserDictionaryLocalesSet(activity); + if (mLocale != null) { + // If the caller explicitly specify empty string as a locale, we'll show "all languages" + // in the list. + localeSet.add(mLocale); + } + if (localeSet.size() > 1) { + // Have an "All languages" entry in the languages list if there are two or more active + // languages + localeSet.add(""); + } - if (localeList.isEmpty()) { + if (localeSet.isEmpty()) { userDictGroup.addPreference(createUserDictionaryPreference(null, activity)); } else { - for (String locale : localeList) { + for (String locale : localeSet) { userDictGroup.addPreference(createUserDictionaryPreference(locale, activity)); } } diff --git a/src/com/android/settings/inputmethod/UserDictionarySettingsUtils.java b/src/com/android/settings/inputmethod/UserDictionarySettingsUtils.java new file mode 100644 index 00000000000..e77f9c5addc --- /dev/null +++ b/src/com/android/settings/inputmethod/UserDictionarySettingsUtils.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.inputmethod; + +import com.android.settings.R; +import com.android.settings.Utils; + +import android.content.Context; +import android.text.TextUtils; + +import java.util.Locale; + +/** + * Utilities of the user dictionary settings + */ +public class UserDictionarySettingsUtils { + public static String getLocaleDisplayName(Context context, String localeStr) { + if (TextUtils.isEmpty(localeStr)) { + // CAVEAT: localeStr should not be null because a null locale stands for the system + // locale in UserDictionary.Words.addWord. + return context.getResources().getString(R.string.user_dict_settings_all_languages); + } + final Locale locale = Utils.createLocaleFromString(localeStr); + final Locale systemLocale = context.getResources().getConfiguration().locale; + return locale.getDisplayName(systemLocale); + } +} diff --git a/src/com/android/settings/location/InjectedSetting.java b/src/com/android/settings/location/InjectedSetting.java new file mode 100644 index 00000000000..d8a3f495c55 --- /dev/null +++ b/src/com/android/settings/location/InjectedSetting.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.content.Intent; +import android.text.TextUtils; +import android.util.Log; +import com.android.internal.annotations.Immutable; +import com.android.internal.util.Preconditions; + +/** + * Specifies a setting that is being injected into Settings > Location > Location services. + * + * @see android.location.SettingInjectorService + */ +@Immutable +class InjectedSetting { + + /** + * Package for the subclass of {@link android.location.SettingInjectorService} and for the + * settings activity. + */ + public final String packageName; + + /** + * Class name for the subclass of {@link android.location.SettingInjectorService} that + * specifies dynamic values for the location setting. + */ + public final String className; + + /** + * The {@link android.preference.Preference#getTitle()} value. + */ + public final String title; + + /** + * The {@link android.preference.Preference#getIcon()} value. + */ + public final int iconId; + + /** + * The activity to launch to allow the user to modify the settings value. Assumed to be in the + * {@link #packageName} package. + */ + public final String settingsActivity; + + private InjectedSetting(String packageName, String className, + String title, int iconId, String settingsActivity) { + this.packageName = Preconditions.checkNotNull(packageName, "packageName"); + this.className = Preconditions.checkNotNull(className, "className"); + this.title = Preconditions.checkNotNull(title, "title"); + this.iconId = iconId; + this.settingsActivity = Preconditions.checkNotNull(settingsActivity); + } + + /** + * Returns a new instance, or null. + */ + public static InjectedSetting newInstance(String packageName, String className, + String title, int iconId, String settingsActivity) { + if (packageName == null || className == null || + TextUtils.isEmpty(title) || TextUtils.isEmpty(settingsActivity)) { + if (Log.isLoggable(SettingsInjector.TAG, Log.WARN)) { + Log.w(SettingsInjector.TAG, "Illegal setting specification: package=" + + packageName + ", class=" + className + + ", title=" + title + ", settingsActivity=" + settingsActivity); + } + return null; + } + return new InjectedSetting(packageName, className, title, iconId, settingsActivity); + } + + @Override + public String toString() { + return "InjectedSetting{" + + "mPackageName='" + packageName + '\'' + + ", mClassName='" + className + '\'' + + ", label=" + title + + ", iconId=" + iconId + + ", settingsActivity='" + settingsActivity + '\'' + + '}'; + } + + /** + * Returns the intent to start the {@link #className} service. + */ + public Intent getServiceIntent() { + Intent intent = new Intent(); + intent.setClassName(packageName, className); + return intent; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof InjectedSetting)) return false; + + InjectedSetting that = (InjectedSetting) o; + + return packageName.equals(that.packageName) && className.equals(that.className) + && title.equals(that.title) && iconId == that.iconId + && settingsActivity.equals(that.settingsActivity); + } + + @Override + public int hashCode() { + int result = packageName.hashCode(); + result = 31 * result + className.hashCode(); + result = 31 * result + title.hashCode(); + result = 31 * result + iconId; + result = 31 * result + settingsActivity.hashCode(); + return result; + } +} diff --git a/src/com/android/settings/location/LocationMode.java b/src/com/android/settings/location/LocationMode.java new file mode 100644 index 00000000000..7e95cacbf4e --- /dev/null +++ b/src/com/android/settings/location/LocationMode.java @@ -0,0 +1,136 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.preference.PreferenceScreen; +import android.provider.Settings; + +import com.android.settings.R; + +/** + * A page with 3 radio buttons to choose the location mode. + * + * There are 3 location modes when location access is enabled: + * + * High accuracy: use both GPS and network location. + * + * Battery saving: use network location only to reduce the power consumption. + * + * Sensors only: use GPS location only. + */ +public class LocationMode extends LocationSettingsBase + implements RadioButtonPreference.OnClickListener { + private static final String KEY_HIGH_ACCURACY = "high_accuracy"; + private RadioButtonPreference mHighAccuracy; + private static final String KEY_BATTERY_SAVING = "battery_saving"; + private RadioButtonPreference mBatterySaving; + private static final String KEY_SENSORS_ONLY = "sensors_only"; + private RadioButtonPreference mSensorsOnly; + + @Override + public void onResume() { + super.onResume(); + createPreferenceHierarchy(); + } + + @Override + public void onPause() { + super.onPause(); + } + + private PreferenceScreen createPreferenceHierarchy() { + PreferenceScreen root = getPreferenceScreen(); + if (root != null) { + root.removeAll(); + } + addPreferencesFromResource(R.xml.location_mode); + root = getPreferenceScreen(); + + mHighAccuracy = (RadioButtonPreference) root.findPreference(KEY_HIGH_ACCURACY); + mBatterySaving = (RadioButtonPreference) root.findPreference(KEY_BATTERY_SAVING); + mSensorsOnly = (RadioButtonPreference) root.findPreference(KEY_SENSORS_ONLY); + mHighAccuracy.setOnClickListener(this); + mBatterySaving.setOnClickListener(this); + mSensorsOnly.setOnClickListener(this); + + refreshLocationMode(); + return root; + } + + private void updateRadioButtons(RadioButtonPreference activated) { + if (activated == null) { + mHighAccuracy.setChecked(false); + mBatterySaving.setChecked(false); + mSensorsOnly.setChecked(false); + } else if (activated == mHighAccuracy) { + mHighAccuracy.setChecked(true); + mBatterySaving.setChecked(false); + mSensorsOnly.setChecked(false); + } else if (activated == mBatterySaving) { + mHighAccuracy.setChecked(false); + mBatterySaving.setChecked(true); + mSensorsOnly.setChecked(false); + } else if (activated == mSensorsOnly) { + mHighAccuracy.setChecked(false); + mBatterySaving.setChecked(false); + mSensorsOnly.setChecked(true); + } + } + + @Override + public void onRadioButtonClicked(RadioButtonPreference emiter) { + int mode = Settings.Secure.LOCATION_MODE_OFF; + if (emiter == mHighAccuracy) { + mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY; + } else if (emiter == mBatterySaving) { + mode = Settings.Secure.LOCATION_MODE_BATTERY_SAVING; + } else if (emiter == mSensorsOnly) { + mode = Settings.Secure.LOCATION_MODE_SENSORS_ONLY; + } + setLocationMode(mode); + } + + @Override + public void onModeChanged(int mode, boolean restricted) { + switch (mode) { + case Settings.Secure.LOCATION_MODE_OFF: + updateRadioButtons(null); + break; + case Settings.Secure.LOCATION_MODE_SENSORS_ONLY: + updateRadioButtons(mSensorsOnly); + break; + case Settings.Secure.LOCATION_MODE_BATTERY_SAVING: + updateRadioButtons(mBatterySaving); + break; + case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY: + updateRadioButtons(mHighAccuracy); + break; + default: + break; + } + + boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF) && !restricted; + mHighAccuracy.setEnabled(enabled); + mBatterySaving.setEnabled(enabled); + mSensorsOnly.setEnabled(enabled); + } + + @Override + public int getHelpResource() { + return R.string.help_url_location_access; + } +} diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java new file mode 100644 index 00000000000..06a6650565d --- /dev/null +++ b/src/com/android/settings/location/LocationSettings.java @@ -0,0 +1,258 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.location.LocationManager; +import android.location.SettingInjectorService; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.preference.PreferenceCategory; +import android.preference.PreferenceGroup; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.util.Log; +import android.view.Gravity; +import android.widget.CompoundButton; +import android.widget.Switch; + +import com.android.settings.R; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * Location access settings. + */ +public class LocationSettings extends LocationSettingsBase + implements CompoundButton.OnCheckedChangeListener { + + private static final String TAG = "LocationSettings"; + + /** Key for preference screen "Mode" */ + private static final String KEY_LOCATION_MODE = "location_mode"; + /** Key for preference category "Recent location requests" */ + private static final String KEY_RECENT_LOCATION_REQUESTS = "recent_location_requests"; + /** Key for preference category "Location services" */ + private static final String KEY_LOCATION_SERVICES = "location_services"; + + private Switch mSwitch; + private boolean mValidListener; + private Preference mLocationMode; + private PreferenceCategory mCategoryRecentLocationRequests; + /** Receives UPDATE_INTENT */ + private BroadcastReceiver mReceiver; + + public LocationSettings() { + mValidListener = false; + } + + @Override + public void onResume() { + super.onResume(); + mSwitch = new Switch(getActivity()); + mSwitch.setOnCheckedChangeListener(this); + mValidListener = true; + createPreferenceHierarchy(); + } + + @Override + public void onPause() { + try { + getActivity().unregisterReceiver(mReceiver); + } catch (RuntimeException e) { + // Ignore exceptions caused by race condition + } + super.onPause(); + mValidListener = false; + mSwitch.setOnCheckedChangeListener(null); + } + + private void addPreferencesSorted(List prefs, PreferenceGroup container) { + // If there's some items to display, sort the items and add them to the container. + Collections.sort(prefs, new Comparator() { + @Override + public int compare(Preference lhs, Preference rhs) { + return lhs.getTitle().toString().compareTo(rhs.getTitle().toString()); + } + }); + for (Preference entry : prefs) { + container.addPreference(entry); + } + } + + private PreferenceScreen createPreferenceHierarchy() { + final PreferenceActivity activity = (PreferenceActivity) getActivity(); + PreferenceScreen root = getPreferenceScreen(); + if (root != null) { + root.removeAll(); + } + addPreferencesFromResource(R.xml.location_settings); + root = getPreferenceScreen(); + + mLocationMode = root.findPreference(KEY_LOCATION_MODE); + mLocationMode.setOnPreferenceClickListener( + new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + activity.startPreferencePanel( + LocationMode.class.getName(), null, + R.string.location_mode_screen_title, null, LocationSettings.this, + 0); + return true; + } + }); + + mCategoryRecentLocationRequests = + (PreferenceCategory) root.findPreference(KEY_RECENT_LOCATION_REQUESTS); + RecentLocationApps recentApps = new RecentLocationApps(activity); + List recentLocationRequests = recentApps.getAppList(); + if (recentLocationRequests.size() > 0) { + addPreferencesSorted(recentLocationRequests, mCategoryRecentLocationRequests); + } else { + // If there's no item to display, add a "No recent apps" item. + Preference banner = new Preference(activity); + banner.setLayoutResource(R.layout.location_list_no_item); + banner.setTitle(R.string.location_no_recent_apps); + banner.setSelectable(false); + mCategoryRecentLocationRequests.addPreference(banner); + } + + addLocationServices(activity, root); + + // Only show the master switch when we're not in multi-pane mode, and not being used as + // Setup Wizard. + if (activity.onIsHidingHeaders() || !activity.onIsMultiPane()) { + final int padding = activity.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + mSwitch.setPaddingRelative(0, 0, padding, 0); + activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM); + activity.getActionBar().setCustomView(mSwitch, new ActionBar.LayoutParams( + ActionBar.LayoutParams.WRAP_CONTENT, + ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END)); + } + + setHasOptionsMenu(true); + + refreshLocationMode(); + return root; + } + + /** + * Add the settings injected by external apps into the "App Settings" category. Hides the + * category if there are no injected settings. + * + * Reloads the settings whenever receives + * {@link SettingInjectorService#ACTION_INJECTED_SETTING_CHANGED}. As a safety measure, + * also reloads on {@link LocationManager#MODE_CHANGED_ACTION} to ensure the settings are + * up-to-date after mode changes even if an affected app doesn't send the setting changed + * broadcast. + */ + private void addLocationServices(Context context, PreferenceScreen root) { + PreferenceCategory categoryLocationServices = + (PreferenceCategory) root.findPreference(KEY_LOCATION_SERVICES); + final SettingsInjector injector = new SettingsInjector(context); + List locationServices = injector.getInjectedSettings(); + + mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Received settings change intent: " + intent); + } + injector.reloadStatusMessages(); + } + }; + + IntentFilter filter = new IntentFilter(); + filter.addAction(SettingInjectorService.ACTION_INJECTED_SETTING_CHANGED); + filter.addAction(LocationManager.MODE_CHANGED_ACTION); + context.registerReceiver(mReceiver, filter); + + if (locationServices.size() > 0) { + addPreferencesSorted(locationServices, categoryLocationServices); + } else { + // If there's no item to display, remove the whole category. + root.removePreference(categoryLocationServices); + } + } + + @Override + public int getHelpResource() { + return R.string.help_url_location_access; + } + + @Override + public void onModeChanged(int mode, boolean restricted) { + switch (mode) { + case Settings.Secure.LOCATION_MODE_OFF: + mLocationMode.setSummary(R.string.location_mode_location_off_title); + break; + case Settings.Secure.LOCATION_MODE_SENSORS_ONLY: + mLocationMode.setSummary(R.string.location_mode_sensors_only_title); + break; + case Settings.Secure.LOCATION_MODE_BATTERY_SAVING: + mLocationMode.setSummary(R.string.location_mode_battery_saving_title); + break; + case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY: + mLocationMode.setSummary(R.string.location_mode_high_accuracy_title); + break; + default: + break; + } + + // Restricted user can't change the location mode, so disable the master switch. But in some + // corner cases, the location might still be enabled. In such case the master switch should + // be disabled but checked. + boolean enabled = (mode != Settings.Secure.LOCATION_MODE_OFF); + mSwitch.setEnabled(!restricted); + mLocationMode.setEnabled(enabled && !restricted); + mCategoryRecentLocationRequests.setEnabled(enabled); + + if (enabled != mSwitch.isChecked()) { + // set listener to null so that that code below doesn't trigger onCheckedChanged() + if (mValidListener) { + mSwitch.setOnCheckedChangeListener(null); + } + mSwitch.setChecked(enabled); + if (mValidListener) { + mSwitch.setOnCheckedChangeListener(this); + } + } + } + + /** + * Listens to the state change of the location master switch. + */ + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + setLocationMode(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY); + } else { + setLocationMode(Settings.Secure.LOCATION_MODE_OFF); + } + } +} diff --git a/src/com/android/settings/location/LocationSettingsBase.java b/src/com/android/settings/location/LocationSettingsBase.java new file mode 100644 index 00000000000..86c2ee5e873 --- /dev/null +++ b/src/com/android/settings/location/LocationSettingsBase.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.app.LoaderManager.LoaderCallbacks; +import android.content.Context; +import android.content.CursorLoader; +import android.content.Intent; +import android.content.Loader; +import android.database.Cursor; +import android.os.Bundle; +import android.os.UserManager; +import android.provider.Settings; +import android.util.Log; + +import com.android.settings.SettingsPreferenceFragment; + +/** + * A base class that listens to location settings change and modifies location + * settings. + */ +public abstract class LocationSettingsBase extends SettingsPreferenceFragment + implements LoaderCallbacks { + private static final String TAG = "LocationSettingsBase"; + /** Broadcast intent action when the location mode is about to change. */ + private static final String MODE_CHANGING_ACTION = + "com.android.settings.location.MODE_CHANGING"; + private static final String CURRENT_MODE_KEY = "CURRENT_MODE"; + private static final String NEW_MODE_KEY = "NEW_MODE"; + + private static final int LOADER_ID_LOCATION_MODE = 1; + private int mCurrentMode; + + /** + * Whether the fragment is actively running. + */ + private boolean mActive = false; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + getLoaderManager().initLoader(LOADER_ID_LOCATION_MODE, null, this); + } + + @Override + public void onResume() { + super.onResume(); + mActive = true; + } + + @Override + public void onPause() { + super.onPause(); + mActive = false; + } + + /** Called when location mode has changed. */ + public abstract void onModeChanged(int mode, boolean restricted); + + private boolean isRestricted() { + final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); + return um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION); + } + + public void setLocationMode(int mode) { + if (isRestricted()) { + // Location toggling disabled by user restriction. Read the current location mode to + // update the location master switch. + if (Log.isLoggable(TAG, Log.INFO)) { + Log.i(TAG, "Restricted user, not setting location mode"); + } + mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE, + Settings.Secure.LOCATION_MODE_OFF); + if (mActive) { + onModeChanged(mode, true); + } + return; + } + Intent intent = new Intent(MODE_CHANGING_ACTION); + intent.putExtra(CURRENT_MODE_KEY, mCurrentMode); + intent.putExtra(NEW_MODE_KEY, mode); + getActivity().sendBroadcast(intent, android.Manifest.permission.WRITE_SECURE_SETTINGS); + Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, mode); + refreshLocationMode(); + } + + public void refreshLocationMode() { + if (mActive) { + int mode = Settings.Secure.getInt(getContentResolver(), Settings.Secure.LOCATION_MODE, + Settings.Secure.LOCATION_MODE_OFF); + mCurrentMode = mode; + onModeChanged(mode, isRestricted()); + } + } + + @Override + public Loader onCreateLoader(int id, Bundle args) { + switch (id) { + case LOADER_ID_LOCATION_MODE: + return new CursorLoader(getActivity(), Settings.Secure.CONTENT_URI, null, + "(" + Settings.System.NAME + "=?)", + new String[] { Settings.Secure.LOCATION_MODE }, null); + default: + return null; + } + } + + @Override + public void onLoadFinished(Loader loader, Cursor data) { + refreshLocationMode(); + } + + @Override + public void onLoaderReset(Loader loader) { + // Nothing to do here. + } +} diff --git a/src/com/android/settings/location/RadioButtonPreference.java b/src/com/android/settings/location/RadioButtonPreference.java new file mode 100644 index 00000000000..5589dfa57d3 --- /dev/null +++ b/src/com/android/settings/location/RadioButtonPreference.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.content.Context; +import android.preference.CheckBoxPreference; +import android.util.AttributeSet; +import android.view.View; +import android.widget.TextView; + +import com.android.settings.R; + +/** + * Check box preference with check box replaced by radio button. + * + * Functionally speaking, it's actually a CheckBoxPreference. We only modified + * the widget to RadioButton to make it "look like" a RadioButtonPreference. + * + * In other words, there's no "RadioButtonPreferenceGroup" in this + * implementation. When you check one RadioButtonPreference, if you want to + * uncheck all the other preferences, you should do that by code yourself. + */ +public class RadioButtonPreference extends CheckBoxPreference { + public interface OnClickListener { + public abstract void onRadioButtonClicked(RadioButtonPreference emiter); + } + + private OnClickListener mListener = null; + + public RadioButtonPreference(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + setWidgetLayoutResource(R.layout.preference_widget_radiobutton); + } + + public RadioButtonPreference(Context context, AttributeSet attrs) { + this(context, attrs, com.android.internal.R.attr.checkBoxPreferenceStyle); + } + + public RadioButtonPreference(Context context) { + this(context, null); + } + + void setOnClickListener(OnClickListener listener) { + mListener = listener; + } + + @Override + public void onClick() { + if (mListener != null) { + mListener.onRadioButtonClicked(this); + } + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + TextView title = (TextView) view.findViewById(android.R.id.title); + if (title != null) { + title.setSingleLine(false); + title.setMaxLines(3); + } + } +} diff --git a/src/com/android/settings/location/RecentLocationApps.java b/src/com/android/settings/location/RecentLocationApps.java new file mode 100644 index 00000000000..57084348c04 --- /dev/null +++ b/src/com/android/settings/location/RecentLocationApps.java @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.app.ActivityManager; +import android.app.AppOpsManager; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Process; +import android.os.UserHandle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.util.Log; + +import com.android.settings.R; +import com.android.settings.applications.InstalledAppDetails; + +import java.util.ArrayList; +import java.util.List; + +/** + * Retrieves the information of applications which accessed location recently. + */ +public class RecentLocationApps { + private static final String TAG = RecentLocationApps.class.getSimpleName(); + private static final String ANDROID_SYSTEM_PACKAGE_NAME = "android"; + + private static final int RECENT_TIME_INTERVAL_MILLIS = 15 * 60 * 1000; + + private final PreferenceActivity mActivity; + private final PackageManager mPackageManager; + + public RecentLocationApps(PreferenceActivity activity) { + mActivity = activity; + mPackageManager = activity.getPackageManager(); + } + + private class PackageEntryClickedListener + implements Preference.OnPreferenceClickListener { + private String mPackage; + + public PackageEntryClickedListener(String packageName) { + mPackage = packageName; + } + + @Override + public boolean onPreferenceClick(Preference preference) { + // start new fragment to display extended information + Bundle args = new Bundle(); + args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackage); + mActivity.startPreferencePanel(InstalledAppDetails.class.getName(), args, + R.string.application_info_label, null, null, 0); + return true; + } + } + + private Preference createRecentLocationEntry( + Drawable icon, + CharSequence label, + boolean isHighBattery, + Preference.OnPreferenceClickListener listener) { + Preference pref = new Preference(mActivity); + pref.setIcon(icon); + pref.setTitle(label); + if (isHighBattery) { + pref.setSummary(R.string.location_high_battery_use); + } else { + pref.setSummary(R.string.location_low_battery_use); + } + pref.setOnPreferenceClickListener(listener); + return pref; + } + + /** + * Fills a list of applications which queried location recently within + * specified time. + */ + public List getAppList() { + // Retrieve a location usage list from AppOps + AppOpsManager aoManager = + (AppOpsManager) mActivity.getSystemService(Context.APP_OPS_SERVICE); + List appOps = aoManager.getPackagesForOps( + new int[] { + AppOpsManager.OP_MONITOR_LOCATION, + AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION, + }); + + // Process the AppOps list and generate a preference list. + ArrayList prefs = new ArrayList(); + long now = System.currentTimeMillis(); + for (AppOpsManager.PackageOps ops : appOps) { + // Don't show the Android System in the list - it's not actionable for the user. + // Also don't show apps belonging to background users. + int uid = ops.getUid(); + boolean isAndroidOs = (uid == Process.SYSTEM_UID) + && ANDROID_SYSTEM_PACKAGE_NAME.equals(ops.getPackageName()); + if (!isAndroidOs && ActivityManager.getCurrentUser() == UserHandle.getUserId(uid)) { + Preference pref = getPreferenceFromOps(now, ops); + if (pref != null) { + prefs.add(pref); + } + } + } + + return prefs; + } + + /** + * Creates a Preference entry for the given PackageOps. + * + * This method examines the time interval of the PackageOps first. If the PackageOps is older + * than the designated interval, this method ignores the PackageOps object and returns null. + * When the PackageOps is fresh enough, this method returns a Preference pointing to the App + * Info page for that package. + */ + private Preference getPreferenceFromOps(long now, AppOpsManager.PackageOps ops) { + String packageName = ops.getPackageName(); + List entries = ops.getOps(); + boolean highBattery = false; + boolean normalBattery = false; + // Earliest time for a location request to end and still be shown in list. + long recentLocationCutoffTime = now - RECENT_TIME_INTERVAL_MILLIS; + for (AppOpsManager.OpEntry entry : entries) { + if (entry.isRunning() || entry.getTime() >= recentLocationCutoffTime) { + switch (entry.getOp()) { + case AppOpsManager.OP_MONITOR_LOCATION: + normalBattery = true; + break; + case AppOpsManager.OP_MONITOR_HIGH_POWER_LOCATION: + highBattery = true; + break; + default: + break; + } + } + } + + if (!highBattery && !normalBattery) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, packageName + " hadn't used location within the time interval."); + } + return null; + } + + // The package is fresh enough, continue. + + Preference pref = null; + try { + ApplicationInfo appInfo = mPackageManager.getApplicationInfo( + packageName, PackageManager.GET_META_DATA); + // Multiple users can install the same package. Each user gets a different Uid for + // the same package. + // + // Here we retrieve the Uid with package name, that will be the Uid for that package + // associated with the current active user. If the Uid differs from the Uid in ops, + // that means this entry belongs to another inactive user and we should ignore that. + if (appInfo.uid == ops.getUid()) { + pref = createRecentLocationEntry( + mPackageManager.getApplicationIcon(appInfo), + mPackageManager.getApplicationLabel(appInfo), + highBattery, + new PackageEntryClickedListener(packageName)); + } else if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "package " + packageName + " with Uid " + ops.getUid() + + " belongs to another inactive account, ignored."); + } + } catch (PackageManager.NameNotFoundException e) { + Log.wtf(TAG, "Package not found: " + packageName, e); + } + + return pref; + } +} diff --git a/src/com/android/settings/location/SettingsInjector.java b/src/com/android/settings/location/SettingsInjector.java new file mode 100644 index 00000000000..b9190802e88 --- /dev/null +++ b/src/com/android/settings/location/SettingsInjector.java @@ -0,0 +1,469 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.location; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.content.pm.ServiceInfo; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.content.res.XmlResourceParser; +import android.graphics.drawable.Drawable; +import android.location.SettingInjectorService; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Messenger; +import android.os.SystemClock; +import android.preference.Preference; +import android.util.AttributeSet; +import android.util.Log; +import android.util.Xml; +import com.android.settings.R; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +/** + * Adds the preferences specified by the {@link InjectedSetting} objects to a preference group. + * + * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}. We do not use that + * class directly because it is not a good match for our use case: we do not need the caching, and + * so do not want the additional resource hit at app install/upgrade time; and we would have to + * suppress the tie-breaking between multiple services reporting settings with the same name. + * Code-sharing would require extracting {@link + * android.content.pm.RegisteredServicesCache#parseServiceAttributes(android.content.res.Resources, + * String, android.util.AttributeSet)} into an interface, which didn't seem worth it. + */ +class SettingsInjector { + static final String TAG = "SettingsInjector"; + + /** + * If reading the status of a setting takes longer than this, we go ahead and start reading + * the next setting. + */ + private static final long INJECTED_STATUS_UPDATE_TIMEOUT_MILLIS = 1000; + + /** + * {@link Message#what} value for starting to load status values + * in case we aren't already in the process of loading them. + */ + private static final int WHAT_RELOAD = 1; + + /** + * {@link Message#what} value sent after receiving a status message. + */ + private static final int WHAT_RECEIVED_STATUS = 2; + + /** + * {@link Message#what} value sent after the timeout waiting for a status message. + */ + private static final int WHAT_TIMEOUT = 3; + + private final Context mContext; + + /** + * The settings that were injected + */ + private final Set mSettings; + + private final Handler mHandler; + + public SettingsInjector(Context context) { + mContext = context; + mSettings = new HashSet(); + mHandler = new StatusLoadingHandler(); + } + + /** + * Returns a list with one {@link InjectedSetting} object for each {@link android.app.Service} + * that responds to {@link SettingInjectorService#ACTION_SERVICE_INTENT} and provides the + * expected setting metadata. + * + * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}. + * + * TODO: unit test + */ + private List getSettings() { + PackageManager pm = mContext.getPackageManager(); + Intent intent = new Intent(SettingInjectorService.ACTION_SERVICE_INTENT); + + List resolveInfos = + pm.queryIntentServices(intent, PackageManager.GET_META_DATA); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Found services: " + resolveInfos); + } + List settings = new ArrayList(resolveInfos.size()); + for (ResolveInfo resolveInfo : resolveInfos) { + try { + InjectedSetting setting = parseServiceInfo(resolveInfo, pm); + if (setting == null) { + Log.w(TAG, "Unable to load service info " + resolveInfo); + } else { + settings.add(setting); + } + } catch (XmlPullParserException e) { + Log.w(TAG, "Unable to load service info " + resolveInfo, e); + } catch (IOException e) { + Log.w(TAG, "Unable to load service info " + resolveInfo, e); + } + } + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "Loaded settings: " + settings); + } + + return settings; + } + + /** + * Returns the settings parsed from the attributes of the + * {@link SettingInjectorService#META_DATA_NAME} tag, or null. + * + * Duplicates some code from {@link android.content.pm.RegisteredServicesCache}. + */ + private static InjectedSetting parseServiceInfo(ResolveInfo service, PackageManager pm) + throws XmlPullParserException, IOException { + + ServiceInfo si = service.serviceInfo; + ApplicationInfo ai = si.applicationInfo; + + if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { + if (Log.isLoggable(TAG, Log.WARN)) { + Log.w(TAG, "Ignoring attempt to inject setting from app not in system image: " + + service); + return null; + } + } + + XmlResourceParser parser = null; + try { + parser = si.loadXmlMetaData(pm, SettingInjectorService.META_DATA_NAME); + if (parser == null) { + throw new XmlPullParserException("No " + SettingInjectorService.META_DATA_NAME + + " meta-data for " + service + ": " + si); + } + + AttributeSet attrs = Xml.asAttributeSet(parser); + + int type; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && type != XmlPullParser.START_TAG) { + } + + String nodeName = parser.getName(); + if (!SettingInjectorService.ATTRIBUTES_NAME.equals(nodeName)) { + throw new XmlPullParserException("Meta-data does not start with " + + SettingInjectorService.ATTRIBUTES_NAME + " tag"); + } + + Resources res = pm.getResourcesForApplication(ai); + return parseAttributes(si.packageName, si.name, res, attrs); + } catch (PackageManager.NameNotFoundException e) { + throw new XmlPullParserException( + "Unable to load resources for package " + si.packageName); + } finally { + if (parser != null) { + parser.close(); + } + } + } + + /** + * Returns an immutable representation of the static attributes for the setting, or null. + */ + private static InjectedSetting parseAttributes( + String packageName, String className, Resources res, AttributeSet attrs) { + + TypedArray sa = res.obtainAttributes(attrs, android.R.styleable.SettingInjectorService); + try { + // Note that to help guard against malicious string injection, we do not allow dynamic + // specification of the label (setting title) + final String title = sa.getString(android.R.styleable.SettingInjectorService_title); + final int iconId = + sa.getResourceId(android.R.styleable.SettingInjectorService_icon, 0); + final String settingsActivity = + sa.getString(android.R.styleable.SettingInjectorService_settingsActivity); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "parsed title: " + title + ", iconId: " + iconId + + ", settingsActivity: " + settingsActivity); + } + return InjectedSetting.newInstance(packageName, className, + title, iconId, settingsActivity); + } finally { + sa.recycle(); + } + } + + /** + * Gets a list of preferences that other apps have injected. + */ + public List getInjectedSettings() { + Iterable settings = getSettings(); + ArrayList prefs = new ArrayList(); + for (InjectedSetting setting : settings) { + Preference pref = addServiceSetting(prefs, setting); + mSettings.add(new Setting(setting, pref)); + } + + reloadStatusMessages(); + + return prefs; + } + + /** + * Reloads the status messages for all the preference items. + */ + public void reloadStatusMessages() { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "reloadingStatusMessages: " + mSettings); + } + mHandler.sendMessage(mHandler.obtainMessage(WHAT_RELOAD)); + } + + /** + * Adds an injected setting to the root with status "Loading...". + */ + private Preference addServiceSetting(List prefs, InjectedSetting info) { + Preference pref = new Preference(mContext); + pref.setTitle(info.title); + pref.setSummary(R.string.location_loading_injected_setting); + PackageManager pm = mContext.getPackageManager(); + Drawable icon = pm.getDrawable(info.packageName, info.iconId, null); + pref.setIcon(icon); + + Intent settingIntent = new Intent(); + settingIntent.setClassName(info.packageName, info.settingsActivity); + pref.setIntent(settingIntent); + + prefs.add(pref); + return pref; + } + + /** + * Loads the setting status values one at a time. Each load starts a subclass of {@link + * SettingInjectorService}, so to reduce memory pressure we don't want to load too many at + * once. + */ + private final class StatusLoadingHandler extends Handler { + + /** + * Settings whose status values need to be loaded. A set is used to prevent redundant loads. + */ + private Set mSettingsToLoad = new HashSet(); + + /** + * Settings that are being loaded now and haven't timed out. In practice this should have + * zero or one elements. + */ + private Set mSettingsBeingLoaded = new HashSet(); + + /** + * Settings that are being loaded but have timed out. If only one setting has timed out, we + * will go ahead and start loading the next setting so that one slow load won't delay the + * load of the other settings. + */ + private Set mTimedOutSettings = new HashSet(); + + private boolean mReloadRequested; + + @Override + public void handleMessage(Message msg) { + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "handleMessage start: " + msg + ", " + this); + } + + // Update state in response to message + switch (msg.what) { + case WHAT_RELOAD: + mReloadRequested = true; + break; + case WHAT_RECEIVED_STATUS: + final Setting receivedSetting = (Setting) msg.obj; + receivedSetting.maybeLogElapsedTime(); + mSettingsBeingLoaded.remove(receivedSetting); + mTimedOutSettings.remove(receivedSetting); + removeMessages(WHAT_TIMEOUT, receivedSetting); + break; + case WHAT_TIMEOUT: + final Setting timedOutSetting = (Setting) msg.obj; + mSettingsBeingLoaded.remove(timedOutSetting); + mTimedOutSettings.add(timedOutSetting); + if (Log.isLoggable(TAG, Log.WARN)) { + Log.w(TAG, "Timed out after " + timedOutSetting.getElapsedTime() + + " millis trying to get status for: " + timedOutSetting); + } + break; + default: + Log.wtf(TAG, "Unexpected what: " + msg); + } + + // Decide whether to load additional settings based on the new state. Start by seeing + // if we have headroom to load another setting. + if (mSettingsBeingLoaded.size() > 0 || mTimedOutSettings.size() > 1) { + // Don't load any more settings until one of the pending settings has completed. + // To reduce memory pressure, we want to be loading at most one setting (plus at + // most one timed-out setting) at a time. This means we'll be responsible for + // bringing in at most two services. + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "too many services already live for " + msg + ", " + this); + } + return; + } + + if (mReloadRequested && mSettingsToLoad.isEmpty() && mSettingsBeingLoaded.isEmpty() + && mTimedOutSettings.isEmpty()) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "reloading because idle and reload requesteed " + msg + ", " + this); + } + // Reload requested, so must reload all settings + mSettingsToLoad.addAll(mSettings); + mReloadRequested = false; + } + + // Remove the next setting to load from the queue, if any + Iterator iter = mSettingsToLoad.iterator(); + if (!iter.hasNext()) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "nothing left to do for " + msg + ", " + this); + } + return; + } + Setting setting = iter.next(); + iter.remove(); + + // Request the status value + setting.startService(); + mSettingsBeingLoaded.add(setting); + + // Ensure that if receiving the status value takes too long, we start loading the + // next value anyway + Message timeoutMsg = obtainMessage(WHAT_TIMEOUT, setting); + sendMessageDelayed(timeoutMsg, INJECTED_STATUS_UPDATE_TIMEOUT_MILLIS); + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "handleMessage end " + msg + ", " + this + + ", started loading " + setting); + } + } + + @Override + public String toString() { + return "StatusLoadingHandler{" + + "mSettingsToLoad=" + mSettingsToLoad + + ", mSettingsBeingLoaded=" + mSettingsBeingLoaded + + ", mTimedOutSettings=" + mTimedOutSettings + + ", mReloadRequested=" + mReloadRequested + + '}'; + } + } + + /** + * Represents an injected setting and the corresponding preference. + */ + private final class Setting { + + public final InjectedSetting setting; + public final Preference preference; + public long startMillis; + + private Setting(InjectedSetting setting, Preference preference) { + this.setting = setting; + this.preference = preference; + } + + @Override + public String toString() { + return "Setting{" + + "setting=" + setting + + ", preference=" + preference + + '}'; + } + + /** + * Returns true if they both have the same {@link #setting} value. Ignores mutable + * {@link #preference} and {@link #startMillis} so that it's safe to use in sets. + */ + @Override + public boolean equals(Object o) { + return this == o || o instanceof Setting && setting.equals(((Setting) o).setting); + } + + @Override + public int hashCode() { + return setting.hashCode(); + } + + /** + * Starts the service to fetch for the current status for the setting, and updates the + * preference when the service replies. + */ + public void startService() { + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + Bundle bundle = msg.getData(); + String summary = bundle.getString(SettingInjectorService.SUMMARY_KEY); + boolean enabled = bundle.getBoolean(SettingInjectorService.ENABLED_KEY, true); + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, setting + ": received " + msg + ", bundle: " + bundle); + } + preference.setSummary(summary); + preference.setEnabled(enabled); + mHandler.sendMessage( + mHandler.obtainMessage(WHAT_RECEIVED_STATUS, Setting.this)); + } + }; + Messenger messenger = new Messenger(handler); + + Intent intent = setting.getServiceIntent(); + intent.putExtra(SettingInjectorService.MESSENGER_KEY, messenger); + + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, setting + ": sending update intent: " + intent + + ", handler: " + handler); + startMillis = SystemClock.elapsedRealtime(); + } else { + startMillis = 0; + } + + // Start the service, making sure that this is attributed to the current user rather + // than the system user. + mContext.startServiceAsUser(intent, android.os.Process.myUserHandle()); + } + + public long getElapsedTime() { + long end = SystemClock.elapsedRealtime(); + return end - startMillis; + } + + public void maybeLogElapsedTime() { + if (Log.isLoggable(TAG, Log.DEBUG) && startMillis != 0) { + long elapsed = getElapsedTime(); + Log.d(TAG, this + " update took " + elapsed + " millis"); + } + } + } +} diff --git a/src/com/android/settings/net/UidDetailProvider.java b/src/com/android/settings/net/UidDetailProvider.java index 63672b7348d..aca3e5d9308 100644 --- a/src/com/android/settings/net/UidDetailProvider.java +++ b/src/com/android/settings/net/UidDetailProvider.java @@ -121,7 +121,7 @@ public class UidDetailProvider { final UserInfo info = um.getUserInfo(userHandle); if (info != null) { detail.label = res.getString(R.string.running_process_item_user_label, info.name); - detail.icon = UserUtils.getUserIcon(um, info, res); + detail.icon = UserUtils.getUserIcon(mContext, um, info, res); return detail; } } diff --git a/src/com/android/settings/nfc/PaymentBackend.java b/src/com/android/settings/nfc/PaymentBackend.java new file mode 100644 index 00000000000..f84bc74d7c4 --- /dev/null +++ b/src/com/android/settings/nfc/PaymentBackend.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.nfc; + +import android.content.ComponentName; +import android.content.Context; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.nfc.NfcAdapter; +import android.nfc.cardemulation.ApduServiceInfo; +import android.nfc.cardemulation.CardEmulation; +import android.provider.Settings; + +import java.util.ArrayList; +import java.util.List; + +public class PaymentBackend { + public static final String TAG = "Settings.PaymentBackend"; + + public static class PaymentAppInfo { + CharSequence caption; + Drawable banner; + boolean isDefault; + public ComponentName componentName; + } + + private final Context mContext; + private final NfcAdapter mAdapter; + private final CardEmulation mCardEmuManager; + + public PaymentBackend(Context context) { + mContext = context; + + mAdapter = NfcAdapter.getDefaultAdapter(context); + mCardEmuManager = CardEmulation.getInstance(mAdapter); + } + + public List getPaymentAppInfos() { + PackageManager pm = mContext.getPackageManager(); + List serviceInfos = + mCardEmuManager.getServices(CardEmulation.CATEGORY_PAYMENT); + List appInfos = new ArrayList(); + + if (serviceInfos == null) return appInfos; + + ComponentName defaultApp = getDefaultPaymentApp(); + + for (ApduServiceInfo service : serviceInfos) { + PaymentAppInfo appInfo = new PaymentAppInfo(); + appInfo.banner = service.loadBanner(pm); + appInfo.caption = service.getDescription(); + if (appInfo.caption == null) { + appInfo.caption = service.loadLabel(pm); + } + appInfo.isDefault = service.getComponent().equals(defaultApp); + appInfo.componentName = service.getComponent(); + appInfos.add(appInfo); + } + + return appInfos; + } + + ComponentName getDefaultPaymentApp() { + String componentString = Settings.Secure.getString(mContext.getContentResolver(), + Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT); + if (componentString != null) { + return ComponentName.unflattenFromString(componentString); + } else { + return null; + } + } + + public void setDefaultPaymentApp(ComponentName app) { + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.NFC_PAYMENT_DEFAULT_COMPONENT, + app != null ? app.flattenToString() : null); + } +} \ No newline at end of file diff --git a/src/com/android/settings/nfc/PaymentDefaultDialog.java b/src/com/android/settings/nfc/PaymentDefaultDialog.java new file mode 100644 index 00000000000..61c6fdba6b0 --- /dev/null +++ b/src/com/android/settings/nfc/PaymentDefaultDialog.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.nfc; + +import android.content.ComponentName; +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.content.pm.PackageManager.NameNotFoundException; +import android.nfc.cardemulation.ApduServiceInfo; +import android.nfc.cardemulation.CardEmulation; +import android.nfc.cardemulation.HostApduService; +import android.nfc.cardemulation.OffHostApduService; +import android.os.Bundle; +import android.util.Log; + +import com.android.internal.app.AlertActivity; +import com.android.internal.app.AlertController; +import com.android.settings.R; +import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; + +import java.io.IOException; +import java.util.List; + +import org.xmlpull.v1.XmlPullParserException; + +public final class PaymentDefaultDialog extends AlertActivity implements + DialogInterface.OnClickListener { + + public static final String TAG = "PaymentDefaultDialog"; + + private PaymentBackend mBackend; + private ComponentName mNewDefault; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBackend = new PaymentBackend(this); + Intent intent = getIntent(); + ComponentName component = intent.getParcelableExtra( + CardEmulation.EXTRA_SERVICE_COMPONENT); + String category = intent.getStringExtra(CardEmulation.EXTRA_CATEGORY); + + setResult(RESULT_CANCELED); + if (!buildDialog(component, category)) { + finish(); + } + + } + + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case BUTTON_POSITIVE: + mBackend.setDefaultPaymentApp(mNewDefault); + setResult(RESULT_OK); + break; + case BUTTON_NEGATIVE: + break; + } + } + + private boolean buildDialog(ComponentName component, String category) { + if (component == null || category == null) { + Log.e(TAG, "Component or category are null"); + return false; + } + + if (!CardEmulation.CATEGORY_PAYMENT.equals(category)) { + Log.e(TAG, "Don't support defaults for category " + category); + return false; + } + + // Check if passed in service exists + PaymentAppInfo requestedPaymentApp = null; + PaymentAppInfo defaultPaymentApp = null; + + List services = mBackend.getPaymentAppInfos(); + for (PaymentAppInfo service : services) { + if (component.equals(service.componentName)) { + requestedPaymentApp = service; + } + if (service.isDefault) { + defaultPaymentApp = service; + } + } + + if (requestedPaymentApp == null) { + Log.e(TAG, "Component " + component + " is not a registered payment service."); + return false; + } + + // Get current mode and default component + ComponentName defaultComponent = mBackend.getDefaultPaymentApp(); + if (defaultComponent != null && defaultComponent.equals(component)) { + Log.e(TAG, "Component " + component + " is already default."); + return false; + } + + mNewDefault = component; + // Compose dialog; get + final AlertController.AlertParams p = mAlertParams; + p.mTitle = getString(R.string.nfc_payment_set_default_label); + if (defaultPaymentApp == null) { + String formatString = getString(R.string.nfc_payment_set_default); + String msg = String.format(formatString, requestedPaymentApp.caption); + p.mMessage = msg; + } else { + String formatString = getString(R.string.nfc_payment_set_default_instead_of); + String msg = String.format(formatString, requestedPaymentApp.caption, + defaultPaymentApp.caption); + p.mMessage = msg; + } + p.mPositiveButtonText = getString(R.string.yes); + p.mNegativeButtonText = getString(R.string.no); + p.mPositiveButtonListener = this; + p.mNegativeButtonListener = this; + setupAlert(); + + return true; + } + +} diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java new file mode 100644 index 00000000000..7548c5099ef --- /dev/null +++ b/src/com/android/settings/nfc/PaymentSettings.java @@ -0,0 +1,220 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.nfc; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.Preference; +import android.preference.PreferenceManager; +import android.preference.PreferenceScreen; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.TextView; + +import com.android.internal.content.PackageMonitor; +import com.android.settings.HelpUtils; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; + +import java.util.List; + +public class PaymentSettings extends SettingsPreferenceFragment implements + OnClickListener { + public static final String TAG = "PaymentSettings"; + private LayoutInflater mInflater; + private PaymentBackend mPaymentBackend; + private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor(); + + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + mPaymentBackend = new PaymentBackend(getActivity()); + mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + setHasOptionsMenu(true); + } + + public void refresh() { + PreferenceManager manager = getPreferenceManager(); + PreferenceScreen screen = manager.createPreferenceScreen(getActivity()); + // Get all payment services + List appInfos = mPaymentBackend.getPaymentAppInfos(); + if (appInfos != null && appInfos.size() > 0) { + // Add all payment apps + for (PaymentAppInfo appInfo : appInfos) { + PaymentAppPreference preference = + new PaymentAppPreference(getActivity(), appInfo, this); + preference.setTitle(appInfo.caption); + if (appInfo.banner != null) { + screen.addPreference(preference); + } else { + // Ignore, no banner + Log.e(TAG, "Couldn't load banner drawable of service " + appInfo.componentName); + } + } + } + TextView emptyText = (TextView) getView().findViewById(R.id.nfc_payment_empty_text); + TextView learnMore = (TextView) getView().findViewById(R.id.nfc_payment_learn_more); + ImageView emptyImage = (ImageView) getView().findViewById(R.id.nfc_payment_tap_image); + if (screen.getPreferenceCount() == 0) { + emptyText.setVisibility(View.VISIBLE); + learnMore.setVisibility(View.VISIBLE); + emptyImage.setVisibility(View.VISIBLE); + getListView().setVisibility(View.GONE); + } else { + emptyText.setVisibility(View.GONE); + learnMore.setVisibility(View.GONE); + emptyImage.setVisibility(View.GONE); + getListView().setVisibility(View.VISIBLE); + } + setPreferenceScreen(screen); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + View v = mInflater.inflate(R.layout.nfc_payment, container, false); + TextView learnMore = (TextView) v.findViewById(R.id.nfc_payment_learn_more); + learnMore.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + String helpUrl; + if (!TextUtils.isEmpty(helpUrl = getResources().getString( + R.string.help_url_nfc_payment))) { + final Uri fullUri = HelpUtils.uriWithAddedParameters( + PaymentSettings.this.getActivity(), Uri.parse(helpUrl)); + Intent intent = new Intent(Intent.ACTION_VIEW, fullUri); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + startActivity(intent); + } else { + Log.e(TAG, "Help url not set."); + } + } + }); + return v; + } + + @Override + public void onClick(View v) { + if (v.getTag() instanceof PaymentAppInfo) { + PaymentAppInfo appInfo = (PaymentAppInfo) v.getTag(); + if (appInfo.componentName != null) { + mPaymentBackend.setDefaultPaymentApp(appInfo.componentName); + } + refresh(); + } + } + + @Override + public void onResume() { + super.onResume(); + mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); + refresh(); + } + + @Override + public void onPause() { + mSettingsPackageMonitor.unregister(); + super.onPause(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + String searchUri = Settings.Secure.getString(getContentResolver(), + Settings.Secure.PAYMENT_SERVICE_SEARCH_URI); + if (!TextUtils.isEmpty(searchUri)) { + MenuItem menuItem = menu.add(R.string.nfc_payment_menu_item_add_service); + menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menuItem.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse(searchUri))); + } + } + + private final Handler mHandler = new Handler() { + @Override + public void dispatchMessage(Message msg) { + refresh(); + } + }; + + private class SettingsPackageMonitor extends PackageMonitor { + @Override + public void onPackageAdded(String packageName, int uid) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageAppeared(String packageName, int reason) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageDisappeared(String packageName, int reason) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageRemoved(String packageName, int uid) { + mHandler.obtainMessage().sendToTarget(); + } + } + + public static class PaymentAppPreference extends Preference { + private final OnClickListener listener; + private final PaymentAppInfo appInfo; + + public PaymentAppPreference(Context context, PaymentAppInfo appInfo, + OnClickListener listener) { + super(context); + setLayoutResource(R.layout.nfc_payment_option); + this.appInfo = appInfo; + this.listener = listener; + } + + @Override + protected void onBindView(View view) { + super.onBindView(view); + + view.setOnClickListener(listener); + view.setTag(appInfo); + + RadioButton radioButton = (RadioButton) view.findViewById(android.R.id.button1); + radioButton.setChecked(appInfo.isDefault); + + ImageView banner = (ImageView) view.findViewById(R.id.banner); + banner.setImageDrawable(appInfo.banner); + } + } +} diff --git a/src/com/android/settings/print/PrintJobSettingsFragment.java b/src/com/android/settings/print/PrintJobSettingsFragment.java new file mode 100644 index 00000000000..cfb4cb203f1 --- /dev/null +++ b/src/com/android/settings/print/PrintJobSettingsFragment.java @@ -0,0 +1,218 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.print; + +import android.app.ActivityManager; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.preference.Preference; +import android.print.PrintJob; +import android.print.PrintJobId; +import android.print.PrintJobInfo; +import android.print.PrintManager; +import android.print.PrintManager.PrintJobStateChangeListener; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; + +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +import java.text.DateFormat; + +/** + * Fragment for management of a print job. + */ +public class PrintJobSettingsFragment extends SettingsPreferenceFragment { + private static final int MENU_ITEM_ID_CANCEL = 1; + private static final int MENU_ITEM_ID_RESTART = 2; + + private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID"; + + private static final String PRINT_JOB_PREFERENCE = "print_job_preference"; + private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference"; + + private Drawable mListDivider; + + private final PrintJobStateChangeListener mPrintJobStateChangeListener = + new PrintJobStateChangeListener() { + @Override + public void onPrintJobStateChanged(PrintJobId printJobId) { + updateUi(); + } + }; + + private PrintManager mPrintManager; + + private Preference mPrintJobPreference; + private Preference mMessagePreference; + + private PrintJobId mPrintJobId; + private PrintJob mPrintJob; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + addPreferencesFromResource(R.xml.print_job_settings); + mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE); + mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE); + + mPrintManager = ((PrintManager) getActivity().getSystemService( + Context.PRINT_SERVICE)).getGlobalPrintManagerForUser( + ActivityManager.getCurrentUser()); + + getActivity().setTitle(R.string.print_print_job); + + processArguments(); + + setHasOptionsMenu(true); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + getListView().setEnabled(false); + } + + @Override + public void onResume() { + super.onResume(); + mPrintManager.addPrintJobStateChangeListener( + mPrintJobStateChangeListener); + updateUi(); + } + + @Override + public void onPause() { + super.onPause(); + mPrintManager.removePrintJobStateChangeListener( + mPrintJobStateChangeListener); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + + MenuItem cancel = menu.add(0, MENU_ITEM_ID_CANCEL, Menu.NONE, + getString(R.string.print_cancel)); + cancel.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + + if (mPrintJob.isFailed()) { + MenuItem restart = menu.add(0, MENU_ITEM_ID_RESTART, Menu.NONE, + getString(R.string.print_restart)); + restart.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case MENU_ITEM_ID_CANCEL: { + mPrintJob.cancel(); + finish(); + return true; + } + + case MENU_ITEM_ID_RESTART: { + mPrintJob.restart(); + finish(); + return true; + } + } + + return super.onOptionsItemSelected(item); + } + + private void processArguments() { + String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID); + mPrintJobId = PrintJobId.unflattenFromString(printJobId); + if (mPrintJobId == null) { + finish(); + } + } + + private void updateUi() { + mPrintJob = mPrintManager.getPrintJob(mPrintJobId); + + if (mPrintJob == null) { + finish(); + return; + } + + if (mPrintJob.isCancelled() || mPrintJob.isCompleted()) { + finish(); + return; + } + + PrintJobInfo info = mPrintJob.getInfo(); + + switch (info.getState()) { + case PrintJobInfo.STATE_QUEUED: + case PrintJobInfo.STATE_STARTED: { + mPrintJobPreference.setTitle(getString( + R.string.print_printing_state_title_template, info.getLabel())); + } break; + + case PrintJobInfo.STATE_FAILED: { + mPrintJobPreference.setTitle(getString( + R.string.print_failed_state_title_template, info.getLabel())); + } break; + + case PrintJobInfo.STATE_BLOCKED: { + mPrintJobPreference.setTitle(getString( + R.string.print_blocked_state_title_template, info.getLabel())); + } break; + } + + mPrintJobPreference.setSummary(getString(R.string.print_job_summary, + info.getPrinterName(), DateUtils.formatSameDayTime( + info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT, + DateFormat.SHORT))); + + switch (info.getState()) { + case PrintJobInfo.STATE_QUEUED: + case PrintJobInfo.STATE_STARTED: { + mPrintJobPreference.setIcon(com.android.internal.R.drawable.ic_print); + } break; + + case PrintJobInfo.STATE_FAILED: + case PrintJobInfo.STATE_BLOCKED: { + mPrintJobPreference.setIcon(com.android.internal.R.drawable.ic_print_error); + } break; + } + + String stateReason = info.getStateReason(); + if (!TextUtils.isEmpty(stateReason)) { + if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) { + getPreferenceScreen().addPreference(mMessagePreference); + } + mMessagePreference.setSummary(stateReason); + getListView().setDivider(null); + } else { + getPreferenceScreen().removePreference(mMessagePreference); + getListView().setDivider(mListDivider); + } + + getActivity().invalidateOptionsMenu(); + } +} diff --git a/src/com/android/settings/print/PrintServiceSettingsFragment.java b/src/com/android/settings/print/PrintServiceSettingsFragment.java new file mode 100644 index 00000000000..326dd78c30c --- /dev/null +++ b/src/com/android/settings/print/PrintServiceSettingsFragment.java @@ -0,0 +1,801 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.print; + +import android.app.ActionBar; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.LoaderManager; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.Loader; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.ResolveInfo; +import android.database.ContentObserver; +import android.database.DataSetObserver; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.preference.PreferenceActivity; +import android.print.PrintManager; +import android.print.PrinterDiscoverySession; +import android.print.PrinterDiscoverySession.OnPrintersChangeListener; +import android.print.PrinterId; +import android.print.PrinterInfo; +import android.provider.Settings; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityManager; +import android.widget.BaseAdapter; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.Filter; +import android.widget.Filterable; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.SearchView; +import android.widget.TextView; + +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.print.PrintSettingsFragment.ToggleSwitch; +import com.android.settings.print.PrintSettingsFragment.ToggleSwitch.OnBeforeCheckedChangeListener; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +/** + * Fragment with print service settings. + */ +public class PrintServiceSettingsFragment extends SettingsPreferenceFragment + implements DialogInterface.OnClickListener { + + private static final int LOADER_ID_PRINTERS_LOADER = 1; + + private static final int DIALOG_ID_ENABLE_WARNING = 1; + + private final SettingsContentObserver mSettingsContentObserver = + new SettingsContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange, Uri uri) { + updateUiForServiceState(); + } + }; + + private final DataSetObserver mDataObserver = new DataSetObserver() { + @Override + public void onChanged() { + invalidateOptionsMenuIfNeeded(); + updateEmptyView(); + } + + @Override + public void onInvalidated() { + invalidateOptionsMenuIfNeeded(); + } + + private void invalidateOptionsMenuIfNeeded() { + final int unfilteredItemCount = mPrintersAdapter.getUnfilteredCount(); + if ((mLastUnfilteredItemCount <= 0 && unfilteredItemCount > 0) + || mLastUnfilteredItemCount > 0 && unfilteredItemCount <= 0) { + getActivity().invalidateOptionsMenu(); + } + mLastUnfilteredItemCount = unfilteredItemCount; + } + }; + + private ToggleSwitch mToggleSwitch; + + private String mPreferenceKey; + + private CharSequence mSettingsTitle; + private Intent mSettingsIntent; + + private CharSequence mAddPrintersTitle; + private Intent mAddPrintersIntent; + + private CharSequence mEnableWarningTitle; + private CharSequence mEnableWarningMessage; + + private ComponentName mComponentName; + + private PrintersAdapter mPrintersAdapter; + + private int mLastUnfilteredItemCount; + + private boolean mServiceEnabled; + + private AnnounceFilterResult mAnnounceFilterResult; + + @Override + public void onResume() { + super.onResume(); + mSettingsContentObserver.register(getContentResolver()); + updateEmptyView(); + updateUiForServiceState(); + } + + @Override + public void onPause() { + mSettingsContentObserver.unregister(getContentResolver()); + if (mAnnounceFilterResult != null) { + mAnnounceFilterResult.remove(); + } + super.onPause(); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + initComponents(); + updateUiForArguments(); + } + + @Override + public void onDestroyView() { + getActivity().getActionBar().setCustomView(null); + mToggleSwitch.setOnBeforeCheckedChangeListener(null); + super.onDestroyView(); + } + + private void onPreferenceToggled(String preferenceKey, boolean enabled) { + ComponentName service = ComponentName.unflattenFromString(preferenceKey); + List services = SettingsUtils.readEnabledPrintServices(getActivity()); + if (enabled) { + services.add(service); + } else { + services.remove(service); + } + SettingsUtils.writeEnabledPrintServices(getActivity(), services); + } + + @Override + public Dialog onCreateDialog(int dialogId) { + CharSequence title = null; + CharSequence message = null; + switch (dialogId) { + case DIALOG_ID_ENABLE_WARNING: + title = mEnableWarningTitle; + message = mEnableWarningMessage; + break; + default: + throw new IllegalArgumentException(); + } + return new AlertDialog.Builder(getActivity()) + .setTitle(title) + .setIconAttribute(android.R.attr.alertDialogIcon) + .setMessage(message) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); + } + + @Override + public void onClick(DialogInterface dialog, int which) { + final boolean checked; + switch (which) { + case DialogInterface.BUTTON_POSITIVE: + checked = true; + mToggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(PrintSettingsFragment.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + break; + case DialogInterface.BUTTON_NEGATIVE: + checked = false; + mToggleSwitch.setCheckedInternal(checked); + getArguments().putBoolean(PrintSettingsFragment.EXTRA_CHECKED, checked); + onPreferenceToggled(mPreferenceKey, checked); + break; + default: + throw new IllegalArgumentException(); + } + } + + private void updateEmptyView() { + ListView listView = getListView(); + ViewGroup contentRoot = (ViewGroup) listView.getParent(); + View emptyView = listView.getEmptyView(); + if (!mToggleSwitch.isChecked()) { + if (emptyView != null && emptyView.getId() != R.id.empty_print_state) { + contentRoot.removeView(emptyView); + emptyView = null; + } + if (emptyView == null) { + emptyView = getActivity().getLayoutInflater().inflate( + R.layout.empty_print_state, contentRoot, false); + emptyView.setContentDescription(getString(R.string.print_service_disabled)); + TextView textView = (TextView) emptyView.findViewById(R.id.message); + textView.setText(R.string.print_service_disabled); + contentRoot.addView(emptyView); + listView.setEmptyView(emptyView); + } + } else if (mPrintersAdapter.getUnfilteredCount() <= 0) { + if (emptyView != null + && emptyView.getId() != R.id.empty_printers_list_service_enabled) { + contentRoot.removeView(emptyView); + emptyView = null; + } + if (emptyView == null) { + emptyView = getActivity().getLayoutInflater().inflate( + R.layout.empty_printers_list_service_enabled, contentRoot, false); + contentRoot.addView(emptyView); + listView.setEmptyView(emptyView); + } + } else if (mPrintersAdapter.getCount() <= 0) { + if (emptyView != null && emptyView.getId() != R.id.empty_print_state) { + contentRoot.removeView(emptyView); + emptyView = null; + } + if (emptyView == null) { + emptyView = getActivity().getLayoutInflater().inflate( + R.layout.empty_print_state, contentRoot, false); + emptyView.setContentDescription(getString(R.string.print_no_printers_found)); + TextView textView = (TextView) emptyView.findViewById(R.id.message); + textView.setText(R.string.print_no_printers_found); + contentRoot.addView(emptyView); + listView.setEmptyView(emptyView); + } + } + } + + private void updateUiForServiceState() { + List services = SettingsUtils.readEnabledPrintServices(getActivity()); + mServiceEnabled = services.contains(mComponentName); + if (mServiceEnabled) { + mToggleSwitch.setCheckedInternal(true); + mPrintersAdapter.enable(); + } else { + mToggleSwitch.setCheckedInternal(false); + mPrintersAdapter.disable(); + } + getActivity().invalidateOptionsMenu(); + } + + private void initComponents() { + mPrintersAdapter = new PrintersAdapter(); + mPrintersAdapter.registerDataSetObserver(mDataObserver); + + mToggleSwitch = createAndAddActionBarToggleSwitch(getActivity()); + mToggleSwitch.setOnBeforeCheckedChangeListener(new OnBeforeCheckedChangeListener() { + @Override + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked) { + if (checked) { + if (!TextUtils.isEmpty(mEnableWarningMessage)) { + toggleSwitch.setCheckedInternal(false); + getArguments().putBoolean(PrintSettingsFragment.EXTRA_CHECKED, false); + showDialog(DIALOG_ID_ENABLE_WARNING); + return true; + } + onPreferenceToggled(mPreferenceKey, true); + } else { + onPreferenceToggled(mPreferenceKey, false); + } + return false; + } + }); + mToggleSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + updateEmptyView(); + } + }); + + getListView().setSelector(new ColorDrawable(Color.TRANSPARENT)); + getListView().setAdapter(mPrintersAdapter); + } + + private void updateUiForArguments() { + Bundle arguments = getArguments(); + + // Key. + mPreferenceKey = arguments.getString(PrintSettingsFragment.EXTRA_PREFERENCE_KEY); + + // Enabled. + final boolean enabled = arguments.getBoolean(PrintSettingsFragment.EXTRA_CHECKED); + mToggleSwitch.setCheckedInternal(enabled); + + // Title. + PreferenceActivity activity = (PreferenceActivity) getActivity(); + if (!activity.onIsMultiPane() || activity.onIsHidingHeaders()) { + // PreferenceActivity allows passing as an extra only title by its + // resource id but we do not have the resource id for the print + // service label. Therefore, we do it ourselves. + String title = arguments.getString(PrintSettingsFragment.EXTRA_TITLE); + getActivity().setTitle(title); + } + + // Settings title and intent. + String settingsTitle = arguments.getString(PrintSettingsFragment.EXTRA_SETTINGS_TITLE); + String settingsComponentName = arguments.getString( + PrintSettingsFragment.EXTRA_SETTINGS_COMPONENT_NAME); + if (!TextUtils.isEmpty(settingsTitle) && !TextUtils.isEmpty(settingsComponentName)) { + Intent settingsIntent = new Intent(Intent.ACTION_MAIN).setComponent( + ComponentName.unflattenFromString(settingsComponentName.toString())); + List resolvedActivities = getPackageManager().queryIntentActivities( + settingsIntent, 0); + if (!resolvedActivities.isEmpty()) { + // The activity is a component name, therefore it is one or none. + if (resolvedActivities.get(0).activityInfo.exported) { + mSettingsTitle = settingsTitle; + mSettingsIntent = settingsIntent; + } + } + } + + // Add printers title and intent. + String addPrintersTitle = arguments.getString( + PrintSettingsFragment.EXTRA_ADD_PRINTERS_TITLE); + String addPrintersComponentName = + arguments.getString(PrintSettingsFragment.EXTRA_ADD_PRINTERS_COMPONENT_NAME); + if (!TextUtils.isEmpty(addPrintersTitle) + && !TextUtils.isEmpty(addPrintersComponentName)) { + Intent addPritnersIntent = new Intent(Intent.ACTION_MAIN).setComponent( + ComponentName.unflattenFromString(addPrintersComponentName.toString())); + List resolvedActivities = getPackageManager().queryIntentActivities( + addPritnersIntent, 0); + if (!resolvedActivities.isEmpty()) { + // The activity is a component name, therefore it is one or none. + if (resolvedActivities.get(0).activityInfo.exported) { + mAddPrintersTitle = addPrintersTitle; + mAddPrintersIntent = addPritnersIntent; + } + } + } + + // Enable warning title. + mEnableWarningTitle = arguments.getCharSequence( + PrintSettingsFragment.EXTRA_ENABLE_WARNING_TITLE); + + // Enable warning message. + mEnableWarningMessage = arguments.getCharSequence( + PrintSettingsFragment.EXTRA_ENABLE_WARNING_MESSAGE); + + // Component name. + mComponentName = ComponentName.unflattenFromString(arguments + .getString(PrintSettingsFragment.EXTRA_SERVICE_COMPONENT_NAME)); + + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + inflater.inflate(R.menu.print_service_settings, menu); + + MenuItem addPrinters = menu.findItem(R.id.print_menu_item_add_printer); + if (mServiceEnabled && !TextUtils.isEmpty(mAddPrintersTitle) + && mAddPrintersIntent != null) { + addPrinters.setIntent(mAddPrintersIntent); + } else { + menu.removeItem(R.id.print_menu_item_add_printer); + } + + MenuItem settings = menu.findItem(R.id.print_menu_item_settings); + if (mServiceEnabled && !TextUtils.isEmpty(mSettingsTitle) + && mSettingsIntent != null) { + settings.setIntent(mSettingsIntent); + } else { + menu.removeItem(R.id.print_menu_item_settings); + } + + MenuItem searchItem = menu.findItem(R.id.print_menu_item_search); + if (mServiceEnabled && mPrintersAdapter.getUnfilteredCount() > 0) { + SearchView searchView = (SearchView) searchItem.getActionView(); + searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String query) { + return true; + } + + @Override + public boolean onQueryTextChange(String searchString) { + ((Filterable) getListView().getAdapter()).getFilter().filter(searchString); + return true; + } + }); + searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { + @Override + public void onViewAttachedToWindow(View view) { + if (AccessibilityManager.getInstance(getActivity()).isEnabled()) { + view.announceForAccessibility(getString( + R.string.print_search_box_shown_utterance)); + } + } + @Override + public void onViewDetachedFromWindow(View view) { + Activity activity = getActivity(); + if (activity != null && !activity.isFinishing() + && AccessibilityManager.getInstance(activity).isEnabled()) { + view.announceForAccessibility(getString( + R.string.print_search_box_hidden_utterance)); + } + } + }); + } else { + menu.removeItem(R.id.print_menu_item_search); + } + } + + private ToggleSwitch createAndAddActionBarToggleSwitch(Activity activity) { + ToggleSwitch toggleSwitch = new ToggleSwitch(activity); + final int padding = activity.getResources().getDimensionPixelSize( + R.dimen.action_bar_switch_padding); + toggleSwitch.setPaddingRelative(0, 0, padding, 0); + activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, + ActionBar.DISPLAY_SHOW_CUSTOM); + activity.getActionBar().setCustomView(toggleSwitch, + new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, + ActionBar.LayoutParams.WRAP_CONTENT, + Gravity.CENTER_VERTICAL | Gravity.END)); + return toggleSwitch; + } + + private static abstract class SettingsContentObserver extends ContentObserver { + + public SettingsContentObserver(Handler handler) { + super(handler); + } + + public void register(ContentResolver contentResolver) { + contentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ENABLED_PRINT_SERVICES), false, this); + } + + public void unregister(ContentResolver contentResolver) { + contentResolver.unregisterContentObserver(this); + } + + @Override + public abstract void onChange(boolean selfChange, Uri uri); + } + + private final class AnnounceFilterResult implements Runnable { + private static final int SEARCH_RESULT_ANNOUNCEMENT_DELAY = 1000; // 1 sec + + public void post() { + remove(); + getListView().postDelayed(this, SEARCH_RESULT_ANNOUNCEMENT_DELAY); + } + + public void remove() { + getListView().removeCallbacks(this); + } + + @Override + public void run() { + final int count = getListView().getAdapter().getCount(); + final String text; + if (count <= 0) { + text = getString(R.string.print_no_printers_found); + } else { + text = getActivity().getResources().getQuantityString( + R.plurals.print_search_result_count_utterance, count, count); + } + getListView().announceForAccessibility(text); + } + } + + private void announceSearchResult() { + if (mAnnounceFilterResult == null) { + mAnnounceFilterResult = new AnnounceFilterResult(); + } + mAnnounceFilterResult.post(); + } + + private final class PrintersAdapter extends BaseAdapter + implements LoaderManager.LoaderCallbacks>, Filterable { + private final Object mLock = new Object(); + + private final List mPrinters = new ArrayList(); + + private final List mFilteredPrinters = new ArrayList(); + + private CharSequence mLastSearchString; + + public void enable() { + getLoaderManager().initLoader(LOADER_ID_PRINTERS_LOADER, null, this); + } + + public void disable() { + getLoaderManager().destroyLoader(LOADER_ID_PRINTERS_LOADER); + mPrinters.clear(); + } + + public int getUnfilteredCount() { + return mPrinters.size(); + } + + @Override + public Filter getFilter() { + return new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + synchronized (mLock) { + if (TextUtils.isEmpty(constraint)) { + return null; + } + FilterResults results = new FilterResults(); + List filteredPrinters = new ArrayList(); + String constraintLowerCase = constraint.toString().toLowerCase(); + final int printerCount = mPrinters.size(); + for (int i = 0; i < printerCount; i++) { + PrinterInfo printer = mPrinters.get(i); + if (printer.getName().toLowerCase().contains(constraintLowerCase)) { + filteredPrinters.add(printer); + } + } + results.values = filteredPrinters; + results.count = filteredPrinters.size(); + return results; + } + } + + @Override + @SuppressWarnings("unchecked") + protected void publishResults(CharSequence constraint, FilterResults results) { + final boolean resultCountChanged; + synchronized (mLock) { + final int oldPrinterCount = mFilteredPrinters.size(); + mLastSearchString = constraint; + mFilteredPrinters.clear(); + if (results == null) { + mFilteredPrinters.addAll(mPrinters); + } else { + List printers = (List) results.values; + mFilteredPrinters.addAll(printers); + } + resultCountChanged = (oldPrinterCount != mFilteredPrinters.size()); + } + if (resultCountChanged) { + announceSearchResult(); + } + notifyDataSetChanged(); + } + }; + } + + @Override + public int getCount() { + synchronized (mLock) { + return mFilteredPrinters.size(); + } + } + + @Override + public Object getItem(int position) { + synchronized (mLock) { + return mFilteredPrinters.get(position); + } + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = getActivity().getLayoutInflater().inflate( + R.layout.printer_dropdown_item, parent, false); + } + + PrinterInfo printer = (PrinterInfo) getItem(position); + CharSequence title = printer.getName(); + CharSequence subtitle = null; + Drawable icon = null; + try { + PackageInfo packageInfo = getPackageManager().getPackageInfo( + printer.getId().getServiceName().getPackageName(), 0); + subtitle = packageInfo.applicationInfo.loadLabel(getPackageManager()); + icon = packageInfo.applicationInfo.loadIcon(getPackageManager()); + } catch (NameNotFoundException nnfe) { + /* ignore */ + } + + TextView titleView = (TextView) convertView.findViewById(R.id.title); + titleView.setText(title); + + TextView subtitleView = (TextView) convertView.findViewById(R.id.subtitle); + if (!TextUtils.isEmpty(subtitle)) { + subtitleView.setText(subtitle); + subtitleView.setVisibility(View.VISIBLE); + } else { + subtitleView.setText(null); + subtitleView.setVisibility(View.GONE); + } + + ImageView iconView = (ImageView) convertView.findViewById(R.id.icon); + if (icon != null) { + iconView.setImageDrawable(icon); + iconView.setVisibility(View.VISIBLE); + } else { + iconView.setVisibility(View.GONE); + } + + return convertView; + } + + @Override + public boolean isEnabled(int position) { + return false; + } + + @Override + public Loader> onCreateLoader(int id, Bundle args) { + if (id == LOADER_ID_PRINTERS_LOADER) { + return new PrintersLoader(getActivity()); + } + return null; + } + + @Override + public void onLoadFinished(Loader> loader, + List printers) { + synchronized (mLock) { + mPrinters.clear(); + final int printerCount = printers.size(); + for (int i = 0; i < printerCount; i++) { + PrinterInfo printer = printers.get(i); + if (printer.getId().getServiceName().equals(mComponentName)) { + mPrinters.add(printer); + } + } + mFilteredPrinters.clear(); + mFilteredPrinters.addAll(mPrinters); + if (!TextUtils.isEmpty(mLastSearchString)) { + getFilter().filter(mLastSearchString); + } + } + notifyDataSetChanged(); + } + + @Override + public void onLoaderReset(Loader> loader) { + synchronized (mLock) { + mPrinters.clear(); + mFilteredPrinters.clear(); + mLastSearchString = null; + } + notifyDataSetInvalidated(); + } + } + + private static class PrintersLoader extends Loader> { + + private static final String LOG_TAG = "PrintersLoader"; + + private static final boolean DEBUG = false; + + private final Map mPrinters = + new LinkedHashMap(); + + private PrinterDiscoverySession mDiscoverySession; + + public PrintersLoader(Context context) { + super(context); + } + + @Override + public void deliverResult(List printers) { + if (isStarted()) { + super.deliverResult(printers); + } + } + + @Override + protected void onStartLoading() { + if (DEBUG) { + Log.i(LOG_TAG, "onStartLoading()"); + } + // The contract is that if we already have a valid, + // result the we have to deliver it immediately. + if (!mPrinters.isEmpty()) { + deliverResult(new ArrayList(mPrinters.values())); + } + // We want to start discovery at this point. + onForceLoad(); + } + + @Override + protected void onStopLoading() { + if (DEBUG) { + Log.i(LOG_TAG, "onStopLoading()"); + } + onCancelLoad(); + } + + @Override + protected void onForceLoad() { + if (DEBUG) { + Log.i(LOG_TAG, "onForceLoad()"); + } + loadInternal(); + } + + @Override + protected boolean onCancelLoad() { + if (DEBUG) { + Log.i(LOG_TAG, "onCancelLoad()"); + } + return cancelInternal(); + } + + @Override + protected void onReset() { + if (DEBUG) { + Log.i(LOG_TAG, "onReset()"); + } + onStopLoading(); + mPrinters.clear(); + if (mDiscoverySession != null) { + mDiscoverySession.destroy(); + mDiscoverySession = null; + } + } + + @Override + protected void onAbandon() { + if (DEBUG) { + Log.i(LOG_TAG, "onAbandon()"); + } + onStopLoading(); + } + + private boolean cancelInternal() { + if (mDiscoverySession != null + && mDiscoverySession.isPrinterDiscoveryStarted()) { + mDiscoverySession.stopPrinterDiscovery(); + return true; + } + return false; + } + + private void loadInternal() { + if (mDiscoverySession == null) { + PrintManager printManager = (PrintManager) getContext() + .getSystemService(Context.PRINT_SERVICE); + mDiscoverySession = printManager.createPrinterDiscoverySession(); + mDiscoverySession.setOnPrintersChangeListener(new OnPrintersChangeListener() { + @Override + public void onPrintersChanged() { + deliverResult(new ArrayList( + mDiscoverySession.getPrinters())); + } + }); + } + mDiscoverySession.startPrinterDisovery(null); + } + } +} + diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java new file mode 100644 index 00000000000..391d5051cec --- /dev/null +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -0,0 +1,535 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.print; + +import android.app.ActivityManager; +import android.app.LoaderManager.LoaderCallbacks; +import android.content.AsyncTaskLoader; +import android.content.ComponentName; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.Loader; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.Preference; +import android.preference.PreferenceCategory; +import android.preference.PreferenceScreen; +import android.print.PrintJob; +import android.print.PrintJobId; +import android.print.PrintJobInfo; +import android.print.PrintManager; +import android.print.PrintManager.PrintJobStateChangeListener; +import android.printservice.PrintServiceInfo; +import android.provider.Settings; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Switch; +import android.widget.TextView; + +import com.android.internal.content.PackageMonitor; +import com.android.settings.DialogCreatable; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.List; + +/** + * Fragment with the top level print settings. + */ +public class PrintSettingsFragment extends SettingsPreferenceFragment implements DialogCreatable { + + static final char ENABLED_PRINT_SERVICES_SEPARATOR = ':'; + + private static final int LOADER_ID_PRINT_JOBS_LOADER = 1; + + private static final String PRINT_JOBS_CATEGORY = "print_jobs_category"; + private static final String PRINT_SERVICES_CATEGORY = "print_services_category"; + + // Extras passed to sub-fragments. + static final String EXTRA_PREFERENCE_KEY = "EXTRA_PREFERENCE_KEY"; + static final String EXTRA_CHECKED = "EXTRA_CHECKED"; + static final String EXTRA_TITLE = "EXTRA_TITLE"; + static final String EXTRA_ENABLE_WARNING_TITLE = "EXTRA_ENABLE_WARNING_TITLE"; + static final String EXTRA_ENABLE_WARNING_MESSAGE = "EXTRA_ENABLE_WARNING_MESSAGE"; + static final String EXTRA_SETTINGS_TITLE = "EXTRA_SETTINGS_TITLE"; + static final String EXTRA_SETTINGS_COMPONENT_NAME = "EXTRA_SETTINGS_COMPONENT_NAME"; + static final String EXTRA_ADD_PRINTERS_TITLE = "EXTRA_ADD_PRINTERS_TITLE"; + static final String EXTRA_ADD_PRINTERS_COMPONENT_NAME = "EXTRA_ADD_PRINTERS_COMPONENT_NAME"; + static final String EXTRA_SERVICE_COMPONENT_NAME = "EXTRA_SERVICE_COMPONENT_NAME"; + + static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID"; + + private static final String EXTRA_PRINT_SERVICE_COMPONENT_NAME = + "EXTRA_PRINT_SERVICE_COMPONENT_NAME"; + + private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor(); + + private final Handler mHandler = new Handler() { + @Override + public void dispatchMessage(Message msg) { + updateServicesPreferences(); + } + }; + + private final SettingsContentObserver mSettingsContentObserver = + new SettingsContentObserver(mHandler) { + @Override + public void onChange(boolean selfChange, Uri uri) { + updateServicesPreferences(); + } + }; + + private PreferenceCategory mActivePrintJobsCategory; + private PreferenceCategory mPrintServicesCategory; + + private PrintJobsController mPrintJobsController; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.print_settings); + + mActivePrintJobsCategory = (PreferenceCategory) findPreference( + PRINT_JOBS_CATEGORY); + mPrintServicesCategory= (PreferenceCategory) findPreference( + PRINT_SERVICES_CATEGORY); + getPreferenceScreen().removePreference(mActivePrintJobsCategory); + + mPrintJobsController = new PrintJobsController(); + getActivity().getLoaderManager().initLoader(LOADER_ID_PRINT_JOBS_LOADER, + null, mPrintJobsController); + } + + @Override + public void onResume() { + super.onResume(); + mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); + mSettingsContentObserver.register(getContentResolver()); + updateServicesPreferences(); + setHasOptionsMenu(true); + startSubSettingsIfNeeded(); + } + + @Override + public void onPause() { + mSettingsPackageMonitor.unregister(); + mSettingsContentObserver.unregister(getContentResolver()); + super.onPause(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + String searchUri = Settings.Secure.getString(getContentResolver(), + Settings.Secure.PRINT_SERVICE_SEARCH_URI); + if (!TextUtils.isEmpty(searchUri)) { + MenuItem menuItem = menu.add(R.string.print_menu_item_add_service); + menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menuItem.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse(searchUri))); + } + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + ViewGroup contentRoot = (ViewGroup) getListView().getParent(); + View emptyView = getActivity().getLayoutInflater().inflate( + R.layout.empty_print_state, contentRoot, false); + TextView textView = (TextView) emptyView.findViewById(R.id.message); + textView.setText(R.string.print_no_services_installed); + contentRoot.addView(emptyView); + getListView().setEmptyView(emptyView); + } + + private void updateServicesPreferences() { + if (getPreferenceScreen().findPreference(PRINT_SERVICES_CATEGORY) == null) { + getPreferenceScreen().addPreference(mPrintServicesCategory); + } else { + // Since services category is auto generated we have to do a pass + // to generate it since services can come and go. + mPrintServicesCategory.removeAll(); + } + + List enabledServices = SettingsUtils + .readEnabledPrintServices(getActivity()); + + List installedServices = getActivity().getPackageManager() + .queryIntentServices( + new Intent(android.printservice.PrintService.SERVICE_INTERFACE), + PackageManager.GET_SERVICES | PackageManager.GET_META_DATA); + + final int installedServiceCount = installedServices.size(); + for (int i = 0; i < installedServiceCount; i++) { + ResolveInfo installedService = installedServices.get(i); + + PreferenceScreen preference = getPreferenceManager().createPreferenceScreen( + getActivity()); + + String title = installedService.loadLabel(getPackageManager()).toString(); + preference.setTitle(title); + + ComponentName componentName = new ComponentName( + installedService.serviceInfo.packageName, + installedService.serviceInfo.name); + preference.setKey(componentName.flattenToString()); + + preference.setOrder(i); + preference.setFragment(PrintServiceSettingsFragment.class.getName()); + preference.setPersistent(false); + + final boolean serviceEnabled = enabledServices.contains(componentName); + if (serviceEnabled) { + preference.setSummary(getString(R.string.print_feature_state_on)); + } else { + preference.setSummary(getString(R.string.print_feature_state_off)); + } + + Bundle extras = preference.getExtras(); + extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey()); + extras.putBoolean(EXTRA_CHECKED, serviceEnabled); + extras.putString(EXTRA_TITLE, title); + + PrintServiceInfo printServiceInfo = PrintServiceInfo.create( + installedService, getActivity()); + + CharSequence applicationLabel = installedService.loadLabel(getPackageManager()); + + extras.putString(EXTRA_ENABLE_WARNING_TITLE, getString( + R.string.print_service_security_warning_title, applicationLabel)); + extras.putString(EXTRA_ENABLE_WARNING_MESSAGE, getString( + R.string.print_service_security_warning_summary, applicationLabel)); + + String settingsClassName = printServiceInfo.getSettingsActivityName(); + if (!TextUtils.isEmpty(settingsClassName)) { + extras.putString(EXTRA_SETTINGS_TITLE, + getString(R.string.print_menu_item_settings)); + extras.putString(EXTRA_SETTINGS_COMPONENT_NAME, + new ComponentName(installedService.serviceInfo.packageName, + settingsClassName).flattenToString()); + } + + String addPrinterClassName = printServiceInfo.getAddPrintersActivityName(); + if (!TextUtils.isEmpty(addPrinterClassName)) { + extras.putString(EXTRA_ADD_PRINTERS_TITLE, + getString(R.string.print_menu_item_add_printers)); + extras.putString(EXTRA_ADD_PRINTERS_COMPONENT_NAME, + new ComponentName(installedService.serviceInfo.packageName, + addPrinterClassName).flattenToString()); + } + + extras.putString(EXTRA_SERVICE_COMPONENT_NAME, componentName.flattenToString()); + + mPrintServicesCategory.addPreference(preference); + } + + if (mPrintServicesCategory.getPreferenceCount() == 0) { + getPreferenceScreen().removePreference(mPrintServicesCategory); + } + } + + private void startSubSettingsIfNeeded() { + if (getArguments() == null) { + return; + } + String componentName = getArguments().getString(EXTRA_PRINT_SERVICE_COMPONENT_NAME); + if (componentName != null) { + getArguments().remove(EXTRA_PRINT_SERVICE_COMPONENT_NAME); + Preference prereference = findPreference(componentName); + if (prereference != null) { + prereference.performClick(getPreferenceScreen()); + } + } + } + + private class SettingsPackageMonitor extends PackageMonitor { + @Override + public void onPackageAdded(String packageName, int uid) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageAppeared(String packageName, int reason) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageDisappeared(String packageName, int reason) { + mHandler.obtainMessage().sendToTarget(); + } + + @Override + public void onPackageRemoved(String packageName, int uid) { + mHandler.obtainMessage().sendToTarget(); + } + } + + public static class ToggleSwitch extends Switch { + + private OnBeforeCheckedChangeListener mOnBeforeListener; + + public static interface OnBeforeCheckedChangeListener { + public boolean onBeforeCheckedChanged(ToggleSwitch toggleSwitch, boolean checked); + } + + public ToggleSwitch(Context context) { + super(context); + } + + public void setOnBeforeCheckedChangeListener(OnBeforeCheckedChangeListener listener) { + mOnBeforeListener = listener; + } + + @Override + public void setChecked(boolean checked) { + if (mOnBeforeListener != null + && mOnBeforeListener.onBeforeCheckedChanged(this, checked)) { + return; + } + super.setChecked(checked); + } + + public void setCheckedInternal(boolean checked) { + super.setChecked(checked); + } + } + + private static abstract class SettingsContentObserver extends ContentObserver { + + public SettingsContentObserver(Handler handler) { + super(handler); + } + + public void register(ContentResolver contentResolver) { + contentResolver.registerContentObserver(Settings.Secure.getUriFor( + Settings.Secure.ENABLED_PRINT_SERVICES), false, this); + } + + public void unregister(ContentResolver contentResolver) { + contentResolver.unregisterContentObserver(this); + } + + @Override + public abstract void onChange(boolean selfChange, Uri uri); + } + + private final class PrintJobsController implements LoaderCallbacks> { + + @Override + public Loader> onCreateLoader(int id, Bundle args) { + if (id == LOADER_ID_PRINT_JOBS_LOADER) { + return new PrintJobsLoader(getActivity()); + } + return null; + } + + @Override + public void onLoadFinished(Loader> loader, + List printJobs) { + if (printJobs == null || printJobs.isEmpty()) { + getPreferenceScreen().removePreference(mActivePrintJobsCategory); + } else { + if (getPreferenceScreen().findPreference(PRINT_JOBS_CATEGORY) == null) { + getPreferenceScreen().addPreference(mActivePrintJobsCategory); + } + + mActivePrintJobsCategory.removeAll(); + + final int printJobCount = printJobs.size(); + for (int i = 0; i < printJobCount; i++) { + PrintJobInfo printJob = printJobs.get(i); + + PreferenceScreen preference = getPreferenceManager() + .createPreferenceScreen(getActivity()); + + preference.setPersistent(false); + preference.setFragment(PrintJobSettingsFragment.class.getName()); + preference.setKey(printJob.getId().flattenToString()); + + switch (printJob.getState()) { + case PrintJobInfo.STATE_QUEUED: + case PrintJobInfo.STATE_STARTED: { + preference.setTitle(getString( + R.string.print_printing_state_title_template, + printJob.getLabel())); + } break; + + case PrintJobInfo.STATE_FAILED: { + preference.setTitle(getString( + R.string.print_failed_state_title_template, + printJob.getLabel())); + } break; + + case PrintJobInfo.STATE_BLOCKED: { + preference.setTitle(getString( + R.string.print_blocked_state_title_template, + printJob.getLabel())); + } break; + } + + preference.setSummary(getString(R.string.print_job_summary, + printJob.getPrinterName(), DateUtils.formatSameDayTime( + printJob.getCreationTime(), printJob.getCreationTime(), + DateFormat.SHORT, DateFormat.SHORT))); + + switch (printJob.getState()) { + case PrintJobInfo.STATE_QUEUED: + case PrintJobInfo.STATE_STARTED: { + preference.setIcon(com.android.internal.R.drawable.ic_print); + } break; + + case PrintJobInfo.STATE_FAILED: + case PrintJobInfo.STATE_BLOCKED: { + preference.setIcon(com.android.internal.R.drawable.ic_print_error); + } break; + } + + Bundle extras = preference.getExtras(); + extras.putString(EXTRA_PRINT_JOB_ID, printJob.getId().flattenToString()); + + mActivePrintJobsCategory.addPreference(preference); + } + } + } + + @Override + public void onLoaderReset(Loader> loader) { + getPreferenceScreen().removePreference(mActivePrintJobsCategory); + } + } + + private static final class PrintJobsLoader extends AsyncTaskLoader> { + + private static final String LOG_TAG = "PrintJobsLoader"; + + private static final boolean DEBUG = false; + + private List mPrintJobs = new ArrayList(); + + private final PrintManager mPrintManager; + + private PrintJobStateChangeListener mPrintJobStateChangeListener; + + public PrintJobsLoader(Context context) { + super(context); + mPrintManager = ((PrintManager) context.getSystemService( + Context.PRINT_SERVICE)).getGlobalPrintManagerForUser( + ActivityManager.getCurrentUser()); + } + + @Override + public void deliverResult(List printJobs) { + if (isStarted()) { + super.deliverResult(printJobs); + } + } + + @Override + protected void onStartLoading() { + if (DEBUG) { + Log.i(LOG_TAG, "onStartLoading()"); + } + // If we already have a result, deliver it immediately. + if (!mPrintJobs.isEmpty()) { + deliverResult(new ArrayList(mPrintJobs)); + } + // Start watching for changes. + if (mPrintJobStateChangeListener == null) { + mPrintJobStateChangeListener = new PrintJobStateChangeListener() { + @Override + public void onPrintJobStateChanged(PrintJobId printJobId) { + onForceLoad(); + } + }; + mPrintManager.addPrintJobStateChangeListener( + mPrintJobStateChangeListener); + } + // If the data changed or we have no data - load it now. + if (mPrintJobs.isEmpty()) { + onForceLoad(); + } + } + + @Override + protected void onStopLoading() { + if (DEBUG) { + Log.i(LOG_TAG, "onStopLoading()"); + } + // Cancel the load in progress if possible. + onCancelLoad(); + } + + @Override + protected void onReset() { + if (DEBUG) { + Log.i(LOG_TAG, "onReset()"); + } + // Stop loading. + onStopLoading(); + // Clear the cached result. + mPrintJobs.clear(); + // Stop watching for changes. + if (mPrintJobStateChangeListener != null) { + mPrintManager.removePrintJobStateChangeListener( + mPrintJobStateChangeListener); + mPrintJobStateChangeListener = null; + } + } + + @Override + public List loadInBackground() { + List printJobInfos = null; + List printJobs = mPrintManager.getPrintJobs(); + final int printJobCount = printJobs.size(); + for (int i = 0; i < printJobCount; i++) { + PrintJobInfo printJob = printJobs.get(i).getInfo(); + if (shouldShowToUser(printJob)) { + if (printJobInfos == null) { + printJobInfos = new ArrayList(); + } + printJobInfos.add(printJob); + } + } + return printJobInfos; + } + + private static boolean shouldShowToUser(PrintJobInfo printJob) { + switch (printJob.getState()) { + case PrintJobInfo.STATE_QUEUED: + case PrintJobInfo.STATE_STARTED: + case PrintJobInfo.STATE_BLOCKED: + case PrintJobInfo.STATE_FAILED: { + return true; + } + } + return false; + } + } +} diff --git a/src/com/android/settings/print/SettingsUtils.java b/src/com/android/settings/print/SettingsUtils.java new file mode 100644 index 00000000000..37827e648c0 --- /dev/null +++ b/src/com/android/settings/print/SettingsUtils.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.print; + +import android.content.ComponentName; +import android.content.Context; +import android.provider.Settings; +import android.text.TextUtils.SimpleStringSplitter; + +import java.util.ArrayList;import java.util.List; + +/** + * Helper methods for reading and writing to print settings. + */ +public class SettingsUtils { + + private static final char ENABLED_PRINT_SERVICES_SEPARATOR = ':'; + + private SettingsUtils() { + /* do nothing */ + } + + public static List readEnabledPrintServices(Context context) { + List enabledServices = new ArrayList(); + + String enabledServicesSetting = Settings.Secure.getString(context + .getContentResolver(), Settings.Secure.ENABLED_PRINT_SERVICES); + if (enabledServicesSetting == null) { + return enabledServices; + } + + SimpleStringSplitter colonSplitter = new SimpleStringSplitter( + ENABLED_PRINT_SERVICES_SEPARATOR); + colonSplitter.setString(enabledServicesSetting); + + while (colonSplitter.hasNext()) { + String componentNameString = colonSplitter.next(); + ComponentName enabledService = ComponentName.unflattenFromString( + componentNameString); + enabledServices.add(enabledService); + } + + return enabledServices; + } + + public static void writeEnabledPrintServices(Context context, + List services) { + StringBuilder builder = new StringBuilder(); + final int serviceCount = services.size(); + for (int i = 0; i < serviceCount; i++) { + ComponentName service = services.get(i); + if (builder.length() > 0) { + builder.append(ENABLED_PRINT_SERVICES_SEPARATOR); + } + builder.append(service.flattenToString()); + } + Settings.Secure.putString(context.getContentResolver(), + Settings.Secure.ENABLED_PRINT_SERVICES, + builder.toString()); + } +} diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java index 8f83bbc77b6..0ff7f4f9c7e 100644 --- a/src/com/android/settings/tts/TextToSpeechSettings.java +++ b/src/com/android/settings/tts/TextToSpeechSettings.java @@ -42,6 +42,7 @@ import android.text.TextUtils; import android.util.Log; import android.widget.Checkable; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -60,6 +61,9 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements /** Preference key for the TTS rate selection dialog. */ private static final String KEY_DEFAULT_RATE = "tts_default_rate"; + /** Preference key for the TTS status field. */ + private static final String KEY_STATUS = "tts_status"; + /** * Preference key for the engine selection preference. */ @@ -75,6 +79,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements private PreferenceCategory mEnginePreferenceCategory; private ListPreference mDefaultRatePref; private Preference mPlayExample; + private Preference mEngineStatus; private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; @@ -98,6 +103,20 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements private TextToSpeech mTts = null; private TtsEngines mEnginesHelper = null; + private String mSampleText = ""; + + /** + * Default locale used by selected TTS engine, null if not connected to any engine. + */ + private Locale mCurrentDefaultLocale; + + /** + * List of available locals of selected TTS engine, as returned by + * {@link TextToSpeech.Engine#ACTION_CHECK_TTS_DATA} activity. If empty, then activity + * was not yet called. + */ + private List mAvailableStrLocals; + /** * The initialization listener used when we are initalizing the settings * screen for the first time (as opposed to when a user changes his choice @@ -131,11 +150,15 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements mPlayExample = findPreference(KEY_PLAY_EXAMPLE); mPlayExample.setOnPreferenceClickListener(this); + mPlayExample.setEnabled(false); mEnginePreferenceCategory = (PreferenceCategory) findPreference( KEY_ENGINE_PREFERENCE_SECTION); mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE); + mEngineStatus = findPreference(KEY_STATUS); + updateEngineStatus(R.string.tts_status_checking); + mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener); mEnginesHelper = new TtsEngines(getActivity().getApplicationContext()); @@ -143,6 +166,20 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements initSettings(); } + @Override + public void onResume() { + super.onResume(); + + if (mTts == null || mCurrentDefaultLocale == null) { + return; + } + Locale ttsDefaultLocale = mTts.getDefaultLanguage(); + if (mCurrentDefaultLocale != null && !mCurrentDefaultLocale.equals(ttsDefaultLocale)) { + updateWidgetState(false); + checkDefaultLocale(); + } + } + private void setTtsUtteranceProgressListener() { if (mTts == null) { return; @@ -205,6 +242,80 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements checkVoiceData(mCurrentEngine); } + /** + * Called when the TTS engine is initialized. + */ + public void onInitEngine(int status) { + if (status == TextToSpeech.SUCCESS) { + if (DBG) Log.d(TAG, "TTS engine for settings screen initialized."); + checkDefaultLocale(); + } else { + if (DBG) Log.d(TAG, "TTS engine for settings screen failed to initialize successfully."); + updateWidgetState(false); + } + } + + private void checkDefaultLocale() { + Locale defaultLocale = mTts.getDefaultLanguage(); + if (defaultLocale == null) { + Log.e(TAG, "Failed to get default language from engine " + mCurrentEngine); + updateWidgetState(false); + updateEngineStatus(R.string.tts_status_not_supported); + return; + } + + mCurrentDefaultLocale = defaultLocale; + + int defaultAvailable = mTts.setLanguage(defaultLocale); + if (evaluateDefaultLocale()) { + getSampleText(); + } + } + + private boolean evaluateDefaultLocale() { + // Check if we are connected to the engine, and CHECK_VOICE_DATA returned list + // of available languages. + if (mCurrentDefaultLocale == null || mAvailableStrLocals == null) { + return false; + } + int defaultAvailable = mTts.setLanguage(mCurrentDefaultLocale); + + // Check if language is listed in CheckVoices Action result as available voice. + String defaultLocaleStr = mCurrentDefaultLocale.getISO3Language(); + boolean notInAvailableLangauges = true; + if (!TextUtils.isEmpty(mCurrentDefaultLocale.getISO3Country())) { + defaultLocaleStr += "-" + mCurrentDefaultLocale.getISO3Country(); + } + if (!TextUtils.isEmpty(mCurrentDefaultLocale.getVariant())) { + defaultLocaleStr += "-" + mCurrentDefaultLocale.getVariant(); + } + + for (String loc : mAvailableStrLocals) { + if (loc.equalsIgnoreCase(defaultLocaleStr)) { + notInAvailableLangauges = false; + break; + } + } + + if (defaultAvailable == TextToSpeech.LANG_NOT_SUPPORTED || + defaultAvailable == TextToSpeech.LANG_MISSING_DATA || + notInAvailableLangauges) { + if (DBG) Log.d(TAG, "Default locale for this TTS engine is not supported."); + updateEngineStatus(R.string.tts_status_not_supported); + updateWidgetState(false); + return false; + } else { + if (isNetworkRequiredForSynthesis()) { + updateEngineStatus(R.string.tts_status_requires_network); + } else { + updateEngineStatus(R.string.tts_status_ok); + } + updateWidgetState(true); + return true; + } + } + + /** * Ask the current default engine to return a string of sample text to be * spoken to the user. @@ -214,23 +325,15 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements if (TextUtils.isEmpty(currentEngine)) currentEngine = mTts.getDefaultEngine(); - - Locale defaultLocale = mTts.getDefaultLanguage(); - if (defaultLocale == null) { - Log.e(TAG, "Failed to get default language from engine " + currentEngine); - return; - } - mTts.setLanguage(defaultLocale); - // TODO: This is currently a hidden private API. The intent extras // and the intent action should be made public if we intend to make this // a public API. We fall back to using a canned set of strings if this // doesn't work. Intent intent = new Intent(TextToSpeech.Engine.ACTION_GET_SAMPLE_TEXT); - intent.putExtra("language", defaultLocale.getLanguage()); - intent.putExtra("country", defaultLocale.getCountry()); - intent.putExtra("variant", defaultLocale.getVariant()); + intent.putExtra("language", mCurrentDefaultLocale.getLanguage()); + intent.putExtra("country", mCurrentDefaultLocale.getCountry()); + intent.putExtra("variant", mCurrentDefaultLocale.getVariant()); intent.setPackage(currentEngine); try { @@ -241,19 +344,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements } } - /** - * Called when the TTS engine is initialized. - */ - public void onInitEngine(int status) { - if (status == TextToSpeech.SUCCESS) { - updateWidgetState(true); - if (DBG) Log.d(TAG, "TTS engine for settings screen initialized."); - } else { - if (DBG) Log.d(TAG, "TTS engine for settings screen failed to initialize successfully."); - updateWidgetState(false); - } - } - /** * Called when voice data integrity check returns */ @@ -280,11 +370,14 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements } } } - return null; + return getString(R.string.tts_default_sample_string); } private boolean isNetworkRequiredForSynthesis() { - Set features = mTts.getFeatures(mTts.getLanguage()); + Set features = mTts.getFeatures(mCurrentDefaultLocale); + if (features == null) { + return false; + } return features.contains(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS) && !features.contains(TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS); } @@ -301,24 +394,25 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements if (DBG) Log.d(TAG, "Using default sample text :" + sample); } - if (sample != null && mTts != null) { - // The engine is guaranteed to have been initialized here - // because this preference is not enabled otherwise. - - final boolean networkRequired = isNetworkRequiredForSynthesis(); - if (!networkRequired || networkRequired && - (mTts.isLanguageAvailable(mTts.getLanguage()) >= TextToSpeech.LANG_AVAILABLE)) { - HashMap params = new HashMap(); - params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "Sample"); - - mTts.speak(sample, TextToSpeech.QUEUE_FLUSH, params); - } else { - Log.w(TAG, "Network required for sample synthesis for requested language"); - displayNetworkAlert(); - } + mSampleText = sample; + if (mSampleText != null) { + updateWidgetState(true); } else { - // TODO: Display an error here to the user. - Log.e(TAG, "Did not have a sample string for the requested language"); + Log.e(TAG, "Did not have a sample string for the requested language. Using default"); + } + } + + private void speakSampleText() { + final boolean networkRequired = isNetworkRequiredForSynthesis(); + if (!networkRequired || networkRequired && + (mTts.isLanguageAvailable(mCurrentDefaultLocale) >= TextToSpeech.LANG_AVAILABLE)) { + HashMap params = new HashMap(); + params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "Sample"); + + mTts.speak(mSampleText, TextToSpeech.QUEUE_FLUSH, params); + } else { + Log.w(TAG, "Network required for sample synthesis for requested language"); + displayNetworkAlert(); } } @@ -349,7 +443,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements if (preference == mPlayExample) { // Get the sample text from the TTS engine; onActivityResult will do // the actual speaking - getSampleText(); + speakSampleText(); return true; } @@ -359,6 +453,15 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements private void updateWidgetState(boolean enable) { mPlayExample.setEnabled(enable); mDefaultRatePref.setEnabled(enable); + mEngineStatus.setEnabled(enable); + } + + private void updateEngineStatus(int resourceId) { + Locale locale = mCurrentDefaultLocale; + if (locale == null) { + locale = Locale.getDefault(); + } + mEngineStatus.setSummary(getString(resourceId, locale.getDisplayName())); } private void displayNetworkAlert() { @@ -379,6 +482,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements // Disable the "play sample text" preference and the speech // rate preference while the engine is being swapped. updateWidgetState(false); + updateEngineStatus(R.string.tts_status_checking); // Keep track of the previous engine that was being used. So that // we can reuse the previous engine. @@ -463,6 +567,17 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements Settings.Secure.putString(getContentResolver(), TTS_DEFAULT_SYNTH, engine); + mAvailableStrLocals = data.getStringArrayListExtra( + TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); + if (mAvailableStrLocals == null) { + Log.e(TAG, "Voice data check complete, but no available voices found"); + // Set mAvailableStrLocals to empty list + mAvailableStrLocals = new ArrayList(); + } + if (evaluateDefaultLocale()) { + getSampleText(); + } + final int engineCount = mEnginePreferenceCategory.getPreferenceCount(); for (int i = 0; i < engineCount; ++i) { final Preference p = mEnginePreferenceCategory.getPreference(i); @@ -474,8 +589,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements } } } - - updateWidgetState(true); } @Override diff --git a/src/com/android/settings/tts/TtsEngineSettingsFragment.java b/src/com/android/settings/tts/TtsEngineSettingsFragment.java index e02b6ae13ff..bb5ac7ae4c0 100644 --- a/src/com/android/settings/tts/TtsEngineSettingsFragment.java +++ b/src/com/android/settings/tts/TtsEngineSettingsFragment.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; +import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; @@ -62,6 +63,9 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem private TextToSpeech mTts; + private int mSelectedLocaleIndex = -1; + private int mSystemLocaleIndex = -1; + private final TextToSpeech.OnInitListener mTtsInitListener = new TextToSpeech.OnInitListener() { @Override public void onInit(int status) { @@ -105,10 +109,6 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem mEngineSettingsPreference.setOnPreferenceClickListener(this); mInstallVoicesPreference = root.findPreference(KEY_INSTALL_DATA); mInstallVoicesPreference.setOnPreferenceClickListener(this); - // Remove this preference unless voices are indeed available to install. - root.removePreference(mInstallVoicesPreference); - // Remove this preference unless locales are indeed available. - root.removePreference(mLocalePreference); root.setTitle(getEngineLabel()); root.setKey(getEngineName()); @@ -120,8 +120,8 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem mEngineSettingsPreference.setEnabled(false); } mInstallVoicesPreference.setEnabled(false); - mLocalePreference.setEnabled(false); + mLocalePreference.setEntries(new CharSequence[0]); mLocalePreference.setEntryValues(new CharSequence[0]); @@ -130,7 +130,6 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem mTts = new TextToSpeech(getActivity().getApplicationContext(), mTtsInitListener, getEngineName()); - // Check if data packs changed checkTtsData(); @@ -172,31 +171,26 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem final ArrayList unavailable = mVoiceDataDetails.getStringArrayListExtra( TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES); + if (unavailable != null && unavailable.size() > 0) { + mInstallVoicesPreference.setEnabled(true); + } else { + mInstallVoicesPreference.setEnabled(false); + } + if (available == null){ Log.e(TAG, "TTS data check failed (available == null)."); mLocalePreference.setEnabled(false); - getPreferenceScreen().removePreference(mLocalePreference); return; - } - - if (unavailable != null && unavailable.size() > 0) { - mInstallVoicesPreference.setEnabled(true); - getPreferenceScreen().addPreference(mInstallVoicesPreference); } else { - getPreferenceScreen().removePreference(mInstallVoicesPreference); - } - - if (available.size() > 0) { - mLocalePreference.setEnabled(true); - getPreferenceScreen().addPreference(mLocalePreference); updateDefaultLocalePref(available); - } else { - mLocalePreference.setEnabled(false); - getPreferenceScreen().removePreference(mLocalePreference); } } private void updateDefaultLocalePref(ArrayList availableLangs) { + if (availableLangs == null || availableLangs.size() == 0) { + mLocalePreference.setEnabled(false); + return; + } String currentLocale = mEnginesHelper.getLocalePrefForEngine( getEngineName()); @@ -227,14 +221,20 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem } }); + String defaultLocaleStr = mEnginesHelper.getDefaultLocale(); + // Get two arrays out of one of pairs - int selectedLanguageIndex = -1; + mSelectedLocaleIndex = -1; + mSystemLocaleIndex = -1; CharSequence[] entries = new CharSequence[availableLangs.size()]; CharSequence[] entryValues = new CharSequence[availableLangs.size()]; int i = 0; for (Pair entry : entryPairs) { if (entry.second.equalsIgnoreCase(currentLocale)) { - selectedLanguageIndex = i; + mSelectedLocaleIndex = i; + } + if (entry.second.equalsIgnoreCase(defaultLocaleStr)) { + mSystemLocaleIndex = i; } entries[i] = entry.first; entryValues[i++] = entry.second; @@ -242,11 +242,18 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem mLocalePreference.setEntries(entries); mLocalePreference.setEntryValues(entryValues); - if (selectedLanguageIndex > -1) { - mLocalePreference.setValueIndex(selectedLanguageIndex); + mLocalePreference.setEnabled(true); + setLocalePreference(mSelectedLocaleIndex); + } + + /** Set entry from entry table in mLocalePreference */ + private void setLocalePreference(int index) { + if (index < 0) { + mLocalePreference.setValue(""); + mLocalePreference.setSummary(R.string.tts_lang_not_selected); } else { - mLocalePreference.setValueIndex(0); - updateLanguageTo(availableLangs.get(0)); + mLocalePreference.setValueIndex(index); + mLocalePreference.setSummary(mLocalePreference.getEntries()[index]); } } @@ -286,12 +293,32 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem updateLanguageTo((String) newValue); return true; } - return false; } private void updateLanguageTo(String locale) { - mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale); + int selectedLocaleIndex = -1; + for (int i=0; i < mLocalePreference.getEntryValues().length; i++) { + if (locale.equalsIgnoreCase(mLocalePreference.getEntryValues()[i].toString())) { + selectedLocaleIndex = i; + break; + } + } + + if (selectedLocaleIndex == -1) { + Log.w(TAG, "updateLanguageTo called with unknown locale argument"); + return; + } + mLocalePreference.setSummary(mLocalePreference.getEntries()[selectedLocaleIndex]); + mSelectedLocaleIndex = selectedLocaleIndex; + + if (mSelectedLocaleIndex == mSystemLocaleIndex) { + // Use empty locale, it will default to the system language + mEnginesHelper.updateLocalePrefForEngine(getEngineName(), ""); + } else { + mEnginesHelper.updateLocalePrefForEngine(getEngineName(), locale); + } + if (getEngineName().equals(mTts.getCurrentEngine())) { String[] localeArray = TtsEngines.parseLocalePref(locale); if (localeArray != null) { @@ -307,5 +334,4 @@ public class TtsEngineSettingsFragment extends SettingsPreferenceFragment implem private String getEngineLabel() { return getArguments().getString(TtsEnginePreference.FRAGMENT_ARGS_LABEL); } - } diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java index 95d3496ad71..f1022b9a2eb 100644 --- a/src/com/android/settings/users/AppRestrictionsFragment.java +++ b/src/com/android/settings/users/AppRestrictionsFragment.java @@ -17,14 +17,10 @@ package com.android.settings.users; import android.app.Activity; -import android.app.AlertDialog; import android.app.AppGlobals; -import android.app.Dialog; -import android.app.Fragment; import android.appwidget.AppWidgetManager; import android.content.BroadcastReceiver; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.RestrictionEntry; @@ -34,16 +30,12 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; -import android.content.pm.UserInfo; import android.content.res.Resources; -import android.database.Cursor; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.ColorFilter; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; @@ -58,33 +50,21 @@ import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceGroup; import android.preference.SwitchPreference; -import android.provider.ContactsContract.DisplayPhoto; -import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; -import android.view.inputmethod.InputMethod; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; +import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.ListAdapter; -import android.widget.ListPopupWindow; import android.widget.Switch; -import android.widget.TextView; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; -import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -103,13 +83,12 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen private static final boolean DEBUG = false; private static final String PKG_PREFIX = "pkg_"; - private static final String KEY_USER_INFO = "user_info"; - private static final int DIALOG_ID_EDIT_USER_INFO = 1; - - private PackageManager mPackageManager; - private UserManager mUserManager; - private UserHandle mUser; + protected PackageManager mPackageManager; + protected UserManager mUserManager; + protected IPackageManager mIPm; + protected UserHandle mUser; + private PackageInfo mSysPackageInfo; private PreferenceGroup mAppList; @@ -123,27 +102,21 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen /** Key for extra passed in from calling fragment to indicate if this is a newly created user */ public static final String EXTRA_NEW_USER = "new_user"; - private static final String KEY_SAVED_PHOTO = "pending_photo"; - HashMap mSelectedPackages = new HashMap(); private boolean mFirstTime = true; private boolean mNewUser; private boolean mAppListChanged; + protected boolean mRestrictedProfile; + + private static final int CUSTOM_REQUEST_CODE_START = 1000; + private int mCustomRequestCode = CUSTOM_REQUEST_CODE_START; - private int mCustomRequestCode; private HashMap mCustomRequestMap = new HashMap(); - private View mHeaderView; - private ImageView mUserIconView; - private TextView mUserNameView; private List mVisibleApps; private List mUserApps; - - private Dialog mEditUserInfoDialog; - - private EditUserPhotoController mEditUserPhotoController; - private Bitmap mSavedPhoto; + private AsyncTask mAppLoadingTask; private BroadcastReceiver mUserBackgrounding = new BroadcastReceiver() { @Override @@ -153,12 +126,19 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen // have been scheduled during user startup. if (mAppListChanged) { if (DEBUG) Log.d(TAG, "User backgrounding, update app list"); - updateUserAppList(); + applyUserAppsStates(); if (DEBUG) Log.d(TAG, "User backgrounding, done updating app list"); } } }; + private BroadcastReceiver mPackageObserver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + onPackageChanged(intent); + } + }; + static class SelectableAppInfo { String packageName; CharSequence appName; @@ -177,10 +157,9 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen private boolean hasSettings; private OnClickListener listener; private ArrayList restrictions; - boolean panelOpen; + private boolean panelOpen; private boolean immutable; - List childPreferences = new ArrayList(); - private SelectableAppInfo appInfo; + private List mChildren = new ArrayList(); private final ColorFilter grayscaleFilter; AppRestrictionsPreference(Context context, OnClickListener listener) { @@ -221,10 +200,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen return immutable; } - void setSelectableAppInfo(SelectableAppInfo appInfo) { - this.appInfo = appInfo; - } - RestrictionEntry getRestriction(String key) { if (restrictions == null) return null; for (RestrictionEntry entry : restrictions) { @@ -239,6 +214,18 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen return restrictions; } + boolean isPanelOpen() { + return panelOpen; + } + + void setPanelOpen(boolean open) { + panelOpen = open; + } + + List getChildren() { + return mChildren; + } + @Override protected void onBindView(View view) { super.onBindView(view); @@ -257,139 +244,190 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen ViewGroup widget = (ViewGroup) view.findViewById(android.R.id.widget_frame); widget.setEnabled(!isImmutable()); if (widget.getChildCount() > 0) { - final Switch switchView = (Switch) widget.getChildAt(0); - switchView.setEnabled(!isImmutable()); - switchView.setTag(this); - switchView.setOnCheckedChangeListener(new OnCheckedChangeListener() { + final Switch toggle = (Switch) widget.getChildAt(0); + toggle.setEnabled(!isImmutable()); + toggle.setTag(this); + toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - listener.onClick(switchView); + listener.onClick(toggle); } }); } } } - @Override - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - + protected void init(Bundle icicle) { if (icicle != null) { mUser = new UserHandle(icicle.getInt(EXTRA_USER_ID)); - mSavedPhoto = (Bitmap) icicle.getParcelable(KEY_SAVED_PHOTO); } else { Bundle args = getArguments(); - - if (args.containsKey(EXTRA_USER_ID)) { - mUser = new UserHandle(args.getInt(EXTRA_USER_ID)); + if (args != null) { + if (args.containsKey(EXTRA_USER_ID)) { + mUser = new UserHandle(args.getInt(EXTRA_USER_ID)); + } + mNewUser = args.getBoolean(EXTRA_NEW_USER, false); } - mNewUser = args.getBoolean(EXTRA_NEW_USER, false); } - mPackageManager = getActivity().getPackageManager(); - mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); - addPreferencesFromResource(R.xml.app_restrictions); - mAppList = getPreferenceScreen(); - setHasOptionsMenu(true); - } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - if (mHeaderView == null) { - mHeaderView = LayoutInflater.from(getActivity()).inflate( - R.layout.user_info_header, null); - ((ViewGroup) getListView().getParent()).addView(mHeaderView, 0); - mHeaderView.setOnClickListener(this); - mUserIconView = (ImageView) mHeaderView.findViewById(android.R.id.icon); - mUserNameView = (TextView) mHeaderView.findViewById(android.R.id.title); - getListView().setFastScrollEnabled(true); + if (mUser == null) { + mUser = android.os.Process.myUserHandle(); } - // This is going to bind the preferences. - super.onActivityCreated(savedInstanceState); + + mPackageManager = getActivity().getPackageManager(); + mIPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); + mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); + mRestrictedProfile = mUserManager.getUserInfo(mUser.getIdentifier()).isRestricted(); + try { + mSysPackageInfo = mPackageManager.getPackageInfo("android", + PackageManager.GET_SIGNATURES); + } catch (NameNotFoundException nnfe) { + // ? + } + addPreferencesFromResource(R.xml.app_restrictions); + mAppList = getAppPreferenceGroup(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(EXTRA_USER_ID, mUser.getIdentifier()); - if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing() - && mEditUserPhotoController != null) { - outState.putParcelable(KEY_SAVED_PHOTO, - mEditUserPhotoController.getNewUserPhotoBitmap()); + } + + @Override + public void onResume() { + super.onResume(); + + getActivity().registerReceiver(mUserBackgrounding, + new IntentFilter(Intent.ACTION_USER_BACKGROUND)); + IntentFilter packageFilter = new IntentFilter(); + packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); + packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); + packageFilter.addDataScheme("package"); + getActivity().registerReceiver(mPackageObserver, packageFilter); + + mAppListChanged = false; + if (mAppLoadingTask == null || mAppLoadingTask.getStatus() == AsyncTask.Status.FINISHED) { + mAppLoadingTask = new AppLoadingTask().execute((Void[]) null); } } - public void onResume() { - super.onResume(); - getActivity().registerReceiver(mUserBackgrounding, - new IntentFilter(Intent.ACTION_USER_BACKGROUND)); - mAppListChanged = false; - new AppLoadingTask().execute((Void[]) null); - - UserInfo info = mUserManager.getUserInfo(mUser.getIdentifier()); - ((TextView) mHeaderView.findViewById(android.R.id.title)).setText(info.name); - ((ImageView) mHeaderView.findViewById(android.R.id.icon)).setImageDrawable( - getCircularUserIcon()); - } - + @Override public void onPause() { super.onPause(); mNewUser = false; getActivity().unregisterReceiver(mUserBackgrounding); + getActivity().unregisterReceiver(mPackageObserver); if (mAppListChanged) { new Thread() { public void run() { - updateUserAppList(); + applyUserAppsStates(); } }.start(); } } - private Drawable getCircularUserIcon() { + private void onPackageChanged(Intent intent) { + String action = intent.getAction(); + String packageName = intent.getData().getSchemeSpecificPart(); + // Package added, check if the preference needs to be enabled + AppRestrictionsPreference pref = (AppRestrictionsPreference) + findPreference(getKeyForPackage(packageName)); + if (pref == null) return; + + if ((Intent.ACTION_PACKAGE_ADDED.equals(action) && pref.isChecked()) + || (Intent.ACTION_PACKAGE_REMOVED.equals(action) && !pref.isChecked())) { + pref.setEnabled(true); + } + } + + protected PreferenceGroup getAppPreferenceGroup() { + return getPreferenceScreen(); + } + + protected Drawable getCircularUserIcon() { Bitmap userIcon = mUserManager.getUserIcon(mUser.getIdentifier()); + if (userIcon == null) { + return null; + } CircleFramedDrawable circularIcon = CircleFramedDrawable.getInstance(this.getActivity(), userIcon); return circularIcon; } - private void updateUserAppList() { - IPackageManager ipm = IPackageManager.Stub.asInterface( - ServiceManager.getService("package")); + protected void clearSelectedApps() { + mSelectedPackages.clear(); + } + + private void applyUserAppsStates() { final int userId = mUser.getIdentifier(); - if (!mUserManager.getUserInfo(userId).isRestricted()) { - Log.e(TAG, "Cannot apply application restrictions on a regular user!"); + if (!mUserManager.getUserInfo(userId).isRestricted() && userId != UserHandle.myUserId()) { + Log.e(TAG, "Cannot apply application restrictions on another user!"); return; } for (Map.Entry entry : mSelectedPackages.entrySet()) { String packageName = entry.getKey(); - if (entry.getValue()) { - // Enable selected apps - try { - ApplicationInfo info = ipm.getApplicationInfo(packageName, 0, userId); - if (info == null || info.enabled == false) { - ipm.installExistingPackageAsUser(packageName, mUser.getIdentifier()); - if (DEBUG) { - Log.d(TAG, "Installing " + packageName); - } + boolean enabled = entry.getValue(); + applyUserAppState(packageName, enabled); + } + } + + private void applyUserAppState(String packageName, boolean enabled) { + final int userId = mUser.getIdentifier(); + if (enabled) { + // Enable selected apps + try { + ApplicationInfo info = mIPm.getApplicationInfo(packageName, + PackageManager.GET_UNINSTALLED_PACKAGES, userId); + if (info == null || info.enabled == false + || (info.flags&ApplicationInfo.FLAG_INSTALLED) == 0) { + mIPm.installExistingPackageAsUser(packageName, mUser.getIdentifier()); + if (DEBUG) { + Log.d(TAG, "Installing " + packageName); } - } catch (RemoteException re) { } - } else { - // Blacklist all other apps, system or downloaded - try { - ApplicationInfo info = ipm.getApplicationInfo(packageName, 0, userId); - if (info != null) { - ipm.deletePackageAsUser(entry.getKey(), null, mUser.getIdentifier(), + if (info != null && (info.flags&ApplicationInfo.FLAG_BLOCKED) != 0 + && (info.flags&ApplicationInfo.FLAG_INSTALLED) != 0) { + disableUiForPackage(packageName); + mIPm.setApplicationBlockedSettingAsUser(packageName, false, userId); + if (DEBUG) { + Log.d(TAG, "Unblocking " + packageName); + } + } + } catch (RemoteException re) { + } + } else { + // Blacklist all other apps, system or downloaded + try { + ApplicationInfo info = mIPm.getApplicationInfo(packageName, 0, userId); + if (info != null) { + if (mRestrictedProfile) { + mIPm.deletePackageAsUser(packageName, null, mUser.getIdentifier(), PackageManager.DELETE_SYSTEM_APP); if (DEBUG) { Log.d(TAG, "Uninstalling " + packageName); } + } else { + disableUiForPackage(packageName); + mIPm.setApplicationBlockedSettingAsUser(packageName, true, userId); + if (DEBUG) { + Log.d(TAG, "Blocking " + packageName); + } } - } catch (RemoteException re) { } + } catch (RemoteException re) { } } } + private void disableUiForPackage(String packageName) { + AppRestrictionsPreference pref = (AppRestrictionsPreference) findPreference( + getKeyForPackage(packageName)); + if (pref != null) { + pref.setEnabled(false); + } + } + private boolean isSystemPackage(String packageName) { try { final PackageInfo pi = mPackageManager.getPackageInfo(packageName, 0); @@ -441,16 +479,27 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen if (getActivity() == null) return; final PackageManager pm = mPackageManager; List launchableApps = pm.queryIntentActivities(intent, - PackageManager.GET_DISABLED_COMPONENTS); + PackageManager.GET_DISABLED_COMPONENTS | PackageManager.GET_UNINSTALLED_PACKAGES); for (ResolveInfo app : launchableApps) { if (app.activityInfo != null && app.activityInfo.applicationInfo != null) { + final String packageName = app.activityInfo.packageName; int flags = app.activityInfo.applicationInfo.flags; if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0 || (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { // System app // Skip excluded packages - if (excludePackages.contains(app.activityInfo.packageName)) continue; - + if (excludePackages.contains(packageName)) continue; + int enabled = pm.getApplicationEnabledSetting(packageName); + if (enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED + || enabled == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) { + // Check if the app is already enabled for the target user + ApplicationInfo targetUserAppInfo = getAppInfoForUser(packageName, + 0, mUser); + if (targetUserAppInfo == null + || (targetUserAppInfo.flags&ApplicationInfo.FLAG_INSTALLED) == 0) { + continue; + } + } SelectableAppInfo info = new SelectableAppInfo(); info.packageName = app.activityInfo.packageName; info.appName = app.activityInfo.applicationInfo.loadLabel(pm); @@ -464,6 +513,16 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen } } + private ApplicationInfo getAppInfoForUser(String packageName, int flags, UserHandle user) { + try { + ApplicationInfo targetUserAppInfo = mIPm.getApplicationInfo(packageName, flags, + user.getIdentifier()); + return targetUserAppInfo; + } catch (RemoteException re) { + return null; + } + } + private class AppLoadingTask extends AsyncTask { @Override @@ -488,7 +547,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen final Context context = getActivity(); if (context == null) return; final PackageManager pm = mPackageManager; - IPackageManager ipm = AppGlobals.getPackageManager(); + final IPackageManager ipm = mIPm; final HashSet excludePackages = new HashSet(); addSystemImes(excludePackages); @@ -502,8 +561,12 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen Intent widgetIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE); addSystemApps(mVisibleApps, widgetIntent, excludePackages); - List installedApps = pm.getInstalledApplications(0); + List installedApps = pm.getInstalledApplications( + PackageManager.GET_UNINSTALLED_PACKAGES); for (ApplicationInfo app : installedApps) { + // If it's not installed, skip + if ((app.flags & ApplicationInfo.FLAG_INSTALLED) == 0) continue; + if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && (app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0) { // Downloaded app @@ -519,7 +582,8 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen // If it's a system app that requires an account and doesn't see restricted // accounts, mark for removal. It might get shown in the UI if it has an icon // but will still be marked as false and immutable. - if (pi.requiredAccountType != null && pi.restrictedAccountType == null) { + if (mRestrictedProfile + && pi.requiredAccountType != null && pi.restrictedAccountType == null) { mSelectedPackages.put(app.packageName, false); } } catch (NameNotFoundException re) { @@ -527,15 +591,18 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen } } + // Get the list of apps already installed for the user mUserApps = null; try { mUserApps = ipm.getInstalledApplications( - 0, mUser.getIdentifier()).getList(); + PackageManager.GET_UNINSTALLED_PACKAGES, mUser.getIdentifier()).getList(); } catch (RemoteException re) { } if (mUserApps != null) { for (ApplicationInfo app : mUserApps) { + if ((app.flags & ApplicationInfo.FLAG_INSTALLED) == 0) continue; + if ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && (app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0) { // Downloaded app @@ -548,6 +615,8 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen } } } + + // Sort the list of visible apps Collections.sort(mVisibleApps, new AppLabelComparator()); // Remove dupes @@ -576,11 +645,25 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen } } + private boolean isPlatformSigned(PackageInfo pi) { + return (pi != null && pi.signatures != null && + mSysPackageInfo.signatures[0].equals(pi.signatures[0])); + } + + private boolean isAppEnabledForUser(PackageInfo pi) { + if (pi == null) return false; + final int flags = pi.applicationInfo.flags; + // Return true if it is installed and not blocked + return ((flags&ApplicationInfo.FLAG_INSTALLED) != 0 + && (flags&ApplicationInfo.FLAG_BLOCKED) == 0); + } + private void populateApps() { final Context context = getActivity(); if (context == null) return; final PackageManager pm = mPackageManager; - IPackageManager ipm = AppGlobals.getPackageManager(); + final IPackageManager ipm = mIPm; + mAppList.removeAll(); Intent restrictionsIntent = new Intent(Intent.ACTION_GET_RESTRICTION_ENTRIES); final List receivers = pm.queryBroadcastReceivers(restrictionsIntent, 0); @@ -599,39 +682,39 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen p.setSummary(context.getString(R.string.user_restrictions_controlled_by, app.masterEntry.activityName)); } - p.setKey(PKG_PREFIX + packageName); + p.setKey(getKeyForPackage(packageName)); p.setSettingsEnabled(hasSettings || isSettingsApp); p.setPersistent(false); p.setOnPreferenceChangeListener(this); p.setOnPreferenceClickListener(this); PackageInfo pi = null; try { - pi = pm.getPackageInfo(packageName, 0); - } catch (NameNotFoundException re) { - try { - pi = ipm.getPackageInfo(packageName, 0, mUser.getIdentifier()); - } catch (RemoteException e) { - } + pi = ipm.getPackageInfo(packageName, + PackageManager.GET_UNINSTALLED_PACKAGES + | PackageManager.GET_SIGNATURES, mUser.getIdentifier()); + } catch (RemoteException e) { } - if (pi != null && pi.requiredForAllUsers) { + if (pi != null && (pi.requiredForAllUsers || isPlatformSigned(pi))) { p.setChecked(true); p.setImmutable(true); // If the app is required and has no restrictions, skip showing it if (!hasSettings && !isSettingsApp) continue; // Get and populate the defaults, since the user is not going to be // able to toggle this app ON (it's ON by default and immutable). + // Only do this for restricted profiles, not single-user restrictions if (hasSettings) { - requestRestrictionsForApp(packageName, p); + requestRestrictionsForApp(packageName, p, false); } - } else if (!mNewUser && appInfoListHasPackage(mUserApps, packageName)) { + } else if (!mNewUser && isAppEnabledForUser(pi)) { p.setChecked(true); } - if (pi.requiredAccountType != null && pi.restrictedAccountType == null) { + if (mRestrictedProfile + && pi.requiredAccountType != null && pi.restrictedAccountType == null) { p.setChecked(false); p.setImmutable(true); p.setSummary(R.string.app_not_supported_in_limited); } - if (pi.restrictedAccountType != null) { + if (mRestrictedProfile && pi.restrictedAccountType != null) { p.setSummary(R.string.app_sees_restricted_accounts); } if (app.masterEntry != null) { @@ -644,7 +727,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen } else { p.setOrder(MAX_APP_RESTRICTIONS * (i + 2)); } - p.setSelectableAppInfo(app); mSelectedPackages.put(packageName, p.isChecked()); mAppListChanged = true; i++; @@ -654,10 +736,14 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen // to avoid taking the hit in onPause(), which can cause race conditions on user switch. if (mNewUser && mFirstTime) { mFirstTime = false; - updateUserAppList(); + applyUserAppsStates(); } } + private String getKeyForPackage(String packageName) { + return PKG_PREFIX + packageName; + } + private class AppLabelComparator implements Comparator { @Override @@ -677,15 +763,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen return false; } - private boolean appInfoListHasPackage(List apps, String packageName) { - for (ApplicationInfo info : apps) { - if (info.packageName.equals(packageName)) { - return true; - } - } - return false; - } - private void updateAllEntries(String prefKey, boolean checked) { for (int i = 0; i < mAppList.getPreferenceCount(); i++) { Preference pref = mAppList.getPreference(i); @@ -699,12 +776,10 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen @Override public void onClick(View v) { - if (v == mHeaderView) { - showDialog(DIALOG_ID_EDIT_USER_INFO); - } else if (v.getTag() instanceof AppRestrictionsPreference) { + if (v.getTag() instanceof AppRestrictionsPreference) { AppRestrictionsPreference pref = (AppRestrictionsPreference) v.getTag(); if (v.getId() == R.id.app_restrictions_settings) { - toggleAppPanel(pref); + onAppSettingsIconClicked(pref); } else if (!pref.isImmutable()) { pref.setChecked(!pref.isChecked()); final String packageName = pref.getKey().substring(PKG_PREFIX.length()); @@ -712,9 +787,13 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen if (pref.isChecked() && pref.hasSettings && pref.restrictions == null) { // The restrictions have not been initialized, get and save them - requestRestrictionsForApp(packageName, pref); + requestRestrictionsForApp(packageName, pref, false); } mAppListChanged = true; + // If it's not a restricted profile, apply the changes immediately + if (!mRestrictedProfile) { + applyUserAppState(packageName, pref.isChecked()); + } updateAllEntries(pref.getKey(), pref.isChecked()); } } @@ -746,8 +825,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen listPref.setSummary(readable); break; case RestrictionEntry.TYPE_MULTI_SELECT: - MultiSelectListPreference msListPref = - (MultiSelectListPreference) preference; Set set = (Set) newValue; String [] selectedValues = new String[set.size()]; set.toArray(selectedValues); @@ -771,13 +848,17 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen return true; } - private void toggleAppPanel(AppRestrictionsPreference preference) { + private void removeRestrictionsForApp(AppRestrictionsPreference preference) { + for (Preference p : preference.mChildren) { + mAppList.removePreference(p); + } + preference.mChildren.clear(); + } + + private void onAppSettingsIconClicked(AppRestrictionsPreference preference) { if (preference.getKey().startsWith(PKG_PREFIX)) { - if (preference.panelOpen) { - for (Preference p : preference.childPreferences) { - mAppList.removePreference(p); - } - preference.childPreferences.clear(); + if (preference.isPanelOpen()) { + removeRestrictionsForApp(preference); } else { String packageName = preference.getKey().substring(PKG_PREFIX.length()); if (packageName.equals(getActivity().getPackageName())) { @@ -786,15 +867,22 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen getActivity(), mUser); onRestrictionsReceived(preference, packageName, restrictions); } else { - requestRestrictionsForApp(packageName, preference); + requestRestrictionsForApp(packageName, preference, true /*invoke if custom*/); } } - preference.panelOpen = !preference.panelOpen; + preference.setPanelOpen(!preference.isPanelOpen()); } } + /** + * Send a broadcast to the app to query its restrictions + * @param packageName package name of the app with restrictions + * @param preference the preference item for the app toggle + * @param invokeIfCustom whether to directly launch any custom activity that is returned + * for the app. + */ private void requestRestrictionsForApp(String packageName, - AppRestrictionsPreference preference) { + AppRestrictionsPreference preference, boolean invokeIfCustom) { Bundle oldEntries = mUserManager.getApplicationRestrictions(packageName, mUser); Intent intent = new Intent(Intent.ACTION_GET_RESTRICTION_ENTRIES); @@ -802,7 +890,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen intent.putExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE, oldEntries); intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); getActivity().sendOrderedBroadcast(intent, null, - new RestrictionsResultReceiver(packageName, preference), + new RestrictionsResultReceiver(packageName, preference, invokeIfCustom), null, Activity.RESULT_OK, null, null); } @@ -811,11 +899,14 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen private static final String CUSTOM_RESTRICTIONS_INTENT = Intent.EXTRA_RESTRICTIONS_INTENT; String packageName; AppRestrictionsPreference preference; + boolean invokeIfCustom; - RestrictionsResultReceiver(String packageName, AppRestrictionsPreference preference) { + RestrictionsResultReceiver(String packageName, AppRestrictionsPreference preference, + boolean invokeIfCustom) { super(); this.packageName = packageName; this.preference = preference; + this.invokeIfCustom = invokeIfCustom; } @Override @@ -826,37 +917,26 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen Intent restrictionsIntent = (Intent) results.getParcelable(CUSTOM_RESTRICTIONS_INTENT); if (restrictions != null && restrictionsIntent == null) { onRestrictionsReceived(preference, packageName, restrictions); - mUserManager.setApplicationRestrictions(packageName, - RestrictionUtils.restrictionsToBundle(restrictions), mUser); - } else if (restrictionsIntent != null) { - final Intent customIntent = restrictionsIntent; - if (restrictions != null) { - customIntent.putExtra(Intent.EXTRA_RESTRICTIONS_BUNDLE, - RestrictionUtils.restrictionsToBundle(restrictions)); + if (mRestrictedProfile) { + mUserManager.setApplicationRestrictions(packageName, + RestrictionUtils.restrictionsToBundle(restrictions), mUser); } - Preference p = new Preference(context); - p.setTitle(R.string.app_restrictions_custom_label); - p.setOnPreferenceClickListener(new OnPreferenceClickListener() { - @Override - public boolean onPreferenceClick(Preference preference) { - int requestCode = generateCustomActivityRequestCode( - RestrictionsResultReceiver.this.preference); - AppRestrictionsFragment.this.startActivityForResult( - customIntent, requestCode); - return false; - } - }); - p.setPersistent(false); - p.setOrder(preference.getOrder() + 1); - preference.childPreferences.add(p); - mAppList.addPreference(p); + } else if (restrictionsIntent != null) { preference.setRestrictions(restrictions); + if (invokeIfCustom && AppRestrictionsFragment.this.isResumed()) { + int requestCode = generateCustomActivityRequestCode( + RestrictionsResultReceiver.this.preference); + AppRestrictionsFragment.this.startActivityForResult( + restrictionsIntent, requestCode); + } } } } private void onRestrictionsReceived(AppRestrictionsPreference preference, String packageName, ArrayList restrictions) { + // Remove any earlier restrictions + removeRestrictionsForApp(preference); // Non-custom-activity case - expand the restrictions in-place final Context context = preference.getContext(); int count = 1; @@ -907,7 +987,7 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen + entry.getKey()); mAppList.addPreference(p); p.setOnPreferenceChangeListener(AppRestrictionsFragment.this); - preference.childPreferences.add(p); + preference.mChildren.add(p); count++; } } @@ -936,11 +1016,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing() - && mEditUserPhotoController.onActivityResult(requestCode, resultCode, data)) { - return; - } - AppRestrictionsPreference pref = mCustomRequestMap.get(requestCode); if (pref == null) { Log.w(TAG, "Unknown requestCode " + requestCode); @@ -961,7 +1036,6 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen // If there's a valid result, persist it to the user manager. mUserManager.setApplicationRestrictions(packageName, bundle, mUser); } - toggleAppPanel(pref); } // Remove request from the map mCustomRequestMap.remove(requestCode); @@ -982,327 +1056,17 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen if (preference.getKey().startsWith(PKG_PREFIX)) { AppRestrictionsPreference arp = (AppRestrictionsPreference) preference; if (!arp.isImmutable()) { - arp.setChecked(!arp.isChecked()); - mSelectedPackages.put(arp.getKey().substring(PKG_PREFIX.length()), arp.isChecked()); - updateAllEntries(arp.getKey(), arp.isChecked()); + final String packageName = arp.getKey().substring(PKG_PREFIX.length()); + final boolean newEnabledState = !arp.isChecked(); + arp.setChecked(newEnabledState); + mSelectedPackages.put(packageName, newEnabledState); + updateAllEntries(arp.getKey(), newEnabledState); mAppListChanged = true; + applyUserAppState(packageName, newEnabledState); } return true; } return false; } - @Override - public Dialog onCreateDialog(int dialogId) { - if (dialogId == DIALOG_ID_EDIT_USER_INFO) { - if (mEditUserInfoDialog != null) { - return mEditUserInfoDialog; - } - - LayoutInflater inflater = getActivity().getLayoutInflater(); - View content = inflater.inflate(R.layout.edit_user_info_dialog_content, null); - - UserInfo info = mUserManager.getUserInfo(mUser.getIdentifier()); - - final EditText userNameView = (EditText) content.findViewById(R.id.user_name); - userNameView.setText(info.name); - - final ImageView userPhotoView = (ImageView) content.findViewById(R.id.user_photo); - Drawable drawable = null; - if (mSavedPhoto != null) { - drawable = CircleFramedDrawable.getInstance(getActivity(), mSavedPhoto); - } else { - drawable = mUserIconView.getDrawable(); - if (drawable == null) { - drawable = getCircularUserIcon(); - } - } - userPhotoView.setImageDrawable(drawable); - - mEditUserPhotoController = new EditUserPhotoController(this, userPhotoView, - mSavedPhoto, drawable); - - mEditUserInfoDialog = new AlertDialog.Builder(getActivity()) - .setTitle(R.string.profile_info_settings_title) - .setIconAttribute(R.drawable.ic_settings_multiuser) - .setView(content) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) { - // Update the name if changed. - CharSequence userName = userNameView.getText(); - if (!TextUtils.isEmpty(userName)) { - CharSequence oldUserName = mUserNameView.getText(); - if (oldUserName == null - || !userName.toString().equals(oldUserName.toString())) { - ((TextView) mHeaderView.findViewById(android.R.id.title)) - .setText(userName.toString()); - mUserManager.setUserName(mUser.getIdentifier(), - userName.toString()); - } - } - // Update the photo if changed. - Drawable drawable = mEditUserPhotoController.getNewUserPhotoDrawable(); - Bitmap bitmap = mEditUserPhotoController.getNewUserPhotoBitmap(); - if (drawable != null && bitmap != null - && !drawable.equals(mUserIconView.getDrawable())) { - mUserIconView.setImageDrawable(drawable); - new AsyncTask() { - @Override - protected Void doInBackground(Void... params) { - mUserManager.setUserIcon(mUser.getIdentifier(), - mEditUserPhotoController.getNewUserPhotoBitmap()); - return null; - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); - } - removeDialog(DIALOG_ID_EDIT_USER_INFO); - } - clearEditUserInfoDialog(); - } - }) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - clearEditUserInfoDialog(); - } - }) - .create(); - - // Make sure the IME is up. - mEditUserInfoDialog.getWindow().setSoftInputMode( - WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); - - return mEditUserInfoDialog; - } - - return null; - } - - private void clearEditUserInfoDialog() { - mEditUserInfoDialog = null; - mSavedPhoto = null; - } - - private static class EditUserPhotoController { - private static final int POPUP_LIST_ITEM_ID_CHOOSE_PHOTO = 1; - private static final int POPUP_LIST_ITEM_ID_TAKE_PHOTO = 2; - - // It seems that this class generates custom request codes and they may - // collide with ours, these values are very unlikely to have a conflict. - private static final int REQUEST_CODE_CHOOSE_PHOTO = Integer.MAX_VALUE; - private static final int REQUEST_CODE_TAKE_PHOTO = Integer.MAX_VALUE - 1; - private static final int REQUEST_CODE_CROP_PHOTO = Integer.MAX_VALUE - 2; - - private static final String CROP_PICTURE_FILE_NAME = "CropEditUserPhoto.jpg"; - private static final String TAKE_PICTURE_FILE_NAME = "TakeEditUserPhoto2.jpg"; - - private final int mPhotoSize; - - private final Context mContext; - private final Fragment mFragment; - private final ImageView mImageView; - - private final Uri mCropPictureUri; - private final Uri mTakePictureUri; - - private Bitmap mNewUserPhotoBitmap; - private Drawable mNewUserPhotoDrawable; - - public EditUserPhotoController(Fragment fragment, ImageView view, - Bitmap bitmap, Drawable drawable) { - mContext = view.getContext(); - mFragment = fragment; - mImageView = view; - mCropPictureUri = createTempImageUri(mContext, CROP_PICTURE_FILE_NAME); - mTakePictureUri = createTempImageUri(mContext, TAKE_PICTURE_FILE_NAME); - mPhotoSize = getPhotoSize(mContext); - mImageView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - showUpdatePhotoPopup(); - } - }); - mNewUserPhotoBitmap = bitmap; - mNewUserPhotoDrawable = drawable; - } - - public boolean onActivityResult(int requestCode, int resultCode, final Intent data) { - if (resultCode != Activity.RESULT_OK) { - return false; - } - switch (requestCode) { - case REQUEST_CODE_CHOOSE_PHOTO: - case REQUEST_CODE_CROP_PHOTO: { - new AsyncTask() { - @Override - protected Bitmap doInBackground(Void... params) { - return BitmapFactory.decodeFile(mCropPictureUri.getPath()); - } - @Override - protected void onPostExecute(Bitmap bitmap) { - mNewUserPhotoBitmap = bitmap; - mNewUserPhotoDrawable = CircleFramedDrawable - .getInstance(mImageView.getContext(), mNewUserPhotoBitmap); - mImageView.setImageDrawable(mNewUserPhotoDrawable); - // Delete the files - not needed anymore. - new File(mCropPictureUri.getPath()).delete(); - new File(mTakePictureUri.getPath()).delete(); - } - }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); - } return true; - case REQUEST_CODE_TAKE_PHOTO: { - cropPhoto(); - } break; - } - return false; - } - - public Bitmap getNewUserPhotoBitmap() { - return mNewUserPhotoBitmap; - } - - public Drawable getNewUserPhotoDrawable() { - return mNewUserPhotoDrawable; - } - - private void showUpdatePhotoPopup() { - final boolean canTakePhoto = canTakePhoto(); - final boolean canChoosePhoto = canChoosePhoto(); - - if (!canTakePhoto && !canChoosePhoto) { - return; - } - - Context context = mImageView.getContext(); - final List items = new ArrayList(); - - if (canTakePhoto()) { - String title = mImageView.getContext().getString( R.string.user_image_take_photo); - AdapterItem item = new AdapterItem(title, POPUP_LIST_ITEM_ID_TAKE_PHOTO); - items.add(item); - } - - if (canChoosePhoto) { - String title = context.getString(R.string.user_image_choose_photo); - AdapterItem item = new AdapterItem(title, POPUP_LIST_ITEM_ID_CHOOSE_PHOTO); - items.add(item); - } - - final ListPopupWindow listPopupWindow = new ListPopupWindow(context); - - listPopupWindow.setAnchorView(mImageView); - listPopupWindow.setModal(true); - listPopupWindow.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED); - - ListAdapter adapter = new ArrayAdapter(context, - R.layout.edit_user_photo_popup_item, items); - listPopupWindow.setAdapter(adapter); - - final int width = Math.max(mImageView.getWidth(), context.getResources() - .getDimensionPixelSize(R.dimen.update_user_photo_popup_min_width)); - listPopupWindow.setWidth(width); - - listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - AdapterItem item = items.get(position); - switch (item.id) { - case POPUP_LIST_ITEM_ID_CHOOSE_PHOTO: { - choosePhoto(); - listPopupWindow.dismiss(); - } break; - case POPUP_LIST_ITEM_ID_TAKE_PHOTO: { - takePhoto(); - listPopupWindow.dismiss(); - } break; - } - } - }); - - listPopupWindow.show(); - } - - private boolean canTakePhoto() { - return mImageView.getContext().getPackageManager().queryIntentActivities( - new Intent(MediaStore.ACTION_IMAGE_CAPTURE), - PackageManager.MATCH_DEFAULT_ONLY).size() > 0; - } - - private boolean canChoosePhoto() { - Intent intent = new Intent(Intent.ACTION_GET_CONTENT); - intent.setType("image/*"); - return mImageView.getContext().getPackageManager().queryIntentActivities( - intent, 0).size() > 0; - } - - private void takePhoto() { - Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - intent.putExtra(MediaStore.EXTRA_OUTPUT, mTakePictureUri); - mFragment.startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO); - } - - private void choosePhoto() { - Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); - intent.setType("image/*"); - intent.putExtra(MediaStore.EXTRA_OUTPUT, mCropPictureUri); - appendCropExtras(intent); - mFragment.startActivityForResult(intent, REQUEST_CODE_CHOOSE_PHOTO); - } - - private void cropPhoto() { - Intent intent = new Intent("com.android.camera.action.CROP"); - intent.setDataAndType(mTakePictureUri, "image/*"); - intent.putExtra(MediaStore.EXTRA_OUTPUT, mCropPictureUri); - appendCropExtras(intent); - mFragment.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO); - } - - private void appendCropExtras(Intent intent) { - intent.putExtra("crop", "true"); - intent.putExtra("scale", true); - intent.putExtra("scaleUpIfNeeded", true); - intent.putExtra("aspectX", 1); - intent.putExtra("aspectY", 1); - intent.putExtra("outputX", mPhotoSize); - intent.putExtra("outputY", mPhotoSize); - } - - private static int getPhotoSize(Context context) { - Cursor cursor = context.getContentResolver().query( - DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI, - new String[]{DisplayPhoto.DISPLAY_MAX_DIM}, null, null, null); - try { - cursor.moveToFirst(); - return cursor.getInt(0); - } finally { - cursor.close(); - } - } - - private static Uri createTempImageUri(Context context, String fileName) { - File folder = context.getExternalCacheDir(); - folder.mkdirs(); - File fullPath = new File(folder, fileName); - fullPath.delete(); - return Uri.fromFile(fullPath.getAbsoluteFile()); - } - - private static final class AdapterItem { - final String title; - final int id; - - public AdapterItem(String title, int id) { - this.title = title; - this.id = id; - } - - @Override - public String toString() { - return title; - } - } - } } diff --git a/src/com/android/settings/users/RestrictedProfileSettings.java b/src/com/android/settings/users/RestrictedProfileSettings.java new file mode 100644 index 00000000000..c29353616f8 --- /dev/null +++ b/src/com/android/settings/users/RestrictedProfileSettings.java @@ -0,0 +1,546 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.users; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.Fragment; +import android.content.ClipData; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.UserInfo; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.UserHandle; +import android.provider.MediaStore; +import android.provider.ContactsContract.DisplayPhoto; +import android.support.v4.content.FileProvider; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListAdapter; +import android.widget.ListPopupWindow; +import android.widget.TextView; + +import com.android.settings.R; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +public class RestrictedProfileSettings extends AppRestrictionsFragment { + + private static final String KEY_SAVED_PHOTO = "pending_photo"; + private static final String KEY_AWAITING_RESULT = "awaiting_result"; + private static final int DIALOG_ID_EDIT_USER_INFO = 1; + public static final String FILE_PROVIDER_AUTHORITY = "com.android.settings.files"; + + private View mHeaderView; + private ImageView mUserIconView; + private TextView mUserNameView; + + private Dialog mEditUserInfoDialog; + private EditUserPhotoController mEditUserPhotoController; + private Bitmap mSavedPhoto; + private boolean mWaitingForActivityResult; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + + if (icicle != null) { + mSavedPhoto = (Bitmap) icicle.getParcelable(KEY_SAVED_PHOTO); + mWaitingForActivityResult = icicle.getBoolean(KEY_AWAITING_RESULT, false); + } + + init(icicle); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + if (mHeaderView == null) { + mHeaderView = LayoutInflater.from(getActivity()).inflate( + R.layout.user_info_header, null); + ((ViewGroup) getListView().getParent()).addView(mHeaderView, 0); + mHeaderView.setOnClickListener(this); + mUserIconView = (ImageView) mHeaderView.findViewById(android.R.id.icon); + mUserNameView = (TextView) mHeaderView.findViewById(android.R.id.title); + getListView().setFastScrollEnabled(true); + } + // This is going to bind the preferences. + super.onActivityCreated(savedInstanceState); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing() + && mEditUserPhotoController != null) { + outState.putParcelable(KEY_SAVED_PHOTO, + mEditUserPhotoController.getNewUserPhotoBitmap()); + } + if (mWaitingForActivityResult) { + outState.putBoolean(KEY_AWAITING_RESULT, mWaitingForActivityResult); + } + } + + @Override + public void onResume() { + super.onResume(); + + // Check if user still exists + UserInfo info = getExistingUser(mUser); + if (info == null) { + finishFragment(); + } else { + ((TextView) mHeaderView.findViewById(android.R.id.title)).setText(info.name); + ((ImageView) mHeaderView.findViewById(android.R.id.icon)).setImageDrawable( + getCircularUserIcon()); + } + } + + private UserInfo getExistingUser(UserHandle thisUser) { + final List users = mUserManager.getUsers(true); // Only get non-dying + for (UserInfo user : users) { + if (user.id == thisUser.getIdentifier()) { + return user; + } + } + return null; + } + + @Override + public void startActivityForResult(Intent intent, int requestCode) { + mWaitingForActivityResult = true; + super.startActivityForResult(intent, requestCode); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + mWaitingForActivityResult = false; + + if (mEditUserInfoDialog != null && mEditUserInfoDialog.isShowing() + && mEditUserPhotoController.onActivityResult(requestCode, resultCode, data)) { + return; + } + } + + @Override + public void onClick(View view) { + if (view == mHeaderView) { + showDialog(DIALOG_ID_EDIT_USER_INFO); + } else { + super.onClick(view); // in AppRestrictionsFragment + } + } + + @Override + public Dialog onCreateDialog(int dialogId) { + if (dialogId == DIALOG_ID_EDIT_USER_INFO) { + if (mEditUserInfoDialog != null) { + return mEditUserInfoDialog; + } + + LayoutInflater inflater = getActivity().getLayoutInflater(); + View content = inflater.inflate(R.layout.edit_user_info_dialog_content, null); + + UserInfo info = mUserManager.getUserInfo(mUser.getIdentifier()); + + final EditText userNameView = (EditText) content.findViewById(R.id.user_name); + userNameView.setText(info.name); + + final ImageView userPhotoView = (ImageView) content.findViewById(R.id.user_photo); + Drawable drawable = null; + if (mSavedPhoto != null) { + drawable = CircleFramedDrawable.getInstance(getActivity(), mSavedPhoto); + } else { + drawable = mUserIconView.getDrawable(); + if (drawable == null) { + drawable = getCircularUserIcon(); + } + } + userPhotoView.setImageDrawable(drawable); + mEditUserPhotoController = new EditUserPhotoController(this, userPhotoView, + mSavedPhoto, drawable, mWaitingForActivityResult); + + mEditUserInfoDialog = new AlertDialog.Builder(getActivity()) + .setTitle(R.string.profile_info_settings_title) + .setIconAttribute(R.drawable.ic_settings_multiuser) + .setView(content) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) { + // Update the name if changed. + CharSequence userName = userNameView.getText(); + if (!TextUtils.isEmpty(userName)) { + CharSequence oldUserName = mUserNameView.getText(); + if (oldUserName == null + || !userName.toString().equals(oldUserName.toString())) { + ((TextView) mHeaderView.findViewById(android.R.id.title)) + .setText(userName.toString()); + mUserManager.setUserName(mUser.getIdentifier(), + userName.toString()); + } + } + // Update the photo if changed. + Drawable drawable = mEditUserPhotoController.getNewUserPhotoDrawable(); + Bitmap bitmap = mEditUserPhotoController.getNewUserPhotoBitmap(); + if (drawable != null && bitmap != null + && !drawable.equals(mUserIconView.getDrawable())) { + mUserIconView.setImageDrawable(drawable); + new AsyncTask() { + @Override + protected Void doInBackground(Void... params) { + mUserManager.setUserIcon(mUser.getIdentifier(), + mEditUserPhotoController.getNewUserPhotoBitmap()); + return null; + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); + } + removeDialog(DIALOG_ID_EDIT_USER_INFO); + } + clearEditUserInfoDialog(); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + clearEditUserInfoDialog(); + } + }) + .create(); + + // Make sure the IME is up. + mEditUserInfoDialog.getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + + return mEditUserInfoDialog; + } + + return null; + } + + private void clearEditUserInfoDialog() { + mEditUserInfoDialog = null; + mSavedPhoto = null; + } + + private static class EditUserPhotoController { + private static final int POPUP_LIST_ITEM_ID_CHOOSE_PHOTO = 1; + private static final int POPUP_LIST_ITEM_ID_TAKE_PHOTO = 2; + + // It seems that this class generates custom request codes and they may + // collide with ours, these values are very unlikely to have a conflict. + private static final int REQUEST_CODE_CHOOSE_PHOTO = 1; + private static final int REQUEST_CODE_TAKE_PHOTO = 2; + private static final int REQUEST_CODE_CROP_PHOTO = 3; + + private static final String CROP_PICTURE_FILE_NAME = "CropEditUserPhoto.jpg"; + private static final String TAKE_PICTURE_FILE_NAME = "TakeEditUserPhoto2.jpg"; + + private final int mPhotoSize; + + private final Context mContext; + private final Fragment mFragment; + private final ImageView mImageView; + + private final Uri mCropPictureUri; + private final Uri mTakePictureUri; + + private Bitmap mNewUserPhotoBitmap; + private Drawable mNewUserPhotoDrawable; + + public EditUserPhotoController(Fragment fragment, ImageView view, + Bitmap bitmap, Drawable drawable, boolean waiting) { + mContext = view.getContext(); + mFragment = fragment; + mImageView = view; + mCropPictureUri = createTempImageUri(mContext, CROP_PICTURE_FILE_NAME, !waiting); + mTakePictureUri = createTempImageUri(mContext, TAKE_PICTURE_FILE_NAME, !waiting); + mPhotoSize = getPhotoSize(mContext); + mImageView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + showUpdatePhotoPopup(); + } + }); + mNewUserPhotoBitmap = bitmap; + mNewUserPhotoDrawable = drawable; + } + + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != Activity.RESULT_OK) { + return false; + } + final Uri pictureUri = data != null && data.getData() != null + ? data.getData() : mTakePictureUri; + switch (requestCode) { + case REQUEST_CODE_CROP_PHOTO: + onPhotoCropped(pictureUri, true); + return true; + case REQUEST_CODE_TAKE_PHOTO: + case REQUEST_CODE_CHOOSE_PHOTO: + cropPhoto(pictureUri); + return true; + } + return false; + } + + public Bitmap getNewUserPhotoBitmap() { + return mNewUserPhotoBitmap; + } + + public Drawable getNewUserPhotoDrawable() { + return mNewUserPhotoDrawable; + } + + private void showUpdatePhotoPopup() { + final boolean canTakePhoto = canTakePhoto(); + final boolean canChoosePhoto = canChoosePhoto(); + + if (!canTakePhoto && !canChoosePhoto) { + return; + } + + Context context = mImageView.getContext(); + final List items = new ArrayList(); + + if (canTakePhoto()) { + String title = mImageView.getContext().getString( R.string.user_image_take_photo); + AdapterItem item = new AdapterItem(title, POPUP_LIST_ITEM_ID_TAKE_PHOTO); + items.add(item); + } + + if (canChoosePhoto) { + String title = context.getString(R.string.user_image_choose_photo); + AdapterItem item = new AdapterItem(title, POPUP_LIST_ITEM_ID_CHOOSE_PHOTO); + items.add(item); + } + + final ListPopupWindow listPopupWindow = new ListPopupWindow(context); + + listPopupWindow.setAnchorView(mImageView); + listPopupWindow.setModal(true); + listPopupWindow.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED); + + ListAdapter adapter = new ArrayAdapter(context, + R.layout.edit_user_photo_popup_item, items); + listPopupWindow.setAdapter(adapter); + + final int width = Math.max(mImageView.getWidth(), context.getResources() + .getDimensionPixelSize(R.dimen.update_user_photo_popup_min_width)); + listPopupWindow.setWidth(width); + + listPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + AdapterItem item = items.get(position); + switch (item.id) { + case POPUP_LIST_ITEM_ID_CHOOSE_PHOTO: { + choosePhoto(); + listPopupWindow.dismiss(); + } break; + case POPUP_LIST_ITEM_ID_TAKE_PHOTO: { + takePhoto(); + listPopupWindow.dismiss(); + } break; + } + } + }); + + listPopupWindow.show(); + } + + private boolean canTakePhoto() { + return mImageView.getContext().getPackageManager().queryIntentActivities( + new Intent(MediaStore.ACTION_IMAGE_CAPTURE), + PackageManager.MATCH_DEFAULT_ONLY).size() > 0; + } + + private boolean canChoosePhoto() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("image/*"); + return mImageView.getContext().getPackageManager().queryIntentActivities( + intent, 0).size() > 0; + } + + private void takePhoto() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + appendOutputExtra(intent, mTakePictureUri); + mFragment.startActivityForResult(intent, REQUEST_CODE_TAKE_PHOTO); + } + + private void choosePhoto() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); + intent.setType("image/*"); + appendOutputExtra(intent, mTakePictureUri); + mFragment.startActivityForResult(intent, REQUEST_CODE_CHOOSE_PHOTO); + } + + private void cropPhoto(Uri pictureUri) { + // TODO: Use a public intent, when there is one. + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(pictureUri, "image/*"); + appendOutputExtra(intent, mCropPictureUri); + appendCropExtras(intent); + if (intent.resolveActivity(mContext.getPackageManager()) != null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_CROP_PHOTO); + } else { + onPhotoCropped(pictureUri, false); + } + } + + private void appendOutputExtra(Intent intent, Uri pictureUri) { + intent.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); + intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION + | Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setClipData(ClipData.newRawUri(MediaStore.EXTRA_OUTPUT, pictureUri)); + } + + private void appendCropExtras(Intent intent) { + intent.putExtra("crop", "true"); + intent.putExtra("scale", true); + intent.putExtra("scaleUpIfNeeded", true); + intent.putExtra("aspectX", 1); + intent.putExtra("aspectY", 1); + intent.putExtra("outputX", mPhotoSize); + intent.putExtra("outputY", mPhotoSize); + } + + private void onPhotoCropped(final Uri data, final boolean cropped) { + new AsyncTask() { + @Override + protected Bitmap doInBackground(Void... params) { + if (cropped) { + try { + InputStream imageStream = mContext.getContentResolver() + .openInputStream(data); + return BitmapFactory.decodeStream(imageStream); + } catch (FileNotFoundException fe) { + return null; + } + } else { + // Scale and crop to a square aspect ratio + Bitmap croppedImage = Bitmap.createBitmap(mPhotoSize, mPhotoSize, + Config.ARGB_8888); + Canvas canvas = new Canvas(croppedImage); + Bitmap fullImage = null; + try { + InputStream imageStream = mContext.getContentResolver() + .openInputStream(data); + fullImage = BitmapFactory.decodeStream(imageStream); + } catch (FileNotFoundException fe) { + return null; + } + if (fullImage != null) { + final int squareSize = Math.min(fullImage.getWidth(), + fullImage.getHeight()); + final int left = (fullImage.getWidth() - squareSize) / 2; + final int top = (fullImage.getHeight() - squareSize) / 2; + Rect rectSource = new Rect(left, top, + left + squareSize, top + squareSize); + Rect rectDest = new Rect(0, 0, mPhotoSize, mPhotoSize); + Paint paint = new Paint(); + canvas.drawBitmap(fullImage, rectSource, rectDest, paint); + return croppedImage; + } else { + // Bah! Got nothin. + return null; + } + } + } + + @Override + protected void onPostExecute(Bitmap bitmap) { + if (bitmap != null) { + mNewUserPhotoBitmap = bitmap; + mNewUserPhotoDrawable = CircleFramedDrawable + .getInstance(mImageView.getContext(), mNewUserPhotoBitmap); + mImageView.setImageDrawable(mNewUserPhotoDrawable); + } + new File(mContext.getCacheDir(), TAKE_PICTURE_FILE_NAME).delete(); + new File(mContext.getCacheDir(), CROP_PICTURE_FILE_NAME).delete(); + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null); + } + + private static int getPhotoSize(Context context) { + Cursor cursor = context.getContentResolver().query( + DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI, + new String[]{DisplayPhoto.DISPLAY_MAX_DIM}, null, null, null); + try { + cursor.moveToFirst(); + return cursor.getInt(0); + } finally { + cursor.close(); + } + } + + private Uri createTempImageUri(Context context, String fileName, boolean purge) { + final File folder = context.getCacheDir(); + folder.mkdirs(); + final File fullPath = new File(folder, fileName); + if (purge) { + fullPath.delete(); + } + final Uri fileUri = + FileProvider.getUriForFile(context, FILE_PROVIDER_AUTHORITY, fullPath); + return fileUri; + } + + private static final class AdapterItem { + final String title; + final int id; + + public AdapterItem(String title, int id) { + this.title = title; + this.id = id; + } + + @Override + public String toString() { + return title; + } + } + } + +} diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index a19158f047b..bbae37d035c 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -16,6 +16,10 @@ package com.android.settings.users; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + import android.accounts.Account; import android.accounts.AccountManager; import android.app.Activity; @@ -42,8 +46,8 @@ import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.preference.Preference; -import android.preference.PreferenceActivity; import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceActivity; import android.preference.PreferenceGroup; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; @@ -59,19 +63,13 @@ import android.widget.SimpleAdapter; import com.android.internal.widget.LockPatternUtils; import com.android.settings.ChooseLockGeneric; -import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; import com.android.settings.OwnerInfoSettings; import com.android.settings.R; +import com.android.settings.RestrictedSettingsFragment; import com.android.settings.SelectableEditTextPreference; -import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class UserSettings extends SettingsPreferenceFragment +public class UserSettings extends RestrictedSettingsFragment implements OnPreferenceClickListener, OnClickListener, DialogInterface.OnDismissListener, Preference.OnPreferenceChangeListener { @@ -136,6 +134,9 @@ public class UserSettings extends SettingsPreferenceFragment private SparseArray mUserIcons = new SparseArray(); private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER; + public UserSettings() { + super(RestrictedSettingsFragment.RESTRICTIONS_PIN_SET); + } private Handler mHandler = new Handler() { @Override @@ -374,10 +375,10 @@ public class UserSettings extends SettingsPreferenceFragment UserInfo info = mUserManager.getUserInfo(userId); if (info.isRestricted() && mIsOwner) { Bundle extras = new Bundle(); - extras.putInt(AppRestrictionsFragment.EXTRA_USER_ID, userId); - extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser); + extras.putInt(RestrictedProfileSettings.EXTRA_USER_ID, userId); + extras.putBoolean(RestrictedProfileSettings.EXTRA_NEW_USER, newUser); ((PreferenceActivity) getActivity()).startPreferencePanel( - AppRestrictionsFragment.class.getName(), + RestrictedProfileSettings.class.getName(), extras, R.string.user_restrictions_title, null, null, 0); } else if (info.id == UserHandle.myUserId()) { diff --git a/src/com/android/settings/users/UserUtils.java b/src/com/android/settings/users/UserUtils.java index 1d16bcf6c9a..946d871eabf 100644 --- a/src/com/android/settings/users/UserUtils.java +++ b/src/com/android/settings/users/UserUtils.java @@ -16,6 +16,7 @@ package com.android.settings.users; +import android.content.Context; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Bitmap; @@ -24,10 +25,10 @@ import android.graphics.drawable.Drawable; import android.os.UserManager; public class UserUtils { - public static Drawable getUserIcon(UserManager um, UserInfo user, Resources res) { + public static Drawable getUserIcon(Context context, UserManager um, UserInfo user, Resources res) { if (user.iconPath == null) return null; Bitmap icon = um.getUserIcon(user.id); if (icon == null) return null; - return new BitmapDrawable(res, icon); + return CircleFramedDrawable.getInstance(context, icon); } } diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java index 5b732d66506..6ec79f387e9 100755 --- a/src/com/android/settings/wfd/WifiDisplaySettings.java +++ b/src/com/android/settings/wfd/WifiDisplaySettings.java @@ -19,6 +19,7 @@ package com.android.settings.wfd; import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; +import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -29,8 +30,15 @@ import android.hardware.display.DisplayManager; import android.hardware.display.WifiDisplay; import android.hardware.display.WifiDisplayStatus; import android.net.Uri; +import android.net.wifi.p2p.WifiP2pManager; +import android.net.wifi.p2p.WifiP2pManager.ActionListener; +import android.net.wifi.p2p.WifiP2pManager.Channel; +import android.net.wifi.WpsInfo; import android.os.Bundle; import android.os.Handler; +import android.os.Looper; +import android.preference.CheckBoxPreference; +import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceCategory; @@ -38,12 +46,17 @@ import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; import android.provider.Settings; import android.text.Html; +import android.util.Slog; import android.util.TypedValue; import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; @@ -59,6 +72,7 @@ import com.android.settings.SettingsPreferenceFragment; */ public final class WifiDisplaySettings extends SettingsPreferenceFragment { private static final String TAG = "WifiDisplaySettings"; + private static final boolean DEBUG = false; private static final int MENU_ID_SCAN = Menu.FIRST; @@ -74,6 +88,17 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { private Switch mActionBarSwitch; + /* certification */ + private boolean mWifiDisplayCertificationOn; + private WifiP2pManager mWifiP2pManager; + private Channel mWifiP2pChannel; + private PreferenceGroup mCertCategory; + private boolean mListen; + private boolean mAutoGO; + private int mWpsConfig = WpsInfo.INVALID; + private int mListenChannel; + private int mOperatingChannel; + public WifiDisplaySettings() { } @@ -82,6 +107,8 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { super.onCreate(icicle); mDisplayManager = (DisplayManager)getActivity().getSystemService(Context.DISPLAY_SERVICE); + mWifiP2pManager = (WifiP2pManager)getActivity().getSystemService(Context.WIFI_P2P_SERVICE); + mWifiP2pChannel = mWifiP2pManager.initialize(getActivity(), Looper.getMainLooper(), null); addPreferencesFromResource(R.xml.wifi_display_settings); setHasOptionsMenu(true); @@ -131,8 +158,12 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { filter.addAction(DisplayManager.ACTION_WIFI_DISPLAY_STATUS_CHANGED); context.registerReceiver(mReceiver, filter); - getContentResolver().registerContentObserver(Settings.Secure.getUriFor( + getContentResolver().registerContentObserver(Settings.Global.getUriFor( Settings.Global.WIFI_DISPLAY_ON), false, mSettingsObserver); + getContentResolver().registerContentObserver(Settings.Global.getUriFor( + Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON), false, mSettingsObserver); + getContentResolver().registerContentObserver(Settings.Global.getUriFor( + Settings.Global.WIFI_DISPLAY_WPS_CONFIG), false, mSettingsObserver); mDisplayManager.scanWifiDisplays(); @@ -182,7 +213,7 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { if (display.equals(mWifiDisplayStatus.getActiveDisplay())) { showDisconnectDialog(display); - } else { + } else if (display.canConnect()){ mDisplayManager.connectWifiDisplay(display.getDeviceAddress()); } } @@ -193,6 +224,10 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { private void update() { mWifiDisplayOnSetting = Settings.Global.getInt(getContentResolver(), Settings.Global.WIFI_DISPLAY_ON, 0) != 0; + mWifiDisplayCertificationOn = Settings.Global.getInt(getContentResolver(), + Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0; + mWpsConfig = Settings.Global.getInt(getContentResolver(), + Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); mWifiDisplayStatus = mDisplayManager.getWifiDisplayStatus(); applyState(); @@ -207,8 +242,11 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { preferenceScreen.removeAll(); if (featureState == WifiDisplayStatus.FEATURE_STATE_ON) { - final WifiDisplay[] pairedDisplays = mWifiDisplayStatus.getRememberedDisplays(); - final WifiDisplay[] availableDisplays = mWifiDisplayStatus.getAvailableDisplays(); + final WifiDisplay[] displays = mWifiDisplayStatus.getDisplays(); + + if (mWifiDisplayCertificationOn) { + buildCertificationMenu(preferenceScreen); + } if (mPairedDevicesCategory == null) { mPairedDevicesCategory = new PreferenceCategory(getActivity()); @@ -218,13 +256,6 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { } preferenceScreen.addPreference(mPairedDevicesCategory); - for (WifiDisplay d : pairedDisplays) { - mPairedDevicesCategory.addPreference(createWifiDisplayPreference(d, true)); - } - if (mPairedDevicesCategory.getPreferenceCount() == 0) { - preferenceScreen.removePreference(mPairedDevicesCategory); - } - if (mAvailableDevicesCategory == null) { mAvailableDevicesCategory = new ProgressCategory(getActivity(), null, R.string.wifi_display_no_devices_found); @@ -234,11 +265,16 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { } preferenceScreen.addPreference(mAvailableDevicesCategory); - for (WifiDisplay d : availableDisplays) { - if (!contains(pairedDisplays, d.getDeviceAddress())) { - mAvailableDevicesCategory.addPreference(createWifiDisplayPreference(d, false)); + for (WifiDisplay d : displays) { + if (d.isRemembered()) { + mPairedDevicesCategory.addPreference(createWifiDisplayPreference(d)); + } else if (d.isAvailable()){ + mAvailableDevicesCategory.addPreference(createWifiDisplayPreference(d)); } } + if (mPairedDevicesCategory.getPreferenceCount() == 0) { + preferenceScreen.removePreference(mPairedDevicesCategory); + } if (mWifiDisplayStatus.getScanState() == WifiDisplayStatus.SCAN_STATE_SCANNING) { mAvailableDevicesCategory.setProgress(true); } else { @@ -253,7 +289,244 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { getActivity().invalidateOptionsMenu(); } - private Preference createWifiDisplayPreference(final WifiDisplay d, boolean paired) { + private void buildCertificationMenu(final PreferenceScreen preferenceScreen) { + if (mCertCategory == null) { + mCertCategory = new PreferenceCategory(getActivity()); + mCertCategory.setTitle(R.string.wifi_display_certification_heading); + } else { + mCertCategory.removeAll(); + } + preferenceScreen.addPreference(mCertCategory); + + // display session info if there is an active p2p session + if (!mWifiDisplayStatus.getSessionInfo().getGroupId().isEmpty()) { + Preference p = new Preference(getActivity()); + p.setTitle(R.string.wifi_display_session_info); + p.setSummary(mWifiDisplayStatus.getSessionInfo().toString()); + mCertCategory.addPreference(p); + + // show buttons for Pause/Resume when a WFD session is established + if (mWifiDisplayStatus.getSessionInfo().getSessionId() != 0) { + mCertCategory.addPreference(new Preference(getActivity()) { + @Override + public View getView(View convertView, ViewGroup parent) { + final View v; + if (convertView == null) { + LayoutInflater li = (LayoutInflater) getActivity(). + getSystemService(Service.LAYOUT_INFLATER_SERVICE); + v = li.inflate(R.layout.two_buttons_panel, null); + } else { + v = convertView; + } + + Button b = (Button)v.findViewById(R.id.left_button); + b.setText(R.string.wifi_display_pause); + b.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mDisplayManager.pauseWifiDisplay(); + } + }); + + b = (Button)v.findViewById(R.id.right_button); + b.setText(R.string.wifi_display_resume); + b.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mDisplayManager.resumeWifiDisplay(); + } + }); + + return v; + } + }); + } + } + + // switch for Listen Mode + CheckBoxPreference cbp = new CheckBoxPreference(getActivity()) { + @Override + protected void onClick() { + mListen = !mListen; + setListenMode(mListen); + setChecked(mListen); + } + }; + cbp.setTitle(R.string.wifi_display_listen_mode); + cbp.setChecked(mListen); + mCertCategory.addPreference(cbp); + + // switch for Autonomous GO + cbp = new CheckBoxPreference(getActivity()) { + @Override + protected void onClick() { + mAutoGO = !mAutoGO; + if (mAutoGO) { + startAutoGO(); + } else { + stopAutoGO(); + } + setChecked(mAutoGO); + } + }; + cbp.setTitle(R.string.wifi_display_autonomous_go); + cbp.setChecked(mAutoGO); + mCertCategory.addPreference(cbp); + + // Drop down list for choosing WPS method (PBC/KEYPAD/DISPLAY) + ListPreference lp = new ListPreference(getActivity()) { + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + if (positiveResult) { + mWpsConfig = Integer.parseInt(getValue()); + setSummary("%1$s"); + getActivity().invalidateOptionsMenu(); + Settings.Global.putInt(getActivity().getContentResolver(), + Settings.Global.WIFI_DISPLAY_WPS_CONFIG, mWpsConfig); + } + } + }; + mWpsConfig = Settings.Global.getInt(getActivity().getContentResolver(), + Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID); + String[] wpsEntries = { "Default", "PBC", "KEYPAD", "DISPLAY" }; + String[] wpsValues = { + "" + WpsInfo.INVALID, + "" + WpsInfo.PBC, + "" + WpsInfo.KEYPAD, + "" + WpsInfo.DISPLAY }; + lp.setTitle(R.string.wifi_display_wps_config); + lp.setEntries(wpsEntries); + lp.setEntryValues(wpsValues); + lp.setValue("" + mWpsConfig); + lp.setSummary("%1$s"); + mCertCategory.addPreference(lp); + + // Drop down list for choosing listen channel + lp = new ListPreference(getActivity()) { + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + if (positiveResult) { + mListenChannel = Integer.parseInt(getValue()); + setSummary("%1$s"); + getActivity().invalidateOptionsMenu(); + setWifiP2pChannels(mListenChannel, mOperatingChannel); + } + } + }; + String[] lcEntries = { "Auto", "1", "6", "11" }; + String[] lcValues = { "0", "1", "6", "11" }; + lp.setTitle(R.string.wifi_display_listen_channel); + lp.setEntries(lcEntries); + lp.setEntryValues(lcValues); + lp.setValue("" + mListenChannel); + lp.setSummary("%1$s"); + mCertCategory.addPreference(lp); + + // Drop down list for choosing operating channel + lp = new ListPreference(getActivity()) { + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + if (positiveResult) { + mOperatingChannel = Integer.parseInt(getValue()); + setSummary("%1$s"); + getActivity().invalidateOptionsMenu(); + setWifiP2pChannels(mListenChannel, mOperatingChannel); + } + } + }; + String[] ocEntries = { "Auto", "1", "6", "11", "36" }; + String[] ocValues = { "0", "1", "6", "11", "36" }; + lp.setTitle(R.string.wifi_display_operating_channel); + lp.setEntries(ocEntries); + lp.setEntryValues(ocValues); + lp.setValue("" + mOperatingChannel); + lp.setSummary("%1$s"); + mCertCategory.addPreference(lp); + } + + private void startAutoGO() { + if (DEBUG) { + Slog.d(TAG, "Starting Autonomous GO..."); + } + mWifiP2pManager.createGroup(mWifiP2pChannel, new ActionListener() { + @Override + public void onSuccess() { + if (DEBUG) { + Slog.d(TAG, "Successfully started AutoGO."); + } + } + + @Override + public void onFailure(int reason) { + Slog.e(TAG, "Failed to start AutoGO with reason " + reason + "."); + } + }); + } + + private void stopAutoGO() { + if (DEBUG) { + Slog.d(TAG, "Stopping Autonomous GO..."); + } + mWifiP2pManager.removeGroup(mWifiP2pChannel, new ActionListener() { + @Override + public void onSuccess() { + if (DEBUG) { + Slog.d(TAG, "Successfully stopped AutoGO."); + } + } + + @Override + public void onFailure(int reason) { + Slog.e(TAG, "Failed to stop AutoGO with reason " + reason + "."); + } + }); + } + + private void setListenMode(final boolean enable) { + if (DEBUG) { + Slog.d(TAG, "Setting listen mode to: " + enable); + } + mWifiP2pManager.listen(mWifiP2pChannel, enable, new ActionListener() { + @Override + public void onSuccess() { + if (DEBUG) { + Slog.d(TAG, "Successfully " + (enable ? "entered" : "exited") + +" listen mode."); + } + } + + @Override + public void onFailure(int reason) { + Slog.e(TAG, "Failed to " + (enable ? "entered" : "exited") + +" listen mode with reason " + reason + "."); + } + }); + } + + private void setWifiP2pChannels(final int lc, final int oc) { + if (DEBUG) { + Slog.d(TAG, "Setting wifi p2p channel: lc=" + lc + ", oc=" + oc); + } + mWifiP2pManager.setWifiP2pChannels(mWifiP2pChannel, + lc, oc, new ActionListener() { + @Override + public void onSuccess() { + if (DEBUG) { + Slog.d(TAG, "Successfully set wifi p2p channels."); + } + } + + @Override + public void onFailure(int reason) { + Slog.e(TAG, "Failed to set wifi p2p channels with reason " + reason + "."); + } + }); + } + + private Preference createWifiDisplayPreference(final WifiDisplay d) { WifiDisplayPreference p = new WifiDisplayPreference(getActivity(), d); if (d.equals(mWifiDisplayStatus.getActiveDisplay())) { switch (mWifiDisplayStatus.getActiveDisplayState()) { @@ -264,11 +537,15 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { p.setSummary(R.string.wifi_display_status_connecting); break; } - } else if (paired && contains(mWifiDisplayStatus.getAvailableDisplays(), - d.getDeviceAddress())) { - p.setSummary(R.string.wifi_display_status_available); + } else if (d.isAvailable()) { + if (!d.canConnect()) { + p.setSummary(R.string.wifi_display_status_in_use); + p.setEnabled(false); + } else if (d.isRemembered()) { + p.setSummary(R.string.wifi_display_status_available); + } } - if (paired) { + if (d.isRemembered()) { p.setWidgetLayoutResource(R.layout.wifi_display_preference); } return p; diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java index 5d581d85af8..85a0494c58a 100644 --- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java +++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java @@ -59,7 +59,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { private static final int BUTTON_WIFI = 0; private static final int BUTTON_BRIGHTNESS = 1; private static final int BUTTON_SYNC = 2; - private static final int BUTTON_GPS = 3; + private static final int BUTTON_LOCATION = 3; private static final int BUTTON_BLUETOOTH = 4; // This widget keeps track of two sets of states: @@ -102,7 +102,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { private static final StateTracker sWifiState = new WifiStateTracker(); private static final StateTracker sBluetoothState = new BluetoothStateTracker(); - private static final StateTracker sGpsState = new GpsStateTracker(); + private static final StateTracker sLocationState = new LocationStateTracker(); private static final StateTracker sSyncState = new SyncStateTracker(); private static SettingsObserver sSettingsObserver; @@ -506,24 +506,30 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { } /** - * Subclass of StateTracker for GPS state. + * Subclass of StateTracker for location state. */ - private static final class GpsStateTracker extends StateTracker { - public int getContainerId() { return R.id.btn_gps; } - public int getButtonId() { return R.id.img_gps; } - public int getIndicatorId() { return R.id.ind_gps; } - public int getButtonDescription() { return R.string.gadget_gps; } + private static final class LocationStateTracker extends StateTracker { + public int getContainerId() { return R.id.btn_location; } + public int getButtonId() { return R.id.img_location; } + public int getIndicatorId() { return R.id.ind_location; } + public int getButtonDescription() { return R.string.gadget_location; } public int getButtonImageId(boolean on) { - return on ? R.drawable.ic_appwidget_settings_gps_on_holo - : R.drawable.ic_appwidget_settings_gps_off_holo; + return on ? R.drawable.ic_appwidget_settings_location_on_holo + : R.drawable.ic_appwidget_settings_location_off_holo; } @Override public int getActualState(Context context) { ContentResolver resolver = context.getContentResolver(); - boolean on = Settings.Secure.isLocationProviderEnabled( - resolver, LocationManager.GPS_PROVIDER); - return on ? STATE_ENABLED : STATE_DISABLED; + int currentLocationMode = Settings.Secure.getInt(resolver, + Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); + switch (currentLocationMode) { + case Settings.Secure.LOCATION_MODE_BATTERY_SAVING: + case Settings.Secure.LOCATION_MODE_OFF: + return STATE_DISABLED; + } + + return STATE_ENABLED; } @Override @@ -542,15 +548,28 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { final UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE); if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) { - Settings.Secure.setLocationProviderEnabled( - resolver, - LocationManager.GPS_PROVIDER, - desiredState); + int currentMode = Settings.Secure.getInt(resolver, + Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); + int mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY; + switch (currentMode) { + case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY: + mode = Settings.Secure.LOCATION_MODE_BATTERY_SAVING; + break; + case Settings.Secure.LOCATION_MODE_BATTERY_SAVING: + mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY; + break; + case Settings.Secure.LOCATION_MODE_SENSORS_ONLY: + mode = Settings.Secure.LOCATION_MODE_OFF; + break; + case Settings.Secure.LOCATION_MODE_OFF: + mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY; + break; + } + Settings.Secure.putInt(resolver, Settings.Secure.LOCATION_MODE, mode); return desiredState; } - return Settings.Secure.isLocationProviderEnabled( - resolver, - LocationManager.GPS_PROVIDER); + + return getActualState(context) == STATE_ENABLED; } @Override @@ -669,8 +688,8 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { views.setOnClickPendingIntent(R.id.btn_sync, getLaunchPendingIntent(context, BUTTON_SYNC)); - views.setOnClickPendingIntent(R.id.btn_gps, - getLaunchPendingIntent(context, BUTTON_GPS)); + views.setOnClickPendingIntent(R.id.btn_location, + getLaunchPendingIntent(context, BUTTON_LOCATION)); views.setOnClickPendingIntent(R.id.btn_bluetooth, getLaunchPendingIntent(context, BUTTON_BLUETOOTH)); @@ -701,7 +720,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { private static void updateButtons(RemoteViews views, Context context) { sWifiState.setImageViewResources(context, views); sBluetoothState.setImageViewResources(context, views); - sGpsState.setImageViewResources(context, views); + sLocationState.setImageViewResources(context, views); sSyncState.setImageViewResources(context, views); if (getBrightnessMode(context)) { @@ -781,8 +800,8 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { sWifiState.onActualStateChange(context, intent); } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) { sBluetoothState.onActualStateChange(context, intent); - } else if (LocationManager.PROVIDERS_CHANGED_ACTION.equals(action)) { - sGpsState.onActualStateChange(context, intent); + } else if (LocationManager.MODE_CHANGED_ACTION.equals(action)) { + sLocationState.onActualStateChange(context, intent); } else if (ContentResolver.ACTION_SYNC_CONN_STATUS_CHANGED.equals(action)) { sSyncState.onActualStateChange(context, intent); } else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) { @@ -794,8 +813,8 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider { toggleBrightness(context); } else if (buttonId == BUTTON_SYNC) { sSyncState.toggleState(context); - } else if (buttonId == BUTTON_GPS) { - sGpsState.toggleState(context); + } else if (buttonId == BUTTON_LOCATION) { + sLocationState.toggleState(context); } else if (buttonId == BUTTON_BLUETOOTH) { sBluetoothState.toggleState(context); } diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java index 20146eb27ae..c4d1f7c65fd 100644 --- a/src/com/android/settings/wifi/AccessPoint.java +++ b/src/com/android/settings/wifi/AccessPoint.java @@ -16,6 +16,8 @@ package com.android.settings.wifi; +import com.android.settings.R; + import android.content.Context; import android.net.NetworkInfo.DetailedState; import android.net.wifi.ScanResult; @@ -29,8 +31,6 @@ import android.util.Log; import android.view.View; import android.widget.ImageView; -import com.android.settings.R; - class AccessPoint extends Preference { static final String TAG = "Settings.AccessPoint"; @@ -211,7 +211,8 @@ class AccessPoint extends Preference { signal.setImageDrawable(null); } else { signal.setImageLevel(getLevel()); - signal.setImageResource(R.drawable.wifi_signal); + signal.setImageDrawable(getContext().getTheme().obtainStyledAttributes( + new int[] {R.attr.wifi_signal}).getDrawable(0)); signal.setImageState((security != SECURITY_NONE) ? STATE_SECURED : STATE_NONE, true); } diff --git a/src/com/android/settings/wifi/WifiDialog.java b/src/com/android/settings/wifi/WifiDialog.java index 82b0cc6180e..f1720c1c7df 100644 --- a/src/com/android/settings/wifi/WifiDialog.java +++ b/src/com/android/settings/wifi/WifiDialog.java @@ -38,7 +38,7 @@ class WifiDialog extends AlertDialog implements WifiConfigUiBase { public WifiDialog(Context context, DialogInterface.OnClickListener listener, AccessPoint accessPoint, boolean edit) { - super(context, R.style.Theme_WifiDialog); + super(context); mEdit = edit; mListener = listener; mAccessPoint = accessPoint; diff --git a/src/com/android/settings/wifi/WifiEnabler.java b/src/com/android/settings/wifi/WifiEnabler.java index 7ce3b8d9cca..a6989f0c23c 100644 --- a/src/com/android/settings/wifi/WifiEnabler.java +++ b/src/com/android/settings/wifi/WifiEnabler.java @@ -120,11 +120,10 @@ public class WifiEnabler implements CompoundButton.OnCheckedChangeListener { mWifiManager.setWifiApEnabled(null, false); } - if (mWifiManager.setWifiEnabled(isChecked)) { - // Intent has been taken into account, disable until new state is active - mSwitch.setEnabled(false); - } else { + mSwitch.setEnabled(false); + if (!mWifiManager.setWifiEnabled(isChecked)) { // Error + mSwitch.setEnabled(true); Toast.makeText(mContext, R.string.wifi_error, Toast.LENGTH_SHORT).show(); } } diff --git a/src/com/android/settings/wifi/WifiPickerActivity.java b/src/com/android/settings/wifi/WifiPickerActivity.java index 12612b5a720..e1e7c51c1f1 100644 --- a/src/com/android/settings/wifi/WifiPickerActivity.java +++ b/src/com/android/settings/wifi/WifiPickerActivity.java @@ -16,6 +16,8 @@ package com.android.settings.wifi; import com.android.settings.ButtonBarHandler; +import com.android.settings.ChooseLockGeneric.ChooseLockGenericFragment; +import com.android.settings.wifi.p2p.WifiP2pSettings; import android.app.Fragment; import android.content.Intent; @@ -42,6 +44,14 @@ public class WifiPickerActivity extends PreferenceActivity implements ButtonBarH return modIntent; } + @Override + protected boolean isValidFragment(String fragmentName) { + if (WifiSettings.class.getName().equals(fragmentName) + || WifiP2pSettings.class.getName().equals(fragmentName) + || AdvancedWifiSettings.class.getName().equals(fragmentName)) return true; + return false; + } + /** * Almost dead copy of * {@link PreferenceActivity#startWithFragment(String, Bundle, Fragment, int)}, except diff --git a/src/com/android/settings/wifi/WifiScanModeActivity.java b/src/com/android/settings/wifi/WifiScanModeActivity.java index b83b22f0b0c..4133eb81986 100644 --- a/src/com/android/settings/wifi/WifiScanModeActivity.java +++ b/src/com/android/settings/wifi/WifiScanModeActivity.java @@ -24,6 +24,8 @@ import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.net.wifi.WifiManager; import android.os.Bundle; import android.provider.Settings; @@ -43,7 +45,13 @@ public class WifiScanModeActivity extends Activity { if (savedInstanceState == null) { if (intent != null && intent.getAction() .equals(WifiManager.ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE)) { + ApplicationInfo ai; mApp = getCallingPackage(); + try { + PackageManager pm = getPackageManager(); + ai = pm.getApplicationInfo(mApp, 0); + mApp = (String)pm.getApplicationLabel(ai); + } catch (PackageManager.NameNotFoundException e) { } } else { finish(); return; diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 24f56c1b4a9..1caf58bcd1c 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -19,6 +19,10 @@ package com.android.settings.wifi; import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID; import static android.os.UserManager.DISALLOW_CONFIG_WIFI; +import com.android.settings.R; +import com.android.settings.RestrictedSettingsFragment; +import com.android.settings.wifi.p2p.WifiP2pSettings; + import android.app.ActionBar; import android.app.Activity; import android.app.AlertDialog; @@ -30,6 +34,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.content.res.TypedArray; import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; @@ -43,12 +48,10 @@ import android.net.wifi.WpsInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; -import android.os.UserManager; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.provider.Settings; -import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; import android.view.ContextMenu; @@ -71,10 +74,6 @@ import android.widget.Switch; import android.widget.TextView; import android.widget.Toast; -import com.android.settings.R; -import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.wifi.p2p.WifiP2pSettings; - import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -90,7 +89,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * The second is for Setup Wizard, with a simplified interface that hides the action bar * and menus. */ -public class WifiSettings extends SettingsPreferenceFragment +public class WifiSettings extends RestrictedSettingsFragment implements DialogInterface.OnClickListener { private static final String TAG = "WifiSettings"; private static final int MENU_ID_WPS_PBC = Menu.FIRST; @@ -129,9 +128,6 @@ public class WifiSettings extends SettingsPreferenceFragment private WifiManager.ActionListener mForgetListener; private boolean mP2pSupported; - - private UserManager mUserManager; - private WifiEnabler mWifiEnabler; // An access point being editted is stored here. private AccessPoint mSelectedAccessPoint; @@ -139,7 +135,7 @@ public class WifiSettings extends SettingsPreferenceFragment private DetailedState mLastState; private WifiInfo mLastInfo; - private AtomicBoolean mConnected = new AtomicBoolean(false); + private final AtomicBoolean mConnected = new AtomicBoolean(false); private WifiDialog mDialog; @@ -179,6 +175,7 @@ public class WifiSettings extends SettingsPreferenceFragment /* End of "used in Wifi Setup context" */ public WifiSettings() { + super(DISALLOW_CONFIG_WIFI); mFilter = new IntentFilter(); mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); @@ -292,7 +289,6 @@ public class WifiSettings extends SettingsPreferenceFragment mP2pSupported = getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT); mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); - mUserManager = (UserManager) getSystemService(Context.USER_SERVICE); mConnectListener = new WifiManager.ActionListener() { @Override @@ -449,13 +445,14 @@ public class WifiSettings extends SettingsPreferenceFragment @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // If the user is not allowed to configure wifi, do not show the menu. - if (mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)) return; + if (isRestrictedAndNotPinProtected()) return; final boolean wifiIsEnabled = mWifiManager.isWifiEnabled(); + TypedArray ta = getActivity().getTheme().obtainStyledAttributes( + new int[] {R.attr.ic_menu_add, R.attr.ic_wps}); if (mSetupWizardMode) { - // FIXME: add setIcon() when graphics are available menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc) - .setIcon(R.drawable.ic_wps) + .setIcon(ta.getDrawable(1)) .setEnabled(wifiIsEnabled) .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) @@ -463,11 +460,11 @@ public class WifiSettings extends SettingsPreferenceFragment .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } else { menu.add(Menu.NONE, MENU_ID_WPS_PBC, 0, R.string.wifi_menu_wps_pbc) - .setIcon(R.drawable.ic_wps) + .setIcon(ta.getDrawable(1)) .setEnabled(wifiIsEnabled) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add(Menu.NONE, MENU_ID_ADD_NETWORK, 0, R.string.wifi_add_network) - .setIcon(R.drawable.ic_menu_add) + .setIcon(ta.getDrawable(0)) .setEnabled(wifiIsEnabled) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.wifi_menu_scan) @@ -486,6 +483,7 @@ public class WifiSettings extends SettingsPreferenceFragment //.setIcon(android.R.drawable.ic_menu_manage) .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); } + ta.recycle(); super.onCreateOptionsMenu(menu, inflater); } @@ -507,7 +505,7 @@ public class WifiSettings extends SettingsPreferenceFragment @Override public boolean onOptionsItemSelected(MenuItem item) { // If the user is not allowed to configure wifi, do not handle menu selections. - if (mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)) return false; + if (isRestrictedAndNotPinProtected()) return false; switch (item.getItemId()) { case MENU_ID_WPS_PBC: @@ -709,7 +707,7 @@ public class WifiSettings extends SettingsPreferenceFragment // Safeguard from some delayed event handling if (getActivity() == null) return; - if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_WIFI)) { + if (isRestrictedAndNotPinProtected()) { addMessagePreference(R.string.wifi_empty_list_user_restricted); return; } @@ -813,7 +811,7 @@ public class WifiSettings extends SettingsPreferenceFragment /** A restricted multimap for use in constructAccessPoints */ private class Multimap { - private HashMap> store = new HashMap>(); + private final HashMap> store = new HashMap>(); /** retrieve a non-null list of values with key K */ List getAll(K key) { List values = store.get(key); diff --git a/src/com/android/settings/wifi/WifiSetupActivity.java b/src/com/android/settings/wifi/WifiSetupActivity.java index 84159544159..1739750d7dd 100644 --- a/src/com/android/settings/wifi/WifiSetupActivity.java +++ b/src/com/android/settings/wifi/WifiSetupActivity.java @@ -17,7 +17,25 @@ package com.android.settings.wifi; import com.android.settings.ButtonBarHandler; -// dummy class for setup wizard theme -public class WifiSetupActivity extends WifiPickerActivity implements ButtonBarHandler { +import android.content.res.Resources; -} \ No newline at end of file +public class WifiSetupActivity extends WifiPickerActivity implements ButtonBarHandler { + // Extra containing the resource name of the theme to be used + private static final String EXTRA_THEME = "theme"; + private static final String THEME_HOLO = "holo"; + private static final String THEME_HOLO_LIGHT = "holo_light"; + + // Style resources containing theme settings + private static final String RESOURCE_THEME_DARK = "SetupWizardWifiTheme"; + private static final String RESOURCE_THEME_LIGHT = "SetupWizardWifiTheme.Light"; + + @Override + protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { + String themeName = getIntent().getStringExtra(EXTRA_THEME); + if (themeName != null && themeName.equalsIgnoreCase(THEME_HOLO_LIGHT)) { + resid = getResources().getIdentifier(RESOURCE_THEME_LIGHT, "style", + getPackageName()); + } + super.onApplyThemeResource(theme, resid, first); + } +} diff --git a/src/com/android/settings/wifi/p2p/WifiP2pPeer.java b/src/com/android/settings/wifi/p2p/WifiP2pPeer.java index 1eb810eb68e..a364021dd5f 100644 --- a/src/com/android/settings/wifi/p2p/WifiP2pPeer.java +++ b/src/com/android/settings/wifi/p2p/WifiP2pPeer.java @@ -20,21 +20,18 @@ import com.android.settings.R; import android.content.Context; import android.net.wifi.WifiManager; -import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.p2p.WifiP2pDevice; import android.preference.Preference; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; -import java.util.Comparator; - public class WifiP2pPeer extends Preference { private static final int[] STATE_SECURED = {R.attr.state_encrypted}; public WifiP2pDevice device; - private int mRssi; + private final int mRssi; private ImageView mSignal; private static final int SIGNAL_LEVELS = 4; @@ -57,7 +54,7 @@ public class WifiP2pPeer extends Preference { if (mRssi == Integer.MAX_VALUE) { mSignal.setImageDrawable(null); } else { - mSignal.setImageResource(R.drawable.wifi_signal); + mSignal.setImageResource(R.drawable.wifi_signal_dark); mSignal.setImageState(STATE_SECURED, true); } refresh(); diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java index 63ef549d60e..cd1d721712c 100644 --- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java +++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java @@ -83,6 +83,7 @@ public class WifiP2pSettings extends SettingsPreferenceFragment private OnClickListener mDeleteGroupListener; private WifiP2pPeer mSelectedWifiPeer; private WifiP2pPersistentGroup mSelectedGroup; + private String mSelectedGroupName; private EditText mDeviceNameText; private boolean mWifiP2pEnabled; @@ -102,6 +103,7 @@ public class WifiP2pSettings extends SettingsPreferenceFragment private static final String SAVE_DIALOG_PEER = "PEER_STATE"; private static final String SAVE_DEVICE_NAME = "DEV_NAME"; + private static final String SAVE_SELECTED_GROUP = "GROUP_NAME"; private WifiP2pDevice mThisDevice; private WifiP2pDeviceList mPeers = new WifiP2pDeviceList(); @@ -160,6 +162,10 @@ public class WifiP2pSettings extends SettingsPreferenceFragment } }; + public WifiP2pSettings() { + if (DBG) Log.d(TAG, "Creating WifiP2pSettings ..."); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { addPreferencesFromResource(R.xml.wifi_p2p_settings); @@ -191,6 +197,9 @@ public class WifiP2pSettings extends SettingsPreferenceFragment if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_DEVICE_NAME)) { mSavedDeviceName = savedInstanceState.getString(SAVE_DEVICE_NAME); } + if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_SELECTED_GROUP)) { + mSelectedGroupName = savedInstanceState.getString(SAVE_SELECTED_GROUP); + } mRenameListener = new OnClickListener() { @Override @@ -259,17 +268,28 @@ public class WifiP2pSettings extends SettingsPreferenceFragment public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_POSITIVE) { if (mWifiP2pManager != null) { - mWifiP2pManager.deletePersistentGroup(mChannel, - mSelectedGroup.getNetworkId(), - new WifiP2pManager.ActionListener() { - public void onSuccess() { - if (DBG) Log.d(TAG, " delete group success"); - } - public void onFailure(int reason) { - if (DBG) Log.d(TAG, " delete group fail " + reason); - } - }); + if (mSelectedGroup != null) { + if (DBG) Log.d(TAG, " deleting group " + mSelectedGroup.getGroupName()); + mWifiP2pManager.deletePersistentGroup(mChannel, + mSelectedGroup.getNetworkId(), + new WifiP2pManager.ActionListener() { + public void onSuccess() { + if (DBG) Log.d(TAG, " delete group success"); + } + public void onFailure(int reason) { + if (DBG) Log.d(TAG, " delete group fail " + reason); + } + }); + mSelectedGroup = null; + } else { + if (DBG) Log.w(TAG, " No selected group to delete!" ); + } } + } else if (which == DialogInterface.BUTTON_NEGATIVE) { + if (DBG) { + Log.d(TAG, " forgetting selected group " + mSelectedGroup.getGroupName()); + } + mSelectedGroup = null; } } }; @@ -453,8 +473,8 @@ public class WifiP2pSettings extends SettingsPreferenceFragment AlertDialog dialog = new AlertDialog.Builder(getActivity()) .setMessage(getActivity().getString(stringId)) .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDeleteGroupListener) - .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null) - .create(); + .setNegativeButton(getActivity().getString(R.string.dlg_cancel), + mDeleteGroupListener).create(); return dialog; } return null; @@ -468,6 +488,9 @@ public class WifiP2pSettings extends SettingsPreferenceFragment if (mDeviceNameText != null) { outState.putString(SAVE_DEVICE_NAME, mDeviceNameText.getText().toString()); } + if (mSelectedGroup != null) { + outState.putString(SAVE_SELECTED_GROUP, mSelectedGroup.getGroupName()); + } } private void handlePeersChanged() { @@ -488,7 +511,20 @@ public class WifiP2pSettings extends SettingsPreferenceFragment for (WifiP2pGroup group: groups.getGroupList()) { if (DBG) Log.d(TAG, " group " + group); - mPersistentGroup.addPreference(new WifiP2pPersistentGroup(getActivity(), group)); + WifiP2pPersistentGroup wppg = new WifiP2pPersistentGroup(getActivity(), group); + mPersistentGroup.addPreference(wppg); + if (wppg.getGroupName().equals(mSelectedGroupName)) { + if (DBG) Log.d(TAG, "Selecting group " + wppg.getGroupName()); + mSelectedGroup = wppg; + mSelectedGroupName = null; + } + } + if (mSelectedGroupName != null) { + // Looks like there's a dialog pending getting user confirmation to delete the + // selected group. When user hits OK on that dialog, we won't do anything; but we + // shouldn't be in this situation in first place, because these groups are persistent + // groups and they shouldn't just get deleted! + Log.w(TAG, " Selected group " + mSelectedGroupName + " disappered on next query "); } } diff --git a/tests/res/values-ca/strings.xml b/tests/res/values-ca/strings.xml index d988ebbf0a3..8ddac7df0bf 100644 --- a/tests/res/values-ca/strings.xml +++ b/tests/res/values-ca/strings.xml @@ -16,7 +16,7 @@ - "Detectable" + "Visible" "Inicia la cerca" "Atura la cerca" "Hola, Operador!"